我试图让一个程序在我的 GPU 上运行并从一个简单的示例开始我修改了http://www.jocl.org/samples/samples.html上的第一个示例并运行以下小脚本:我运行 n同时的“线程”(GPU 等效线程的正确名称是什么?),每个线程执行 20000000/n 次独立的 tanh() 计算。你可以在这里看到我的代码:http: //pastebin.com/DY2pdJzL
速度远远不是我预期的:
- n=1 需要 12.2 秒
- n=2 需要 6.3 秒
- n=3 需要 4.4 秒
- 对于 n=4 需要 3.4 秒
- n=5 需要 3.1 秒
- 对于 n=6 及以上,需要 2.7 秒。
所以在 n=6 之后(无论是 n=8、n=20、n=100、n=1000 还是 n=100000),性能都没有提高,这意味着其中只有 6 个是并行计算的。但是,根据我的卡的规格应该有 80 个核心:http ://www.amd.com/us/products/desktop/graphics/ati-radeon-hd-5000/hd-5450-overview/pages/hd -5450-overview.aspx#2
这不是开销问题,因为增加或减少 20000000 仅在所有执行时间中影响线性因素。
我已经安装了支持 OpenCL 的 AMD APP SDK 和驱动程序:请参阅http://dl.dropbox.com/u/3060536/prtscr.png和http://dl.dropbox.com/u/3060536/prtsrc2.png了解详细信息(或者至少我从这些中得出结论,OpenCL 运行正常)。
所以我现在有点无能为力,在哪里寻找答案。为什么 JOCL 只能在我的 ATI Radeon HD 5450 上执行 6 次并行执行?