CUDA如何安排其线程

CUDA如何安排其线程,cuda,Cuda,我有一些关于cuda日程安排系统的问题 例如,当我使用fooB时,它取决于您的设备。您可以使用cuda功能查看设备的规格。常见的最大数量是每个块y=1024个线程,每个网格维度x=65535个块 C.一种常见做法是具有2(128256512等)线程/块的幂。这样减少大型阵列非常有效(请参阅)。块和线程的最佳分布实际上取决于应用程序和硬件。我个人在TeslaM2050上使用512个线程/块进行大型稀疏线性代数计算,因为它对我的应用程序最有效。B。这取决于您的设备。您可以使用cuda功能查看设备的规

我有一些关于cuda日程安排系统的问题


例如,当我使用fooB时,它取决于您的设备。您可以使用cuda功能查看设备的规格。常见的最大数量是每个块y=1024个线程,每个网格维度x=65535个块


C.一种常见做法是具有2(128256512等)线程/块的幂。这样减少大型阵列非常有效(请参阅)。块和线程的最佳分布实际上取决于应用程序和硬件。我个人在TeslaM2050上使用512个线程/块进行大型稀疏线性代数计算,因为它对我的应用程序最有效。

B。这取决于您的设备。您可以使用cuda功能查看设备的规格。常见的最大数量是每个块y=1024个线程,每个网格维度x=65535个块


C.一种常见做法是具有2(128256512等)线程/块的幂。这样减少大型阵列非常有效(请参阅)。块和线程的最佳分布实际上取决于应用程序和硬件。我个人在TeslaM2050上使用512个线程/块进行大型稀疏线性代数计算,因为它对我的应用程序来说是最有效的。

a.计算工作分发器将把一个块从网格分发到SM。SM将以扭曲的形式转换块(所有NVIDIA GPU上的扭曲大小=32)。Fermi 2.0 GPU每个SM有两个共享一组数据路径的warp调度程序。每个周期,每个warp调度程序都会选择一个warp并向其中一个数据路径发出指令(请不要考虑CUDA内核)。在费米2.1 GPU上,每个warp调度程序都有独立的数据路径以及一组共享数据路径。在2.1的每个周期中,每个扭曲调度器将拾取一个扭曲,并尝试为每个扭曲双重发出指令

warp调度程序尝试优化数据路径的使用。这意味着一个warp可能会在背靠背周期中执行多条指令,或者warp调度器可以选择在每个周期从不同的warp发出指令

CUDA编程指南v.4.2表F-1中规定了每个SM可以处理的翘曲/螺纹数量。这将从768个线程扩展到2048个线程(24-64个扭曲)

B.每次启动的最大线程数由最大GridDims*每个块的最大线程数定义。参见表F-1或参考CUDAGetDeviceProperty的文档


C.参见与(B)相同的资源。线程/块的最佳分布由算法分区定义,并受占用率计算的影响。基于SM上翘曲的问题集大小和在指令障碍处阻塞的时间量(除其他外),存在可观察到的性能影响。对于初学者,我建议每个SM至少2个块,占用率约为50%。

A。计算工作分发服务器将从网格向SM分发一个块。SM将以扭曲的形式转换块(所有NVIDIA GPU上的扭曲大小=32)。Fermi 2.0 GPU每个SM有两个共享一组数据路径的warp调度程序。每个周期,每个warp调度程序都会选择一个warp并向其中一个数据路径发出指令(请不要考虑CUDA内核)。在费米2.1 GPU上,每个warp调度程序都有独立的数据路径以及一组共享数据路径。在2.1的每个周期中,每个扭曲调度器将拾取一个扭曲,并尝试为每个扭曲双重发出指令

warp调度程序尝试优化数据路径的使用。这意味着一个warp可能会在背靠背周期中执行多条指令,或者warp调度器可以选择在每个周期从不同的warp发出指令

CUDA编程指南v.4.2表F-1中规定了每个SM可以处理的翘曲/螺纹数量。这将从768个线程扩展到2048个线程(24-64个扭曲)

B.每次启动的最大线程数由最大GridDims*每个块的最大线程数定义。参见表F-1或参考CUDAGetDeviceProperty的文档

C.参见与(B)相同的资源。线程/块的最佳分布由算法分区定义,并受占用率计算的影响。基于SM上翘曲的问题集大小和在指令障碍处阻塞的时间量(除其他外),存在可观察到的性能影响。对于初学者,我建议每个SM至少2个街区,占用率约为50%