我已经使用NVIDIA Profiler测试了一个内核,它输出以下内容:
我们已经启动了256个块和256个线程的内核。 据我所知,grafic显示三个部分,一个用于Warps,一个用于寄存器,一个用于共享存储器,每个部分都有一个计算的“块限制”,寄存器部分中的一个是最小且最有限的值。 显然内核是寄存器绑定的,我们只能在一个SM上同时启动4个块。这就是Profiler所说的。我完全问自己以下事情:
GTX 780 Ti,在一个SM中有192个核心,4块* 256线程= 1024线程怎么可以同时启动?在CUDA术语中,这“同时”意味着什么?这是否意味着,可以在调度程序中同时调度4个块,并且SM当时从一个块的warp以锁步方式执行指令。同时这个词有点混乱?
非常感谢
答案 0 :(得分:4)
GPU是一种延迟隐藏机器,延迟隐藏涉及在每个周期/发布时隙上调度各种执行单元上的各种线程(指令)。为了最好地隐藏延迟,GPU喜欢有更多可用线程来选择指令而不是SM上的执行单元。
因此,在一个给定的周期中,可能是warp调度程序只安排了192个(或更少)可能的执行单元,但是在下一个周期/发布槽中,可以调度更多的指令。为了促进这个过程,我们希望拥有尽可能多的线程/ warps / blocks"可用"尽可能安排。 "同步"这里指的是" open"的线程数/ warp /块数。在SM和"可以预定"。它并不是指在任何问题槽中发出多少实际指令,也不是指"内核的数量"或者"执行单位"在SM上。
可以打开的线程数/经线/块数"在任何给定时间在SM上(以便可用于调度目的)可能受到所讨论的线程块的资源使用的限制。例如,具有高寄存器使用的线程块可能限制可以“打开”的线程块的总数。在SM上,因为SM必须为每个" open"分配一个完整的寄存器集。 threadblock。
由于GTX 780 Ti使用GK110 GPU,GK110 white paper可能会引起关注。