1个CUDA核可以处理每个时钟超过1个浮点指令(Maxwell)吗?

时间:2015-10-02 13:58:52

标签: cuda benchmarking gpgpu nvidia maxwell

List of Nvidia GPU - GeForce 900 Series - 有写道:

  

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无关( FLoating-point 每秒操作数)。

即。一个SMM包含:

  • 128 FP32-unit
  • 128 INT-unit
  • 32 SFU-unit
  • 32 LD / ST-unit

要获得 GFlops 的预告,我们应该只使用:128个FP32单位和32个SFU单位。

即。如果我们同时使用128个FP32单元和32个SFU单元,那么我们每个SM每个时钟可以获得160个带浮点运算的指令。

即。我们必须有多个 by 1,2 =(160/132)的instad of 2。

1664核心* 1050 MHz * 1,2 = 2 096 GFlops峰值

为什么在wiki中写入我们必须多个核心* MHz乘以2?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:6)

CUDA“核心”(也称为SP)通常是指SM(流式多处理器)中的单精度浮点单元。 CUDA内核可以在每个时钟周期启动一个单精度浮点指令。 (该单元是流水线的,因此它可以每个时钟启动一条指令,并且每个时钟可以退出一条指令,但它不能在给定的时钟周期内完全处理给定的指令。)

如果该指令是例如单精度加法或单精度乘法,则该核可以为每个时钟贡献一个浮点操作,因为加或乘计为一个浮点运算。另一方面,如果指令是FMA指令(浮点乘加),则核心将在同一时间段内执行浮点乘法 AND 浮点加法运算。这意味着有效的两个操作由一个指令执行。在计算峰值理论吞吐量时,FMA的这种使用会产生2乘数。

因此,核心只能处理(即启动,退出)每个时钟的单个指令,但如果该指令是FMA,则计为两个浮点运算。