来源:炼数成金罗老师的课
GPU原理:
- GPU和CPU的区别是什么?什么时候考虑去使用GPU?
CPU结构图如下:
CPU内部原件比例图
Control: 控制器
ALU:计算单元
Cache: 缓存
DRAM:存储
每个控制器和每个存储单元组成一个小组件的话,可以跟随很多个计算单元。这是GPU不一样的地方。CPU是一个控制单元只能跟随少量的计算单元。
CPU的发展如下图:处理器越来越小,处理速度越来越快,处理核变多,但是到了2009年就停止上升了。
CPU的尺寸在越来越小。
CPU和GPU的设计理念是不一样的!
性能(低延时性Latency)与吞吐量(Throughput)
低延时性(Latency):在最少的时间内处理完最多的数据,或者说同等量的数据用最短的时间来完成。
吞吐量:一次性处理数据的总量。
所以CPU和GPU的设计理念上的根本区别在于,CPU在于最大化低延时性(Latency),而GPU的目的在于最大化吞吐量(Throughput)。
CPU为什么不能一直发展下去?
答:CPU的设计理念存在一个问题:第一,因为我们的CPU会变得越来越小,所以我们的存储空间Local Cache是不可以变的无限大的,这就代表我们每一次处理数据的量是有限的,因此这不是一个线性增长的能力。第二,虽然我们计算单元的计算能力很强,但是计算能力强会带来另外一个问题,就是散热的问题。
CPU:低延时性主导的设计理念。
CPU的每个计算单元都非常强大,可以在很少的时钟周期内完成算数计算,因此需要一个非常强大且复杂的控制单元。
由于CPU的设计导向是低延时性的导向,因此需要一个非常大的缓存,保存很多的数据在缓存里面。
GPU:以高吞吐量为导向的设计理念,GPU的设计理念可以让GPU只要是处理单元多,就能有多个计算单元。GPU不做复杂处理,而是把复杂的处理分成多个简单的处理,同时把大的数据拆分成为小的数据,这就是GPU的设计理念。只要计算单元更多,GPU就能超过CPU。
总结:
ALU,Cache: GPU的特点是有很多的ALU和很少的cache。缓存的目的不是保存后面需要访问的数据的,这点和CPU不同,而是为thread提高服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问dram(因为需要访问的数据在dram中而不是在cache里面),获取数据后cache会转发这个数据给对应的线程,这个时候数据转发的角色。但是由于需要访问dram,自然会带来延时的问题。
Control:控制单元(左边黄色区域块)可以把多个的访问合并成少的访问。
GPU的虽然有dram延时,却有非常多的ALU和非常多的thread。为了平衡内存延时的问题,我们可以中充分利用多的ALU的特性达到一个非常大的吞吐量效果,尽可能多的分配多的Threads。通常来看GPU ALU会有非常重的pipeline就是因为这样。
CPU擅长逻辑控制,串行的运行。和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。