内存与显存的区别与联系
CPU运算所需要的数据及产生的运算结果都会暂存在内存里。围绕在GPU外的是显存颗粒,显存和内存功能类似,GPU运行所需要的数据及产生的运算结果都会暂存在显存里。
最开始,显卡生产厂商直接使用内存的DDR标准来生产显存,但是随着GPU的发展,直接使用DDR的生产标准已经不能满足GPU的需求了,于是英伟达联合ATI提出了GDDR(Graphics)标准(为GPU定制的DDR内存)。
CPU拥有较少核心core,但是每个核心都很强大;GPU拥有数量较多的核心,但是每个核心都相对弱小,这就意味着GPU天生适合处理并行任务。
e.g.需要给一张图片进行提亮。
CPU的处理流程:
图片存在内存里,CPU从第一个像素开始,把第一个像素读到CPU里,随后对这个像素进行提亮运算,算完结束后把运算结果写回到内存里,以此为循环,直到所有像素点均被CPU处理且写回到内存里。以上CPU处理方式是最原始的处理方式,实际CPU会做各种优化,但大方向是如此。
GPU的处理流程:
图片存在显存里,在开始处理之前,GPU的控制器会给每个核心都分配好活儿,e.g.1号核心处理第一个像素,2号核心处理第二个像素……分配好活儿后,开始进行处理,所有核心都会在同一时刻去显存里读取自己要处理的那个像素,同时读回后同时处理完再同时写回到显存里去。以上CPU处理方式是最原始的处理方式,实际CPU会做各种优化,但大方向是如此。
CPU需要逐项处理数据,GPU是并行处理数据,根据GPU与CPU处理数据的区别,显存的带宽要求是远高于内存带宽的,这就是显卡生产厂商放弃DDR标准提出GDDR要求的原因。
带宽=传输速率*位宽
内存的位宽一般是64bit,有些主板支持双通道,可以组成128bit的位宽。4090的位宽是384bit,5090的位宽是512bit。
内存条上的频率并不是真正的时钟频率,而是2*时钟频率。
在GDDR5的生产标准中,显卡生产厂商将原始的时钟信号copy了3份出来,再对这4个时钟信号进行了1/4周期的偏移,随后在每个时钟的上升沿进行一次数据传输,这样一个时钟周期内便可进行4次数据传输。
随着传输频率的提高,现已有GDDR6标准,即一个时钟周期内便可进行8次数据传输。
还可提高每次数据传输的容量,由1bit增到到2bit,可传输4档电平00/01/10/11,即PAM-4技术。PAM-4技术被用到了GDDR6-X的标准上,因此GDDR6-X在GDDR6的基础上double一倍,由8倍速提升至16倍速,即在一个时钟周期内传输16次二进制数据。PAM-4应用在显存上是一次很激进的尝试,故障率高,因此在GDDR7上采用了更为保守的PAM-3技术,一次可传输3个电平-1/0/+1。
内存除了应用DDR双沿采样和每年缓慢提升频率外,几乎没有什么大的动作,不像显存缝宽提升带宽。
GPU适合处理每个并行任务之间无关联的情况,如果后级任务依赖前级任务的运算结果,只能用CPU依次执行任务,而单次任务所需要的数据其实是比较少的,因此CPU对内存带宽的要求并不高。若需要提升CPU运算的性能,只能让单次任务执行的速度加快,因此CPU一直需提高的是频率。
几年前CPU的频率就已经上了5GHz,反观GPU,4090满载2.55GHz,不到3GHz,5090可达到3.5GHz,但是与CPU仍有较大差距。注意,并不是说频率对GPU不重要,而是GPU提升频率带来的收益远不如堆规模堆核心带来的收益大。
如果CPU每次运算都需要到内存取数据,那么内存的延迟就非常重要了。延迟指的是CPU开始进行访问到实际数据被访问到的时间差,若延迟较大,这些延迟会在一次次的访问过程中积累起来,总耗时就会被拉到很长。内存的延迟一般在50-80ns左右,即使是这个水平,堆CPU来说仍然是比较慢的。因此最近几年CPU一直都在加L1、L2、L3缓存,目的是为了减少对内存的访问。
而延迟对GPU来说显得不那么重要,GPU是同时去显存里取数据,即使延迟较大,由于是同时进行的,所以体现到最后也不会明显拖慢总的处理速度。显存的延迟普遍在200ns以上。
整理来源:
https://www.bilibili.com/video/BV1SGXsYxESV?spm_id_from=333.788.videopod.sections&vd_source=ce699e10c2cd025a3e401be7205efc2d