浅谈GPU和CPU
侵删
笔记:
- GPU,是Graphics Processing Unit的简写,是现代显卡中非常重要的一个部分,GPU是显卡上的一块芯片,就像CPU是主板上的一块芯片。集成显卡和独立显卡都是有GPU的。主要负责的任务是加速图形处理速度。同时,GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作。
- GPU是显示卡的“大脑”,它决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能。
- 今天,GPU已经不再局限于3D图形处理了,GPU通用计算技术发展已经引起业界不少的关注,事实也证明在浮点运算、并行计算等部分计算方面,GPU可以提供数十倍乃至于上百倍于CPU的性能,如此强悍的性能已经让CPU厂商老大英特尔为未来而紧张。
- NVIDIA公司在1999年8月31日发布GeForce 256图形处理芯片时首先提出GPU的概念。GPU之所以被称为图形处理器,最主要的原因是因为它可以进行几乎全部与计算机图形有关的数据运算,而这些在过去是CPU的专利。
- 人们希望将某些通用计算问题移植到GPU上来完成以提升效率,出现了所谓的GPGPU(General Purpose Graphic Process Unit),但是由于其开发难度较大,没有被广泛接受。
- 后来人们发现,GPU这么一个强大的器件只用于图形处理太浪费了,它应该用来做更多的工作,例如浮点运算。怎么做呢?直接把浮点运算交给GPU是做不到的,因为它只能用于图形处理(那个时候)。最容易想到的,是把浮点运算做一些处理,包装成图形渲染任务,然后交给GPU来做。这就是GPGPU(General Purpose GPU)的概念。不过这样做有一个缺点,就是你必须有一定的图形学知识,否则你不知道如何包装。
- 2006年NVIDIA推出了第一款基于Tesla架构的GPU(G80),GPU已经不仅仅局限于图形渲染,开始正式向通用计算领域迈进。
- 2007年6月,为了让不懂图形学知识的人也能体验到GPU运算的强大,Nvidia公司又提出了CUDA的概念,同时也推出了CUDA(ComputerUnified Device Architecture计算统一设备结构)。CUDA 的编程语言基于标准C,因此任何有C 语言基础的用户都很容易地开发CUDA 的应用程序。由于这些特性,CUDA在推出后迅速发展,被广泛应用于石油勘测、天文计算、流体力学模拟、分子动力学仿真、生物计算、图像处理、音视频编解码等领域。
- GPU实际上是一组图形函数的集合,而这些函数有硬件实现,只要用于3D游戏中物体移动时的坐标转换及光源处理。以前,这些工作都是有CPU配合特定软件进行的,GPU从某种意义上讲就是为了在图形处理过程中充当主角而出现的。
- 右图就是一个简单的GPU结构示意图,一块标准的GPU主要包括2D Engine、3D Engine、VideoProcessing Engine、FSAA Engine、显存管理单元等。其中,3D运算中起决定作用的是3DEngine,这是现代3D显卡的灵魂,也是区别GPU等级的重要标志。
- 随着CUDA的进一步开发和完善,GPU 的运算能力也将得到进一步的强化。研究人员也已经开始使用CUDA,利用GPU数倍于CPU的浮点运算能力,进行各种各样的科学模拟、运算。
- 曾经国内最快的超级计算机天河一号也采用了GPU处理器,其三分之二的计算能力由GPU处理器提供。
参考: What Is a GPU? Graphics Processing Units Defined
笔记:
- GPU vs. Graphics Card: What’s the Difference?
While the terms GPU and graphics card (or video card) are often used interchangeably, there is a subtle distinction between these terms. Much like a motherboard contains a CPU, a graphics card refers to an add-in board that incorporates the GPU. This board also includes the raft of components required to both allow the GPU to function and connect to the rest of the system.
- 其他看链接。
侵删
笔记:
- 在早期的电脑并没有GPU,图像也是由CPU进行输出。随着计算机的发展,对实时图像和视频的需求大增,从而将图形模块从CPU中单独拎出变成了显卡。可以说CPU包揽了电脑中计算的所有部分,而GPU本是CPU中的一部分,特化了其图形计算部分。所以可以看到,CPU与GPU设计的方向本来就是不同的。
- 为什么CPU和GPU大不相同?由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。
-
于是CPU和GPU就呈现出非常不同的架构(示意图):
图片来自nVidia CUDA文档。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。
- CPU:核心数较少(通常几个到十几个),通用性较强。GPU:核心远超CPU(现在英伟达的高端卡卡通常有几千个了,但是GPU的核根本不是我们理解的“核”,是宣传手段~)
-
2000多个核指的是sp(stream processor),只是ALU单元,不能算是核。GPU上真的可称上核得叫SM(stream multiprocessor),SM才有完整得流水线,指令发射器等等。SM有多少呢?完整的NV fermi和开普勒架构只有16SM,但是呢,因为工艺的问题,旗舰型号一般只有15个,阉了一个……喊2000多个只不过是宣传罢了。
- GPU的核其实不叫核,而是计算单元,很多的计算单元组合一个“小核”,然后若干个小核组成一个大核,而GPU就是由多个大核组成的,一个计算单元能开一个线程,FLOPs是CPU的几十倍,所以适合做大型的parallel和float computing。CPU的物理核和GPU的“核”不是一个东西,CPU的核是通用计算,不是专门为矩阵乘法设计的,控制流比GPU强太多。
- GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。
- CPU 力气大啥P事都能干,还要协调。GPU 是CPU那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟处理了,小弟兄弟多,有数百至数千个,而且是专门只干这行和只能干这行。
- 一个是通用计算,一个是专用计算。CPU主要负责操作系统和应用程序,GPU主要负责跟显示相关的数据处理,GPU的活CPU一般都可以干,但是效率低下,现在也有GPGPU,可以干点CPU的活。