关于CUDA线程和块如何映射到GPU硬件的帖子很多,但我找不到这个问题的明确答案。如果有的话,warp在核心之间划分的规则是什么?
我知道包含一些内核的多处理器每个都会接收一个或多个要处理的线程块。这些块被划分为warp(每个32个线程),然后部署到不同的核心,但warp然后映射到核心的规则是什么?是每个核心总是一个经线,还是别的?一个核心可以处理几个经线吗?经线的分数?
答案 0 :(得分:4)
CUDA核心是整数/浮点数学流水线,因此术语核心所暗示的分区是欺骗性的。每个SM都有1-4个warp调度程序。每个warp调度程序都有固定数量的调度单元。每个调度单元可以调度到特定的管道,包括CUDA核心(int / fp),双精度单元,加载存储单元,分支单元,特殊功能单元和纹理单元。管道可以具有不同的宽度,这可以通过管道吞吐量来确定。 warp中的所有线程都发布到同一个管道。该指令可以在多个周期内发出。
GPU管道相当深。只有一个warp可以在特定管道的给定阶段;但是,多个warp可能在管道中处于活动状态。例如,warp 1可能在ALU.execute中,warp 2可能在ALU.write_back阶段。
答案 1 :(得分:1)
来自同一块的所有warp都在同一个SM上运行。