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

为什么CUDA占用率是根据支持的最大扭曲的活动扭曲数量定义的,cuda,Cuda,占用率定义为一个流多处理器上支持的活动扭曲数超过最大扭曲数。假设有4个块在一个SM上运行,每个块有320个线程,即10个扭曲,所以一个SM上有40个扭曲。占用率为40/48,假设一个SM上的最大扭曲为48(CC 2.x) 但我总共有320*4个线程在一个SM上运行,而在一个SM上只有48个CUDA内核。为什么入住率不是100%?我正在使用所有CUDA内核 我很确定我错过了什么 因为占用率与核心无关。CUDA是一种流水线SIMD风格的体系结构。您的48个核心是从管道(实际上是双重发布的)按扭曲指令

占用率定义为一个流多处理器上支持的活动扭曲数超过最大扭曲数。假设有4个块在一个SM上运行,每个块有320个线程,即10个扭曲,所以一个SM上有40个扭曲。占用率为40/48,假设一个SM上的最大扭曲为48(CC 2.x)

但我总共有320*4个线程在一个SM上运行,而在一个SM上只有48个CUDA内核。为什么入住率不是100%?我正在使用所有CUDA内核


我很确定我错过了什么

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

为了隐藏延迟并全速运行,meachine需要每个内核多个线程。这就是为什么有可能在一个SM上同时打开多个扭曲。占用率包括正在执行的扭曲加上准备执行的所有扭曲。顺便说一句,许多CC2.x短信都有32核,而不是48核。您可能需要仔细阅读硬件多线程体系结构。谢谢。我看了一下编程指南。因此,可以在磁芯上交错执行翘曲。单个经纱不能充分利用纤芯。这就是为什么我们用这种方式定义占用率。@szli:根据架构的不同,单个warp(或双发行架构中的两个)可以“充分利用”给定SM上的核心。但它不能在每个时钟周期都这样做。这就是为什么需要许多翘曲,为什么占用率与每个SM的翘曲数有关。