求助warp在sp中的调度问题

关于warp在sp中的调度不是很明白,sp每次不是只能执行一条指令吗,但是又说一个warp中的32个线程是一起执行的,这种说法是指一个warp中的32个线程都执行一条相同的指令,只是每个线程使用的数据不同么,还是说其实sp是顺序执行了32条相同的指令呢,求大神们解答,谢谢了。

楼主您好,

一次一个SP的确只能根据一条指令,进行一次特定的操作,但一个warp中的32个线程完全可以被同时执行的(例如,用32个sp,或者用8个SP连续4次)。

这里的同时是指,当warp里所有的线程执行完这条指令前,不会有部分线程在执行下一条指令。

感谢您的来访。

以及稍微补充一下2#横扫斑竹。

sp每次确实只能执行一条指令,但是一个warp的线程的当前某个需要在sp上执行的指令,并非只使用一个sp,根据硬件版本不同,有使用32个sp执行的,也有用个sp执行4次的。

由此可以反推您第一句“关于warp在sp中的调度”多少有不确切之处,因为warp不是在一个sp里面执行的,所以不存在“关于warp在sp中的调度”,只存在“关于warp在SM中的调度”。

一个warp的32个线程一般是执行相同的指令,但是在有分支存在的时候会有其他处理。以及无论有没有分支,都不是一个sp串行执行32次来完成一个warp的线程的同一条指令的。

关于“warp是同时完成的”,2#已有完整解释,不再赘述。

祝您好运~

原来如此,也就是假如说某卡上有512个sp,一个时钟内就能并行执行512条指令,如果warp是按照32个来调度的话就是能同时调度16个warp这样理解没有错吧,谢谢两位版主的耐心解答。:lol

LZ您好:

1:“也就是假如说某卡上有512个sp,一个时钟内就能并行执行512条指令”关于这一点,按照线程的角度,粗略地讲是这样的。具体说即,如果每个线程的一条指令按照一条指令计算,时钟按照SP频率计算,有足够多数量的线程以及没有长延迟或低吞吐量操作影响,SP都保持繁忙,此时每个SP周期,每个SP可以灌入一条计算指令进入流水线(注意不是计算完毕)。也就是512SP可以接纳512条新的指令。

但同时,因为CUDA 是SIMT的,每个warp都执行相同的指令,所以这512条指令不是512条不同的指令,而是每32条都相同的指令。所以,有时也按照warp的角度去计算指令,每个warp执行一条指令(就是每个warp的32个线程执行相同的32条指令,每个线程一条。)

以及,同时可能还有发射到其他单元上的指令,比如发射到SFU上的计算指令和发射到LSU上的访存指令。

2:“如果warp是按照32个来调度的话就是能同时调度16个warp这样理解没有错吧”,warp size一直都是32 threads的。此外“调度”这个词是您提出的,我无法反猜您的具体含义再给出解释。

按照手册上的一般说法,一个SM上会有一个或者多个resident block,其中的线程按照warp为单位被scheduler将当前需要执行的一个或者两个指令(按warp算)发射到SM内的各执行单元上去执行。scheduler的最大发射能力要超出单纯SP的执行能力,但是最大发射能力需要在双发射的时候实现。
总之,这是一个和scheduler能力以及实际指令情况相关的动态变化的情况,要比您设想的复杂一些。

大致如此,祝您好运~

谢谢ice版主的详细解答,关于这个问题我认为我已经大致明白了,至于更复杂的细节和特殊情况等以后深入到那种程度以后再做深究吧。另外想顺便问下ice版主,您解答中提到的手册是哪个,现在我对CUDA的了解都是看风尘的编程指南和tesla的讲解视频得到的。NVIDIA提供的手册中我应该优先阅读哪些呢,望版主赐教。

LZ您好:

一般情况下提及的“手册”主要指CUDA Toolkit自带的pdf文档中的 CUDA C Programming Guide,CUDA Toolkit Reference Manual和Best Practice Guide这三本。

有时也泛指CUDA Toolkit自带的所有文档。

您可以优先查阅这些文档,以及学习下一些著名的CUDA 大学课程的视频等。当然还包括来论坛交流。

祝您好运~

谢谢版主!

不客气的,欢迎您常来论坛~