0

我试图让一个程序在我的 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.pnghttp://dl.dropbox.com/u/3060536/prtsrc2.png了解详细信息(或者至少我从这些中得出结论,OpenCL 运行正常)。

所以我现在有点无能为力,在哪里寻找答案。为什么 JOCL 只能在我的 ATI Radeon HD 5450 上执行 6 次并行执行?

4

1 回答 1

1

您将本地工作大小硬编码为 1。使用更大的大小或让驱动程序为您选择一个。

此外,您的内核不是以 OpenCL 风格设计的。您应该取出 for 循环,让驱动程序为您处理迭代。

于 2012-01-04T19:53:35.447 回答