Nvidia GPU 列表 - GeForce 900 系列- 上面写着:
4 单精度性能计算为着色器数量乘以基本内核时钟速度的2 倍。
例如,对于 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 使用基于象限的设计,具有四个 32 核处理块,每个处理块都有一个专用的 warp 调度程序,能够在每个时钟调度两条指令。
好的,nVidia Maxwell 是超标量架构,每个时钟调度两条指令,但是 1 个 CUDA 核心(FP32-ALU)每个时钟可以处理超过 1 条指令吗?
我们知道 1 个 CUDA-Core 包含两个单元:FP32-unit 和 INT-unit。但是 INT-unit 与 GFlops (每秒浮点操作数)无关。
即一个 SMM 包含:
- 128 FP32-单元
- 128 INT单元
- 32 SFU-单元
- 32 LD/ST-单元
为了在GFlops中获得性能,我们应该只使用:128 个 FP32 单元和 32 个 SFU 单元。
即,如果我们同时使用 128 个 FP32 单元和 32 个 SFU 单元,那么每 1 个 SM 每个时钟可以得到 160 条带有浮点运算的指令。
即我们必须乘以 1,2 =(160/132) 而不是 2。
1664 核 * 1050 MHz * 1,2 = 2 096 GFlops 峰值
为什么在 wiki 中写到我们必须将 Cores*MHz 乘以 2?