GPU概念和历史,GPU VS CPU,前端中的硬件加速
GPU概念和历史
Graphics Processing Unit(GPU),即图形处理器, 是一种专门在个人电脑、工作站、游戏机和一些移动设备上运行绘图运算工作的微处理器。
GPU 相关概念在20世纪70年代末就已经被提出,使用单片集成电路(monolithic)作为图形芯片,当时就已经被用于视频、游戏、动画方面,可以很快的对几张图片进行合成(也就只有这个功能…);
到80年代末,基于数字信号处理芯片(digital signal processor chip)的GPU被研发出来,与前代相比速度更快、功能更强,但是价格很贵;
到1998年NVIDIA公司宣布modern GPU的研发成功,标志着GPU研发的历史性突破成为现实。modern GPU 使用晶体管(transistors)进行计算,在微芯片(microchip)中,GPU所使用的晶体管已经远远超过CPU。
之后就是一代一代的modern GPU被研制出来,且功能、速度不断增强。
GPU VS CPU
可能有人会问,我们已经有CPU用来解释计算机指令以及处理计算机软件中的数据了,为什么还要使用 GPU 呢? 要解释这个可以从CPU和GPU的结构说起。

图片来自NVIDIA CUDA文档。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。
从上图可以看到,GPU基于大的吞吐量设计的,采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache,在计算密集型的程序和易于并行的程序运行上有很大的优势;
CPU基于低延时的设计,有强大的ALU(算术运算单元),结构上不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。
GPU的缩写是 Central Processing Unit, GPU是Graphics Processing Unit,表面可以理解为一个是公交司机,另外一个是专车司机,但是其实GPU相比CPU工作技术含量要低,用于计算量大、相比 CPU 技术含量低、重复很多次的工作。有人把CPU比作老教师,将GPU比作小学生,教授处理复杂任务的能力是碾压小学生的,但是对于没那么复杂的任务,还是顶不住人多的(有一种黑的味道…
汇总起来就是这样:

前端中的硬件加速
关于前端中的硬件加速其实是创建一个Composited Layer来开启GPU硬件加速,通过GPU进行渲染,解放CPU,创建Composited Layer具体有如下方法:
- 3D或透视变换(perspective transform)CSS属性.
- 使用视频加速解码的<video>元素.
- 拥有 3D (WebGL) 上下文或加速的2D上下文的<canvas>元素
- 混合插件(如 Flash)
- 对自己的opacity做CSS动画或使用一个动画webkit变换的元素
- 拥有加速CSS过滤器的元素
- 元素有一个包含复合层的后代节点(换句话说,就是一个元素拥有一个子元素,该子元素在自己的层里)
- 元素有一个z-index较低且包含一个复合层的兄弟元素(换句话说就是该元素在复合层上面渲染)
在chrome中可以这样打开Composited Laye:
