最近BOSS安排了一个任务,学习OpenGL,既然是学OpenGL,那总得知道OpenGL是做什么的,而在这之前,一切还得从GPU开始讲起。
什么是GPU ?
GPU,中文名:图形处理器(英语:graphics processing unit),又称显示核心、视觉处理器、显示芯片或绘图芯片。是一种专门运行绘图运算工作的微处理器。 在这之前,虽然有显卡(Graphics card),显卡拥有一种称为图像加速器的硬件,但却没有可编程单元。
在1999年8月, 著名的英伟达(NVIDIA)公司提出了发布GeForce 256(著名的GeForce 系列)时,首次提出了图形处理器这个概念,使3D加速器由原本只是简单的栅格器发展到另一个重要的阶段,并加入3D渲染流水线。
GeForce 256是第一个在市场上有这种能力的显卡。它使得每个像素可以经由独立的小程序处理,当中可以包含额外的图像纹理输入,而每个几何顶点同样可以在投影到屏幕上之前被独立的小程序处理。(OpenGL就是编写GPU小程序和渲染控制的一整套API)
图形处理器使显卡减少对CPU的依赖,并分担部分原本是由中央处理器所担当的工作,尤其是在进行三维绘图运算时,功效更加明显。这为各种炫酷逼真的游戏及软件提供了非常有利的硬件支持。
GPU和CPU的差异在什么地方?
从这个图中,大家可以看到,GPU的ALU数量(算术逻辑单元,绿色部分)要比CPU要多得多,但CPU中的ALU要相对大一些,同时GPU的Cache(缓存)和Control(控制器)相比CPU中的要少得多。这意味着什么?
首先,ALU是负责算术运算的(加减乘除),ALU越多,那它就可以同时进行大量的计算,因此,GPU在大规模并发运算这一块要远远优于CPU。
但这并不意味着CPU的算术运算能力就不行,而CPU的ALU虽然少,但可以进行更复杂的运算,并且运算速度也是快的飞起来(串行),并且拥有分支预测等能力,可以降低延时加快运算速度,这在GPU中是没有的。
由于GPU有非常多的Control和小Cache,因此也可以同时拥有非常多的线程(thread)进行同步计算不同的内容。
这里要注意的是缓存的目的不是保存后面需要访问的数据,而是为线程提高服务,这点和CPU非常不同。
引用知乎的一位同学的话:
GPU的工作大部分就是这样,计算量大,但没什么技术含量,而且要重复很多很多次。就像你有个工作需要算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已。而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?GPU就是这样,用很多简单的计算单元去完成大量的计算任务,纯粹的人海战术。这种策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。很多涉及到大量计算的问题基本都有这种特性,比如你说的破解密码,挖矿和很多图形学的计算。这些计算可以分解为多个相同的简单小任务,每个任务就可以分给一个小学生去做。但还有一些任务涉及到“流”的问题。比如你去相亲,双方看着顺眼才能继续发展。总不能你这边还没见面呢,那边找人把证都给领了。这种比较复杂的问题都是CPU来做的。
最后,分享一个非常有意思的视频(直观易懂):
https://v.youku.com/v_show/id_XNjY3MTY4NjAw.html
引用
维基百科:图形显示器(https://zh.wikipedia.org/wiki/%E5%9C%96%E5%BD%A2%E8%99%95%E7%90%86%E5%99%A8)
GPU与CPU?什么是GPU运算?(https://www.nvidia.cn/object/what-is-gpu-computing-cn.html)
CPU与GPU的设计区别(http://www.cnblogs.com/biglucky/p/4223565.html)