我试图让程序在我的GPU上运行并从一个简单的示例开始我修改了http://www.jocl.org/samples/samples.html上的第一个样本并运行以下小脚本:我同时运行n个“线程”(什么是GPU等效线程的正确名称?),每个执行20000000 / n个独立的tanh() - 计算。您可以在此处查看我的代码:http://pastebin.com/DY2pdJzL
速度远远超出我的预期:
因此,在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次并行执行?
答案 0 :(得分:1)
您正在将本地工作大小硬编码为1.使用更大的尺寸或让司机为您选择一个。
此外,您的内核不是以OpenCL风格设计的。您应该取出for循环并让驱动程序为您处理迭代。