# 4.1 引言
<!-- source: p0305 -->

对于第 1 章介绍的单指令多数据（SIMD）体系结构，一直存在一个问题：究竟有多广泛的应用具有显著的数据级并行性（DLP）？SIMD 分类提出近 60 年后（Flynn, 1966），答案已经不仅包括科学计算中面向矩阵的计算，还包括面向媒体的图像、声音处理，以及第 7 章将介绍的机器学习算法。请注意，这些都是线性代数的不同应用形式。多指令多数据（MIMD）体系结构每执行一次数据操作，都需要取一条指令；SIMD 的一条指令却可以启动许多数据操作，因此有望获得更高能效。这两点使 SIMD 对个人移动设备和服务器都很有吸引力。最后，SIMD 相对于 MIMD 最大的优点也许是：程序员仍可按顺序执行的方式思考，同时通过并行的数据操作获得加速。

本章介绍 SIMD 的三种形式：向量体系结构、多媒体 SIMD 指令集扩展，以及图形处理单元（GPU）。[^chapter-sources]

第一种形式比另外两种早了 30 多年，它把流水线执行扩展到大量数据操作。这种向量体系结构比其他 SIMD 形式更容易理解，也更容易成为编译的目标，但直到最近，人们还认为它对微处理器而言过于昂贵。其中一部分成本来自晶体管，另一部分则来自提供充足动态随机访问存储器（DRAM）带宽的成本；相比之下，传统微处理器普遍依赖缓存来满足存储性能需求。

第二种形式沿用了 SIMD 这个名称，基本含义是同时并行执行数据操作，如今大多数支持多媒体应用的指令集体系结构都具备这种能力。对于 x86 体系结构，SIMD 指令扩展始于 1996 年的 MMX（多媒体扩展），随后十年间又推出了多个 SSE（流式 SIMD 扩展）版本，并一直发展到今天的 AVX（高级向量扩展）和 AMX（高级矩阵扩展）。要让 x86 计算机达到最高计算速率，往往需要使用这些 SIMD 指令，浮点程序尤其如此。

第三种 SIMD 形式来自图形加速器领域，其潜在性能高于当今传统的多核计算机。GPU 与向量体系结构具有一些共同特征，同时也有自身的鲜明特点；这在一定程度上源于它们发展所在的生态环境。

<!-- source: p0306 -->

在这种环境中，除了 GPU 及其图形存储器之外，还有系统处理器与系统内存。为体现这些区别，GPU 领域将这种体系结构称为**异构**（heterogeneous）体系结构。除了图形，GPU 也在推动机器学习的发展。第 7 章将介绍 GPU 的这一用途。

对于具有大量数据并行性的问题，这三种 SIMD 形式都具有一个共同优势：与经典的 MIMD 并行编程相比，它们对程序员更友好。

本章旨在帮助体系结构设计者理解：为什么向量比多媒体 SIMD 更通用，以及向量与 GPU 体系结构有哪些相似和不同之处。向量体系结构是多媒体 SIMD 指令的超集，而且提供了更好的编译模型；GPU 与向量体系结构也有不少相似之处。因此，我们先介绍向量体系结构，为后面两节奠定基础。下一节概述向量体系结构，附录 G 则会更深入地讨论这一主题。

[^chapter-sources]: 原书注：本章以本书第 5 版中 Krste Asanovic 撰写的附录 F“Vector Processors”和附录 G“Hardware and Software for VLIW and EPIC”为基础，也采用了 *Computer Organization and Design* 第 5 版中 John Nickolls 与 David Kirk 撰写的附录 A“Graphics and Computing GPUs”的材料；还在较小程度上参考了 Joe Gebis 与 David Patterson 的“Embracing and Extending 20th-Century Instruction Set Architectures”（*IEEE Computer*，2007 年 4 月），以及 David Patterson 与 Andrew Waterman 的“SIMD Considered Harmful”（2017 年 9 月）。
