介绍
这章节主要介绍GPU是什么,具有什么功能以及为什么选择GPU。
GPU是什么
GPU全称Graphics processing unit(图像处理单位)但是这系列主要介绍GPGPU就是general purpose GPU,就是做通用计算的GPU。(暂不涉及渲染的模型和理论)
具体特点
1.高可编程性。
cuda等进行编程。
2.商品级硬件。
价格不算过于昂贵。
3.数以百计的ALU(逻辑运算单元),数以万计的线程数。
意味着GPU可以并行处理非常多的线程,效率高。
效率与可编程性
上图是一个各个设计的效率和可编程性的一个比较图。从可编程性的角度来说单核的CPU是最好编程的,因为他只有一个核心,不需要考虑多核对数据的原子操作(atomic operation),多核次之。GPU比多核较难编程一点,不仅仅因为GPU的核数是多核的几百上千倍,而且GPU为解决多核同时调用数据时,内存带宽对效率的影响,设计与CPU非常不同。ASIC设计是数字IC中为了某一个目标专门定制的硬件电路。因为硬件定制的电路需要先RTL设计,然后形式仿真测试逻辑,再静态时序分析解决诸如毛刺,延迟电路和时钟偏移等问题,再制造,最后ATGP测试制造中有没有defects,所以这个流程是很复杂的。当然制造CPU,GPU也需要经历以上的过程,但是我们可以根据现成的CPU和GPU完成任务,而不需要每次根据特定目标进行设计及制造达到定制电路。
接下来聊一下各个数据之间效率的对比。
效率主要考虑的问题在于实现功能需要的时间和在芯片上占用的面积上多方面考虑。因为CPU需要处理一些比较总体的任务,所以有处理不同功能的模块。同时协调不同的功能也需要额外的时间(如果指令集过大,检索之类的时候也会花费更多的时间,可能更重要的因素一下子想不到。)因为CPU需要的功能多,所以在芯片上占用的面积会比GPU和ASIC多。GPU其实是针对特定任务进行加速的架构。(例如渲染,计算加速,机器学习的卷积等能高并行的任务。)ASIC是针对摸一个特定的运用场景的,所以他只会包含能实现这个场景最少的模块和功能。功能模块的减少能有效的减少crtical path导致时间减少。具体见下图。
(GPU NVIDIA官方图)
相比较CPU,GPU有非常多的ALU单元,较少的cache。因为GPU的cache hit是较为困难的,而且可以考多线程减少cache miss带来的负影响。同时GPU把大量的alu连起来成为一个wrap(NVIDIA)或者wavefront(AMD),用一个control单元进行控制,可以省去不少control单元的面积。
特点与总结
综上所述,GPU具有非常多的线程(threads),以及有一个控制一组线程的control单元。所以当需要很多线程处理同一类型的任务的时候,可以很好的发挥GPU的特点。