GPU的硬件参数直接决定了例如深度学习等计算密集型任务的运行时间,本文列出一些重要的参数[因为目前机器学习模型训练依赖CUDA,所以这里以N卡为主,希望OpenCL成熟后A卡也能加入深度学习]。

0. GPU Workflow

分析性能之前,先简要介绍一下GPU的相关工作流程:

  1. 从系统总线进入GPU,将CPU送来的数据送到主板芯片组,然后传输到GPU进行处理。
  2. 从GPU芯片进入显存,将显卡芯片处理完的数据送到显存。
  3. 从显存进入数字模拟转换器,从显存读取出数据送到RAMDAC进行数据信号转换工作[俗称数字信号转模拟信号]
  4. 从RAMDAC进入显示器,将转换完的模拟信号数据送到显示屏

一般来说GPU性能由2和3两个中间环节决定。

1. CUDA Core

前文所述,CUDA Core是GPU最基本的数据处理单元或者说调度单元,GPU之所以支持规模并行计算,也就是因为大量的CUDA Core同时可以处理一些简单的运算。因此,CUDA Core的数量直接决定了一个GPU的计算能力。

多个CUDA Core加上其他的一些资源组成一个SM[Streaming Multiprocessor],是GPU最基本的资源分配单元。在GPU上CUDA Core和SM的关系,就类似CPU上,Thread和Process的关系[前者是基本的调度单位,后者是资源的基本管理单位]。

2. Base Clock

Base Clock有时候也叫Core Clock, Engine Clock, Graphics Clock, GPU Clock,这是一个描述都是以MHz为单位[即每秒产生一百万个脉冲信号]。其实对于GPU来说,与其说是base clock不如叫core clock更合适,因为它描述的就是cuda core的计算速度[其实这个参数是对应了CPU Clock的概念]。所以CUDA Core的数量说明了一个GPU总共有多少个,而Base Clock则说明了,每个core的计算能力如何。所以Base Clock越高越好。

3. Boost Clock

Boost Clock描述了Nvidia GPU Boost模式下的时钟频率,可以一定程度理解成一个GPU的计算能力上限

4. Memory Speed/Clock

和Base Clock类似,只不过Memory Clock描述的是GPU Memory的速度,单位也是MHz。

5. Memory Size

这个指标很重要,但是应该很好理解了,GPU内存越大越好,能存的东西多。进行大体量的深度学习计算或者玩3A游戏都会要求GPU内存够大。

6. Memory Interface Width

显存位宽,这个指标描述了GPU Memory对显示芯片的通道[流程3和4],决定显存在一个运算周期瞬间的吞吐量。位宽不足会引起高分辨率下画面不流畅,或帧数不稳定现象,原因是显卡芯片没有充足的数据来计算。基本上128Bit可以应付主流的高分辨率。

7. Memory Bandwidth (GB/sec)

GPU内存带宽,这个指标表述了Memeory的I/O性能,也就是显存与显卡芯片之间的的数据传输量。有时候Memory I/O也会成为瓶颈,比如GPU计算能力很好,可以快速计算出结果但是受限于显存带宽,导致计算好的结果不能快速的进行内存传输从而无法及时输出显示端[最直观的感受就是打游戏的时候卡]。

8. FLOPS

FLOPS = FLoating point Operations Per Second,也就是每秒多少次浮点数操作,可以更加直观的了解一个GPU的计算性能[通常这个数值都是理论峰值]。如果再细分的话,可以分为FP16,FP32,FP64,具体就是对应每秒可以执行多少次float 16位,32位,64位的操作。


部分内容来源https://www.zhihu.com/question/20133024/answer/14085709