跳转到主要内容

4.1 引言

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

本章介绍 SIMD 的三种形式:向量体系结构、多媒体 SIMD 指令集扩展,以及图形处理单元(GPU)。1

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

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

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

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

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

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


  1. 原书注:本章以本书第 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 月)。 ↩︎