前言
相信对于软件工程师来说, CPU并不陌生. 人工智能以及机器学习带火了GPU. 经常听到的就是, GPU计算比CPU快, 但具体是怎么快的却从未刨根问底. 之前在听到GPU的时候, 我有过这样的疑问:
- GPU是什么?
- 为什么比CPU快? 快在哪里? 如果各方面碾压那CPU不就淘汰了?
- 是否可以基于GPU实现操作系统?
这篇文章不涉及GPU的具体原理, 仅做大概描述, 将其与CPU区别说明白就好.
是什么
要了解GPU
是什么, 我们可以从它的来历入手.
计算机图形学和动画设计的出现后,产生了第一批计算密集型工作负载,例如,电子游戏动画需要应用程序处理数据以显示数千个像素,每个像素都有自己的颜色、亮度和移动方式. 当时 CPU 上的几何数学计算导致了性能问题.
于是硬件制造商开始认识到,将CPU的能力减弱可以减轻 CPU 的压力并提高性能. 于是, GPU出现了. 如今,与 CPU 相比,图形处理单元(GPU)工作负载处理一些计算密集型应用(比如机器学习和人工智能)时更高效。
从 GPU 的名字 图形处理单元也能够大致猜测出它的主要用途, 就是对图形与显示进行处理的.
为什么
CPU 和 GPU 的出发点不同, 要解决的问题也不同.
对于 CPU 来说, 要进行大量逻辑处理, 比如:
- 中断
- 分支跳转
- 指令集
- 不同的数据类型
- 任务流水线
- 分支预判
- mmu, TLB
- 等等
而对于 GPU 要处理的任务就简单的多, 数据类型单一且不需要中断. 对于 GPU 来说, 其实就是要计算出屏幕上一个个像素点的值.
通常来说, CPU 内部的计算单元为8个, 也就是通常说的8核. 大一些的话也就是32核. 而对于 GPU 来说, 计算单元轻轻松松上千, 这样在计算屏幕像素点的时候, 不同核并行计算提高渲染速度. 同时也是针对页面渲染, GPU 的所有计算单元同一时间接收同一个计算任务, 只是处理数据不同.
相比 CPU 来说, GPU 的指令集就简单的多, 且没有那么多逻辑操作. 简单来说, GPU 就是接收计算任务并行计算.
当然, 有个前提是不同计算任务之间没有依赖关系, 所以才能够并行计算嘛.
那么为什么CPU不能拥有上千计算单元呢?因为体积的原因, CPU内部拥有内部缓存、控制单元等等, 留给计算单元的空间就小的多了, 而GPU只有简单的控制单元, 剩余的空间都被大量的计算单元填充.
解惑
GPU 在最开始的设计上就是为了图形处理设计的. 但因为其适合大规模并行计算任务的特性, 慢慢的也被用于处理其他一些任务, 比如: 天气预报, 机器学习等等.
回到我们最开始的问题, 既然GPU这么快, 是否可以基于GPU实现操作系统? 答案呼之欲出, 不能. 因为GPU内部逻辑过于简单, 而操作系统又需要应对十分复杂的场景, 因此GPU只能作为一个配角来复制CPU执行.
CPU与GPU的最初设计目的就不同
OK, 本篇文章仅对 GPU 做简单介绍, 有个大致印象即可, 主要目的是满足好奇心, 也不需要具体的探究其实现原理.