我可以从这个经验得出什么结论?

时间:2017-07-21 16:34:39

标签: opencl

我得到了不同大小的groupize的矢量加法器的执行时间,我在这个实验中只使用了一个组。

groupsize --------execution time
1 ----------------3.6
50 ---------------4.22
100 --------------4.3
200 --------------4.28
300 --------------4.3
400 --------------4.31
500 --------------4.38
600 --------------4.38
700 --------------4.78
800 --------------5.18
900 --------------5.78
1000 -------------6.4

我可以得出结论一个sm可以一起工作大约600个工作项吗? 我有一些问题,任何人都可以帮助我吗?

为什么当groupsize从1增加到50以及从600增加到1000时,执行时间会急剧增加?

非常感谢

1 个答案:

答案 0 :(得分:1)

查看内核和主机入队参数的一些代码会很有帮助。结论还取决于您运行的硬件类型 - GPU,CPU,加速器,FPGA ......?

一些想法:

  • GPU通常可以在执行单元中并行运行2个幂的线程数。如果你尝试例如,你可能会得到更好的结果16,32,64,128等CPU和其他加速器通常具有2的幂的SIMD宽度,例如x86-64 SSE寄存器可以容纳4个浮点数,AVX 8,AVX512 16等,所以很可能也会帮助那里。
  • 由于您可以自由地改变团体规模,我将假设您的工作项目不需要通过local记忆或障碍相互协调。 (问题是embarrassingly parallel。)理论上,组大小为1允许编译器,驱动程序和硬件最大限度地灵活地将工作项最佳地分配给线程和并行执行单元。因此,这是最快的,这不足为奇。 (根据寄存器压力和内存访问模式,在令人尴尬的并行情况下手动增加特定类型硬件的组大小有时会有所帮助。)
  • 在GPU上,工作组中的所有项目必须在同一个执行单元上运行,以便能够协调和共享本地内存。因此,通过增加组大小,您可以限制工作负载可以分散的执行单元数量,并且执行单元需要以串行方式运行工作项 - 您正在减少并行性。超过600你可能提交的工作组少于硬件执行单元。