XPU|听说过CPU、GPU 琳琅满目的XPU到底是什么?

在 AI 崛起的这几年来 , 大家经常会看到“TPU、IPU、NPU”之类的名字 , 这些“XPU”有什么分别?是真的有那么多不同的架构?还是厂商的概念营销?
【XPU|听说过CPU、GPU 琳琅满目的XPU到底是什么?】为了解答这个问题 , 外媒SemiEngineering搜集了大量业内人的看法并汇总成文 , 我们进行精简和编译 , 原文链接:https://semiengineering.com/what-is-an-xpu
XPU|听说过CPU、GPU 琳琅满目的XPU到底是什么?
文章图片
从 CPU 及其发展方式的角度来看 , 这些“XPU”中的大部分都不是真正的处理器 。机器学习加速器是一类处理器 , 但它们用来加速的处理部分却多种多样 。它们更像是 GPU , 是用于执行特殊工作负载的加速器 , 而且它们本身就有很多类型 。
处理器的本质可以归结为三件事 , 最后还是回到指令集架构 (ISA):首先定义要做的事 , 然后是 I/O 和内存(支持 ISA 和它试图完成的任务) 。而未来我们将看到比过去两、三年更多的创新和变化 。
许多新架构都不是单一处理器 , 它们是不同类型的处理器或可编程引擎的组合 , 它们存在于同一个 SoC 或同一个系统中 , 将软件任务分派到不同的硬件或可灵活变动的可编程引擎上 。所有这些处理器可能共享一个公共 API , 但执行域有所不同 。在这个层面 , 确实是有各种类型的不同架构 。
但现实情况是 , 大部分“XPU”的命名都是营销 , 而且这些命名和缩写 , 同时指代两种东西:一种是用于解释处理器的架构 , 例如 SIMD(单指令多数据) , 而另一种定义了它正在寻址的应用程序段 。所以它既可以用来定义处理器架构 , 也可以用作如“张量处理单元(TPU)”这样的品牌名 , 毕竟厂商们不是在为单个处理器命名 , 而是在为他们的架构命名 。
历史
在40 年前 , 命名的问题要简单很多 。首先是中央处理器(CPU) , 虽然它有很多演变版本 , 但它们基本上都是冯诺依曼架构 , 是图灵完备的处理器 。每个都有不同的指令集来提升处理效率 , 当年还针对复杂指令集 (CISC) 与精简指令集 (RISC) 优缺点 , 有过非常广泛的讨论 。
后来的 RISC-V 的出现给 ISA 带来了很多关注 。ISA 定义了处理器针对已定义任务的优化程度 , 人们可以查看 ISA 并开始计算周期 。例如 , 如果一个 ISA 具有本机指令并以 1GHz 运行 , 那我们就能将它与另一个 ISA 处理器进行比较 , 后者要完成相同的功能可能需要两条指令 , 但频率是 1.5GHz , 孰强孰弱就很明显了 。
CPU 有多种封装方式 , 有时将 I/O 或内存放在同一个封装中 , 而后两者被称为微控制器单元 (MCU) 。在调制解调器大行其道的时候 , 数字信号处理器(DSP) 出现了 , 它们的不同之处在于它们使用了哈佛架构 , 将指令总线与数据总线分开了 , 其中一些还用了 SIMD 架构来提升数据处理效率 。
指令和数据的分离是为了提高吞吐率(虽然它确实限制了自编程之类的边缘编程) 。通常 , 这里的边界条件不是计算 , 而是 I/O 或内存 。业内的重点已经从提升计算能力 , 转变成确保有足够的数据来让计算进行下去并保持性能 。
当单个处理器的性能无法再继续提升 , 那就把多个处理器连在一起 。通常它们还会使用共享内存 , 让每个处理器和整个处理器集群都保持图灵完备 。程序的任何部分在哪个核心上执行都无关紧要 , 反正结果是一样的 。
而下一个重大发展 , 是图形处理单元(GPU)的出现 。GPU打破了常规 , 因为每个处理单元或管线都有自己的内存 , 无法在处理单元外部寻址 。因为内存大小有限 , 只能执行那些能放入内存的任务 , 所以对任务本身有限制 。
对于某些类型任务 , GPU 是非常强大 , 但它们的管线非常长 , 导致了延迟和不确定性 。这些管线让 GPU 单元不断处理数据 , 但如果要刷新管线 , 效率就会大打折扣 。
GPU 和后来的通用 GPU (GPGPU) 定义了一种编程范式和软件栈 , 使它们比以前的加速器更容易上手 。多年来 , 某些工作一直是专业化的 , 有用于运行连续程序的 CPU , 有专注于图像显示 , 并将我们带入高度并行世界的图形处理器 , 后者使用很多小的处理单元来执行任务(包括现在的机器学习任务) 。


推荐阅读