Ale*_*lex 1 benchmarking cuda gpgpu nvidia maxwell
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包含:
要获得GFlops的性能,我们应该只使用:128个FP32单元和32个SFU单元.
即如果我们同时使用128个FP32单元和32个SFU单元,那么我们可以获得160个指令,每个SM每个时钟具有浮点运算.
也就是说,我们必须通过1,2 =(160/132)的instad为2.
1664核心*1050 MHz*1,2 = 2 096 GFlops峰值
为什么在wiki中写入我们必须多个核心*MHz乘2?
CUDA"核心"(也称为SP)通常是指SM(流式多处理器)中的单精度浮点单元.CUDA内核可以在每个时钟周期启动一个单精度浮点指令.(该单元是流水线的,因此它可以每个时钟启动一条指令,并且每个时钟可以退出一条指令,但它不能在给定的时钟周期内完全处理给定的指令.)
如果该指令是例如单精度加法或单精度乘法,则该核可以每个时钟贡献一个浮点运算,因为加或乘计数为一个浮点运算.另一方面,如果指令是FMA指令(浮点乘加),则核心将在同一时间段内执行浮点乘法和浮点加法运算.这意味着有效地通过单个指令执行两个操作.在计算峰值理论吞吐量时,FMA的这种使用产生2乘数.
因此,核心每个时钟只能处理(即启动,退出)单个指令,但如果该指令是FMA,则它计为两个浮点运算.