H.1 引言:静态开发指令级并行性
本附录讨论如何利用编译技术,增加程序中可开发的并行性,以及支持这些技术的硬件。下一节定义什么样的循环可以并行,依赖如何妨碍循环并行,以及如何消除某些依赖。再下一节讨论通过代码调度提高并行性。这两节是相关技术的入门。
我们不打算详述面向 ILP 的编译技术,因为那需要数百页,而不是这里分配的约 20 页。这里提供的是一般背景,使读者能基本理解现代计算机用来开发 ILP 的编译技术。
硬件支持可以大大提高这些编译技术的效果,H.4、H.5 节将讨论这种支持。IA-64 集中了静态开发并行性的编译与硬件思想,支持研究人员在十余年基于编译器的指令级并行研究中提出的许多概念。H.6 节介绍 Intel IA-64 体系结构及其第二代实现 Itanium 2,并分析性能。
静态方法所用的核心思想——寻找并行性、减少控制与数据依赖、采用推测执行——与第 3 章动态方法的思想相同。主要区别在于,本附录的方法由编译器在编译时应用,而不是由硬件在运行时应用。编译时技术主要有两项优点:不在运行时引入相应处理开销;能考虑比运行时方法通常所能覆盖的更大程序范围。下一节的例子就说明,编译器可以判断整个循环能够并行执行,而硬件不一定能发现这类并行性。
静态方法的主要缺点是只能利用编译时信息。没有运行时信息,就往往必须保守地假定最坏情况。