并发块如何运行单个GPU流式多处理器?

时间:2012-08-31 08:55:24

标签: cuda

我正在研究CUDA编程结构,以及我在学习之后的感受;在创建块和线程之后,将每个块分配给每个流式多处理器(例如,我使用GForce 560Ti,其具有14个流式多处理器,因此一次可以将14个块分配给所有流式多处理器)。但是,当我浏览几个在线资料时,例如:

http://moss.csc.ncsu.edu/~mueller/cluster/nvidia/GPU+CUDA.pdf

其中提到可以在一个多处理器上同时运行多个块。我基本上非常混淆线程和流多处理器上的块的执行。我知道块的分配和线程的执行绝对是任意的,但我想如何实际发生块和线程的映射,以便可以发生并发执行。

1 个答案:

答案 0 :(得分:4)

流式多处理器(SM)可以使用硬件多线程一次执行多个块,这个过程类似于Hypter-Threading

CUDA C Programming Guide在第4.2节中描述如下:

  

4.2硬件多线程

     

每个warp的执行上下文(程序计数器,寄存器等)   在整个过程中,由多处理器处理的片段保持在芯片上   经度的一生。因此,从一个执行上下文切换   到另一个没有成本,并在每个指令发布时间,一个扭曲   scheduler选择一个具有准备好执行下一个线程的线程的warp   指令(warp的活动线程)并发出   对那些线程的指示。

     

特别是,每个多处理器都有一组32位寄存器   在warp和并行数据缓存或共享之间进行分区   在线程块之间分区的内存。

     

可以驻留和处理的块和warp的数量   在给定内核的多处理器上一起依赖于   内核使用的寄存器和共享内存的数量   多处理器上可用的寄存器和共享内存量。   还有最大数量的常驻块和最大数量   每个多处理器的驻留warp数。这些限制也是如此   多处理器上可用的寄存器和共享内存量   是给定的设备的计算能力的函数   在附录F中。如果没有足够的寄存器或共享内存   每个多处理器可用于处理至少一个块,即内核   将无法启动。