List of Nvidia GPU - GeForce 900 Series - 上面写着:
4 Single precision performance is calculated as 2 times the number of shaders multiplied by the base core clock speed.
IE。例如对于 GeForce GTX 970,我们可以计算性能:
1664 核 * 1050 MHz * 2 = 3 494 GFlops 峰值(3 494 400 MFlops)
我们可以在列中看到这个值 - 处理能力(峰值)GFLOPS - 单精度。
但是为什么我们必须乘以 2 ?
有写:http://devblogs.nvidia.com/parallelforall/maxwell-most-advanced-cuda-gpu-ever-made/
SMM uses a quadrant-based design with four 32-core processing blocks each with a dedicated warp scheduler capable of dispatching two instructions per clock.
好的,nVidia Maxwell 是超标量架构,每个时钟调度两条指令,但是 1 个 CUDA 核心(FP32-ALU)每个时钟可以处理超过 1 条指令吗?
我们知道 1 个 CUDA-Core 包含两个单元:FP32-unit 和 INT-unit。但是 INT 单位与 GFlops 无关( 浮点 每秒操作数)。
IE。一个 SMM 包含:
在 中获得演出GFlops 我们应该只使用:128 个 FP32 单元和 32 个 SFU 单元。
IE。如果我们同时使用 128 个 FP32 单元和 32 个 SFU 单元,那么每 1 个 SM 每个时钟可以得到 160 strip 有浮点运算的指令。
IE。我们必须多个 由 1,2 =(160/132) 等于 2。
1664 核 * 1050 MHz * 1,2 = 2 096 GFlops 峰值
为什么在 wiki 中写到我们必须将 Cores*MHz 乘以 2?
最佳答案
摘要:一个 FMA 算作 2 FLOP s 在 FP 吞吐量的标准核算中,即使在为单个执行单元在单个指令中执行此操作的机器上(这是它避免中间舍入的方式,fused part of FMA)。
CUDA“核心”(也称为 SP - 流式处理器)最常指的是 SM(流式多处理器)中的单精度浮点单元。一个 CUDA 内核可以在每个时钟周期启动一条单精度浮点指令。 (该单元是流水线的,因此它可以在每个时钟启动一条指令,并且可以在每个时钟退出一条指令,但它不能在给定的时钟周期内完全处理给定的指令。)
例如,如果该指令是单精度加法或单精度乘法,则该内核可以贡献一个浮点 操作每个时钟,因为加法或乘法算作一个浮点运算。另一方面,如果指令是 FMA 指令(浮点乘加),那么内核将在同一时间段内执行浮点乘法和浮点加法运算。这意味着实际上两个 运营 由单个 执行指令 .在计算峰值理论吞吐量时,这种 FMA 的使用会产生 2 乘数。
因此,一个内核每个时钟只能处理(即启动、退出)一条指令,但如果该指令是 FMA,则它算作两个浮点操作。
关于cuda - 1 个 CUDA 内核能否在每个时钟(麦克斯韦)处理超过 1 个浮点指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32908892/