【计算机体系结构 - 量化研究方法】读书笔记

从定性分析的定量分析的巨大进步


存储器层次结构

使用存储器层次结构的可能性可回溯到 20 世纪 40 年代后期到 50 年代早期通用数字计算机的最早时期。20 世纪 60 年代早期,在研究计算机中引入了虚拟存储器,70 年代引入了 IBM 大型机。缓存大约在同一时间出现。随着时间的推移,这些基本概念已经进行了扩展和延伸,以帮助缩小主存储器与处理器在访问时间方面的差距,但基本概念没有根本性变化。

有一个趋势可能会导致存储器层次结构设计的巨大改变,那就是 DRAM 密度和访问时间的持续变缓。尽管 DRAM 带宽有所提高,但访问时间的缩短速度要慢得多,部分原因是为了限制功耗,一直在降低电平。为了提高带宽,人们正在研究一种思路:在每一组存储器上重叠多个访问操作。这样就为增加分组数目提供了替代方案,同时还可以提供较高的带宽。传统的 DRAM 设计在每个单元中使用电容器,通常将它们放在一个深沟道中,这种设计在制造方面也有困难,从而减缓了 DRAM 密度的增长速度。

闪存不受 DRAM 发展的限制,由于在功率和密度方面的潜在优势,很可能会扮演更重要的角色。闪存相对于 DRAM 的潜在优势(不需要逐位)晶体管来控制写操作也正是其唯一致命弱点。闪存必须采用批擦除重写周期(其速度相当缓慢)。因此,比如 iPad 就将较小的 SDRAM 主存储器与闪存结合使用,既充当文件系统,也充当页存储系统,用于处理虚拟存储器。

尽管人们在预测计算技术的未来时一定要非常小心,但历史已经证明,缓存技术是一种强有力的、高度可扩展的思想,它有可能让我们继续建造更快速的计算机,确保存储器层次结构能够提供系统正常运转所需要的指令和数据。

指令级并行及其开发

在 2000 年初,人们对开发指令级并行的关注达到顶峰。到 2005 年,Intel 和所有其他主要处理器制造商都调整了自己的方法,将重点放在多核心上。往往通过线程级并行而不是指令级并行来实现更高的性能,高效运用处理器的责任从硬件转移到软件和程序员身上。从流水线和指令级并行的早期发展以来(大约是 25 年之前),这是处理器体系结构的最重大变化。

在同一时间,设计人员开始探索利用更多数据级并行来座位提高性能的另一方法。SIMD 扩展使桌面和服务器微处理器能够适当地提高图形功能及类似功能的性能。更重要的是,GPU 追求更积极地使用 SIMD,用大量数据级并行来实现应用程序的极大性能优势。对于科学应用程序,这些方法可以有效替代在多核心中开发的更具一般性但效率较低的线程级并行。

许多研究人员预测 ILP 的应用会大幅减少,预计未来会是双发射超标量和更多核心的天下。但是,略高的发射率以及使用推测动态调度来处理意外事件(比如一级缓存缺失)的优势,使适度 ILP 成为多核心设计的主要构造模块。SMT 的添加及其有效性(无论是在性能方面还是在能耗效率方面)都进一步巩固了适度发射、乱序、推测方法的地位。事实上,即使是在嵌入市场领域,最新的处理器(例如 ARM Cortex-A9)已经引入了动态调度、推测和更宽的发射速率。

未来处理器几乎不会尝试大幅提高发射宽度。因为从硅利用率和功率效率的角度来看,它的效率太低了。

向量、SIDM 和 GPU 体系结构

随着个人移动设备上各种应用的普及,数据级并行对个人一栋设备的重要性也在增加。如果有一种比任务级并行更简单的编程模型,而且可能具有更佳的性能效率,很容易就能预测到数据级并行在接下来十年中的复兴。事实上,我们已经看到一些产品对数据级并行的重视,GPU 和传统处理器都已经在增加 SIMD 扯到的数目,其增加速度至少与添加处理器的速度一样快。

因此,我们看到系统处理器正在拥有更多的 GPU 特性,反之亦然。传统处理器和 GPU 的一个最大性能差别是集中-分散寻址。传统的向量体系结构说明如何向 SIMD 指令添加此类寻址,我们希望随着时间的推移,越来越多的在向量体系结构中得到证明的好思想能够添加到 SIMD 扩展中。

GPU 问题并不是简单问一句哪种体系结构最好,而是当硬件投入能够出色地完成图形处理时,如何对其进行改进以支持更具一般性的计算任务?尽管向量体系结构名义上有许多优势,但向量体系结构能否像 GPU 一样成为出色的图形处理基础,还有待证明。

GPU SIMD 处理器和编译器仍然是相对简单的设计。为了提高 GPU 的利用率,特别是因为 GPU 计算应用程序刚刚开始进入开发阶段,所以随着时间的推移可能会引入更积极的技术。通过研究这些新程序,GPU 设计人员肯定会发现和实现新的机器优化方法。有这样一个问题:在向量处理器中用于节省硬件和能耗的标量处理器(或控制处理器),是否会出现在 GPU 中?

