为什么CUDA占用是根据支持的最大扭曲的活动扭曲数定义的

szl*_*zli 6 cuda

占用率定义为一个流多处理器上支持的最大扭曲数的活动扭曲数.让我们说我在一个SM上运行了4个块,每个块有320个线程,即10个warp,因此在一个SM上有40个warp.占用率为40/48,假设一个SM上的最大扭曲为48(CC 2.x).

但总的来说,我在一个SM上运行了320*4个线程,并且在一个SM上只有48个CUDA核心.为什么入住率不是100%?我正在使用所有CUDA核心......

我很确定我错过了一些东西......

tal*_*ies 10

因为占用与核心无关.CUDA是一种流水线SIMD风格的架构.您的48个内核是根据管道的每个扭曲指令(实际上是双重发布的)进行的.您需要大量的warp来保持指令管道满,否则所有内核都将停止运行.这就是为什么占用率是一个有用的度量标准,用于量化给定内核提供足够的并行工作以实现合理性能的能力.