Opencl 从这个实验中我能得到什么结论?

Opencl 从这个实验中我能得到什么结论?,opencl,Opencl,得到了不同大小的groupsize向量加法器的执行时间,并且在本实验中只使用了一个组 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 ------------

得到了不同大小的groupsize向量加法器的执行时间,并且在本实验中只使用了一个组

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时,为什么执行时间会急剧增加


非常感谢

查看一些代码会很有帮助,包括内核和主机排队参数。结论还取决于你在什么样的硬件上运行这个——GPU、CPU、加速器、FPGA等等

一些想法:

GPU通常可以在一个执行单元中并行运行2个以上的线程。如果您尝试16、32、64、128等,您可能会获得更好的结果。CPU和其他加速器通常具有SIMD宽度,这些宽度也是2的幂,例如x86-64 SSE寄存器可以容纳4个浮点、AVX 8、AVX512 16等。因此,它很可能在这方面也会有所帮助。 由于您可以自由地改变组大小,我将假设您的工作项不需要通过本地内存或屏障相互协调。问题是。理论上,1的组大小允许编译器、驱动程序和硬件最大限度地灵活地将工作项以最佳方式分配给线程和并行执行单元。因此,这是最快的也就不足为奇了。根据寄存器压力和内存访问模式,在令人尴尬的并行情况下,手动增加特定类型硬件的组大小有时仍然有帮助。 在GPU上,工作组中的所有项必须在同一执行单元上运行,以便能够协调和共享本地内存。因此,通过增加组大小,您限制了工作负载可以分布的执行单元的数量,并且执行单元需要连续运行您的工作项—您减少了并行性。超过600个时,您提交的工作组可能少于硬件的执行单元。
您提供的执行时间是秒还是毫秒?你也能提供代码吗?问题是,如果在每个实验中,你有一个组,并且组大小改变,你得到了正确的结果吗?因为,在第一个线程中,您只运行一个线程,就是这样。如果不提供任何进一步的信息,该表就没有任何意义。如果是微秒,它也可能是启动开销。