Fermi 体系结构已经引入了传统处理器中的许多功能,使 GPU 更具主流特性,但两者之间还是有一些需要弥补的差距。以下是我们希望在不远的将来能够解决的问题。

  • 可虚拟化 GPU。虚拟化对于服务器非常重要,它是云计算的基础。为了在云中包括 GPU,它们也应当像它们要连接的处理器和存储器一样是可虚拟化的。
  • GPU 存储器的容量较小。加快运算速度的意义就体现在解决更大规模的问题上,而大规模的问题通常需要更大的存储器。GPU 在速度与大小方面的这种不一致性可以通过增加存储器容量来解决。其挑战是要在提高容量的同时还能保持高带宽。
  • 直接对 GPU 存储器进行 I/O 操作。真实程序对存储器设备和帧缓冲区进行 I/O 操作,大型程序可能需要大量 I/O 操作和相当多的存储器。今天的 GPU 系统必须在 I/O 设备和系统存储器之间进行传送,然后在系统存储器和 GPU 存储器之间传送。这种额外的跳转会显著降低一些程序的 I/O 性能,降低 GPU 的吸引力。Amdahl 定律警告我们:如果在加快一项任务的处理速度时忽视其中一部分,可能会发生什么样的问题。我们希望未来的 GPU 将所有 I/O 都看作一等公民,就像它今天处理帧缓冲区 I/O 一样。
  • 统一的物理存储器。对于以上两个问题有一种替代解决方案:为系统和 GPU 采用同一个物理存储器。

线程级并行

30 多年来,研究人员和设计人员一直在预测单处理器会终结,会被多处理器超越。但直到本世纪的前几年,这一预测还总被证实是错误的。尝试寻找和利用更多 ILP 的成本在效率上是难以承受的(在硅面积和功率方面都是如此)。当然,多核并没有解决功率问题,因为它显然增加了晶体管数和晶体管开关的活动数目,而这正是功率消耗的两个主要因素。

多核技术将保持处理器繁忙的重担更多地交给了 TLP,而不再是依靠 ILP,TLP 由应用程序和程序员负责确认,而 ILP 则由硬件负责。

尽管多核技术为克服能耗效率方面的问题提供了一些直接帮助,并将大部分重担移交给软件系统,但仍然存在一些难度很大的挑战和尚未解决的问题。

除了编程语言和编译器技术的重要问题之外,多核技术已经重新开放了计算机体系结构中另一个长期存在的问题:是否值得考虑异构处理器?尽管现在还没有提交这种多核处理器,而且异构多处理器仅在专用计算机或嵌入式系统中取得了有限的成功,但它在多核心环境中的可能性要高得多。和多重处理中的许多问题一样,其答案可能依赖于软件模型和编程系统。如果编译器和操作系统可以有效地使用同构处理器,它们将会变得更加主流。目前,对于许多应用程序来说,现有编译器的能力还不足以有效地应对中等数量的同构核心所带来的压力,但有一类拥有异构核心的多处理器变得越来越常见,它们在功能方面有明显不同,而且有一些用于分解应用程序的明确方法。这些多处理器包括诸如 GPU 和媒体处理器之类的专用处理单元。对能耗效率的重视还能促使多处理器中包含一些具有不同性能功率比的核心。

1995 年极具争议的两个问题是:

  1. 基于微处理器的超大规模多处理器将会使用哪种体系结构?
  2. 多重处理器在未来的微处理器体系结构中扮演何种角色?

这些年来,这两个问题已经大体得到解决。

因为超大规模多处理器没有变成一个不断发展的主流市场,所以目前构建这种大规模多处理器的唯一具有成本效率的方法就是使用集群。

第二个问题的答案在最近六七年前已经变得非常清晰:多处理器未来性能的增长将源于多核处理器对线程级并行的开发,而不是通过开发更多的 ILP。

以仓库级计算机开发请求级、数据级并行

由于每个芯片上核心数目的增长,集群将会增长到包含数千个核心。云计算有许多附有吸引力的特性,其中之一就是从经济的角度来鼓励人们节省能源。对于给定的基础设施投入成本,很难说服云计算供应商关闭未使用设备而节省能量,不过,要说服云计算使用者放弃空闲实例是很轻松的,因为无论他们是不是在做有用的事情,都要为所使用的实例支付费用。榆次类似,按使用情况收费还回鼓励程序员高效地利用计算、通信和存储,如果没有一种容易理解的定价方案,是很难有大动力的。由于这种明确的定价方案使成本的测量现在变得很容易,而且测量结果也是可信的,所以研究人员就有可能从性价比的角度对创新激素进行评估,而不只是评估其性能。最后,云计算意味着研究人员可以在数千台计算机的规模上评估自己的想法,这在过去只有大型公司才能承受得起。

未来世界是令人兴奋的,而架构师在它的各个方面都将扮演至关重要的角色。

指令级基本原理

最早体系结构的指令集受到当时硬件技术的限制。只要硬件技术允许,计算机架构师就会探索支持高级语言的方式。因为这一探索,在三个不同时期内,人们关于如何高效支持程序有着截然不同的考虑。20 世纪 60 年代,栈体系结构变得非常流行。人们认为它们与高级语言非常匹配,根据当时的编译器技术,可能也确实如此。20 世纪 70 年代,架构师主要关注如何降低软件成本。其解决方案主要是用硬件代替软件,或者提供能够简化软件设计人员任务的高级体系结构。其结果就是高级语言计算机体系结构和诸如 VAX 之类的强大体系结构,这种体系结构有大量的寻址方式、多种数据类型和高度正交的体系结构。20 世纪 80 年代,一些更高级的编译器技术和对处理器性能的再度重视见证了简单体系结构的回归,其主要基础就是载入-存储型计算机。

20 世纪 90 年代,指令集体系结构发生了以下变化

  • 地址大小加倍(32 位到 64 位)
  • 通过条件执行优化条件分支
  • 通过预取优化缓存性能
  • 支持多媒体
  • 浮点运算速度更快

附录部分 流水线的基础与中级概念还是比较实用的

参考文献也值得一看

捧个钱场?