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