关于CUDA线程和块如何映射到GPU硬件的文章很多,但是我找不到这个问题的明确答案。如果有的话,将warp划分到多个核心上的规则是什么?
我知道包含多个内核的多处理器每个都接收一个或几个线程块进行处理。这些块被划分为扭曲(每个扭曲32个线程),然后部署到不同的内核,但是扭曲被映射到内核的规则是什么?是每个核心始终扭曲一次,还是其他?核心进程可以多次扭曲吗?变形的分数?
最佳答案
CUDA核心是整数/浮点数学流水线,因此核心一词所隐含的划分是欺骗性的。每个SM具有1-4个warp调度程序。每个warp调度程序都有固定数量的调度单元。每个调度单元可以调度到特定的管道,包括CUDA核心(int / fp),双精度单元,负载存储单元,分支单元,特殊功能单元和纹理单元。管道可以具有不同的宽度,这可以由管道的吞吐量来确定。经纱中的所有线程均发布到同一管道。该指令可以在多个周期内发出。
GPU管道相当深。在特定管道的给定阶段,只能有一个扭曲。但是,多个扭曲可能在管道中处于活动状态。例如,warp 1可以处于ALU.execute,warp 2可以处于ALU.write_back阶段。
关于cuda - 扭曲如何在NVIDIA GPU中跨内核划分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24247318/