gpt4 book ai didi

c++ - OpenCL 内核性能非常糟糕。为什么我的代码没有 OpenCL 会更好?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:02 28 4
gpt4 key购买 nike

我正在编写 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

我做了一个benchmark,OpenCL Kernel Performance很差。(左轴:以毫秒为单位的执行时间,下轴:模拟 Ant 的数量) http://abload.de/img/kernel0uu3z.png

你能给我建议吗?

如果你有兴趣,你可以在 git 仓库中找到漏洞代码(OpenCL 的东西发生在这里:https://github.com/Furtano/BA-Code-fuer-Mac/blob/master/BA/clInitFunctions.cpp)。

谢谢:)

最佳答案

你有很多if/else,你就不能换个方式写吗?不要遵循 if/else 路径,因为您将永远无法到达任何地方。你需要让 GPU 只执行有用的指令。不是数百万个 if/else。

最好只跟踪和执行网格中的 Ant 。您最好跟踪它们并四处移动它们。存储了他们的坐标。您显然还需要一张包含 Ant 位置和状态的 map ,因此您将需要一个多内核系统。

此外,从使用 int 变量存储单个 bool 值开始,您还有大量无用的内存传输。这会导致 90% 的无用传输成为 GPU 瓶颈。

关于c++ - OpenCL 内核性能非常糟糕。为什么我的代码没有 OpenCL 会更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22967138/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com