不同的nvidia显卡,其规格不同,流处理器的数量不同,每个处理器的核心数也不同。
线程块根据设备的容量分配给单个处理器,例如 1 个 32 个扭曲块或 2 个 16 个扭曲块。
但是我无法理解每个流处理器中的内核数量。每个流处理器中具有更多内核的设备的意义是什么???
我想我们需要更好地利用设备属性进行更好的优化
实际上,关于流处理器和每个流处理器的核心,cuda 程序如何在设备中流动?/
每个流处理器中具有更多内核的设备的意义是什么???
每个 SM 的内核数量大致转换为在任何给定的时钟周期内可以处理的扭曲指令数量。单个 warp 指令可以在任何给定的时钟周期内处理,但需要 32 个内核才能完成(并且可能需要多个时钟周期才能完成,具体取决于指令)。具有 32 个“内核”的 cc2.0 fermi SM 平均每个时钟最多可以退出 1 条指令(实际上是每 2 个时钟 2 条指令)。具有 192 个内核的 Kepler SMX 每个时钟可以停用 4 个或更多指令。如需更准确的答案,请参阅编程指南的计算能力架构部分,并注意每个计算能力1.0 2.0 3.0都有一个部分。
实际上,关于流处理器和每个流处理器的核心,cuda 程序如何在设备中流动?/
这个问题在CUDA标签上已经回答了很多次了。网格中与内核启动相关联的每个线程块都分配给一个 SM(当 SM 有空闲插槽时)。然后,当这些资源变得可用时,SM 将线程块“解包”到扭曲中,并在 SM 内部资源(例如“核心”和特殊功能单元)上调度扭曲指令。