【发布时间】:2014-05-22 22:13:32
【问题描述】:
我正在编写 Ant-Simulation。 内核性能非常糟糕。与标准 c++ 解决方案相比,它具有很大的性能劣势。
我不明白为什么。内核中的操作大多没有控制结构(如 if/else)。
内核:
https://github.com/Furtano/BA-Code-fuer-Mac/blob/master/BA/Ant.cl
https://github.com/Furtano/BA-Code-fuer-Mac/blob/master/BA/Pheromon.cl
我做了一个基准测试,OpenCL 内核性能很差。 (左轴:以毫秒为单位的执行时间,下轴:模拟蚂蚁的数量)
你能给我建议吗?
如果你有兴趣,你可以在 git repo 中找到漏洞代码(OpenCL 的东西在这里发生:https://github.com/Furtano/BA-Code-fuer-Mac/blob/master/BA/clInitFunctions.cpp)。
谢谢:)
【问题讨论】:
-
"内核中的操作大多没有控制结构(如 if/else)。我看到很多控制结构,例如
if、for等。据我了解,每个执行实例都必须执行相同的指令(例如 SIMD/SIMT)。这意味着如果一个实例在 for 循环中,但所有其他实例都采用了 if 的错误分支并且不在 for 循环中,则它们必须等待它,以便它们都可以留在同一条指令上。 -
您确定选择的平台是您的 GPU 吗?也许在您的问题中添加一些控制台输出。
-
是的,我想是这样(不确定)看这里:github.com/Furtano/BA-Code-fuer-Mac/blob/master/BA/…
-
@Furtano 在选择平台的代码中,您有一条注释说明“只需选择第一个可用平台”,它可能是也可能不是 GPU。您的代码是否向控制台输出任何内容?
-
@AnthonyVallée-Dubois 没有输出
标签: c++ performance kernel opencl simulation