Computer Architectrure: Quantitative Approch 第三章第十三节

Fallacies and Pitfalls

我们的少数谬误集中在预测性能和能源效率以及从时钟频率或 CPI 等单一指标进行推断的难度上。 我们还表明,对于不同的基准测试,不同的架构方法可能具有完全不同的行为。

Fallacy——It is easy to predict the performance and energy efficiency of two different versions of the same instruction set architecture, if we hold the technology constant.

在这里插入图片描述

英特尔为低端上网本和 PMD 领域提供了称为 Atom 230 的处理器,它实现了 x86 架构的 64 位和 32 位版本。 Atom 是静态调度的 2 问题超标量,其微体系结构与 ARM A8(A53 的单核前身)非常相似。 有趣的是,Atom 230 和 Core i7 920 都采用相同的 45 nm Intel 技术制造。 Figure 3.42 总结了英特尔酷睿 i7 920、ARM CortexA8 和英特尔凌动 230。这些相似之处提供了一个难得的机会,可以直接比较相同指令集的两种截然不同的微架构,同时保持底层制造技术不变。 在进行比较之前,我们需要多说一下 Atom 230。

Atom 处理器使用将 x86 指令转换为类 RISC 指令的标准技术来实现 x86 架构(正如 1990 年代中期以来的每个 x86 实现所做的那样)。 Atom 使用了一个稍微强大的微操作,它允许一个算术操作与一个加载或一个存储配对;通过使用macrofusion,此功能被添加到了后来的i7中。这意味着平均而言,对于典型的指令组合,只有4%的指令需要一个以上的微操作。然后在 16 层深的流水线中执行微操作,每个时钟能够按顺序发出两条指令,就像在 ARM A8 中一样。有双整数ALU,FP加法和其他FP操作的独立流水线,以及两条内存操作流水线,支持比ARM A8更通用的双重执行,但仍然受到顺序发布能力的限制。 Atom 230 具有 32 KiB 指令缓存和 24 KiB 数据缓存,两者均由同一芯片上的共享 512 KiB L2 提供支持。 (Atom 230还支持具有两个线程的多线程,但是我们将仅考虑单线程比较。)

我们可能期望这两个以相同技术和相同指令集实现的处理器在相对性能和能耗方面表现出可预测的行为,这意味着功率和性能将接近线性扩展。 我们使用三组基准来检验这个假设。 第一组是来自 DaCapo 基准测试和 SPEC JVM98 基准测试的一组 Java 单线程基准测试(参见 Esmaeilzadeh 等人 (2011) 对基准测试和测量的讨论)。 第二组和第三组基准测试来自 SPEC CPU2006,分别由整数和 FP 基准测试组成。

在这里插入图片描述

正如我们在Figure 3.43 中看到的,i7 明显优于 Atom。 在 i7 上,所有基准测试至少快四倍,两个 SPECFP 基准测试快 10 倍以上,一个 SPECINT 基准测试运行速度快八倍! 由于这两款处理器的时钟频率比为 1.6,因此 i7 920 的大部分优势来自更低的 CPI:Java 基准测试的因子为 2.8,SPECINT 基准测试的因子为 3.1,以及因子为 4.3 SPECFP 基准。

但 i7 920 的平均功耗略低于 43 W,而 Atom 的平均功耗为 4.2 W,大约是功率的十分之一! 将性能和功率相结合,可以为 Atom 带来能源效率优势,通常提高 1.5 倍以上,通常提高 2 倍! 这种使用相同底层技术的两个处理器的比较清楚地表明,具有动态调度和推测的激进超标量的性能优势与能效方面的显着劣势有关。

Fallacy——Processors with lower CPIs will always be faster.

Fallacy——Processors with faster clock rates will always be faster.

关键在于决定性能的是CPI和时钟频率的乘积。 通过深度流水线处理器获得的高时钟频率必须保持低 CPI,才能充分利用更快的时钟。 类似地,具有高时钟速率但低 CPI 的简单处理器可能会更慢。

在这里插入图片描述

正如我们在前面的谬论中看到的那样,即使在具有相同 ISA 的情况下,针对不同环境设计的处理器之间的性能和能效也会存在显着差异。 事实上,即使在同一家公司为高端应用而设计的一系列处理器中,也会出现性能上的巨大差异。 Figure 3.44 显示了 Intel 的 x86 架构的两种不同实现以及同样由 Intel 提供的 Itanium 架构版本的整数和 FP 性能。

Pentium 4 是英特尔有史以来最积极的流水线处理器。 它使用了超过 20 个阶段的流水线,有七个功能单元,并缓存了微操作而不是 x86 指令。 考虑到积极的实施,其相对较差的性能清楚地表明,利用更多 ILP(很容易有 50 条指令在运行)的尝试失败了。 Pentium 的功耗与 i7 相似,但其晶体管数量较少,因为其一级缓存是 i7 的一半,并且仅包含 2 MiB 二级缓存,没有三级缓存。

Intel Itanium 是一种 VLIW 风格的架构,尽管与动态调度的超标量相比复杂性可能降低,但从未达到与主线 x86 处理器竞争的时钟速率(尽管它似乎实现了与 i7 相似的整体 CPI)。 在检查这些结果时,读者应该意识到它们使用了不同的实现技术,这使 i7 在晶体管速度和等效流水线处理器的时钟速率方面具有优势。 尽管如此,性能的巨大差异——奔腾和 i7 之间的三倍以上——令人惊讶。 下一个陷阱解释了这种优势的主要来源。

Pitfall Sometimes bigger and dumber is better

2000 年代初期的大部分注意力都集中在构建积极的处理器以利用 ILP,包括 Pentium 4 架构,它使用了微处理器中见过的最深的流水线,以及 Intel Itanium,它的每时钟峰值发出率是有史以来最高的 。 很快就清楚的是,利用 ILP 的主要限制往往是内存系统。 尽管推测性乱序管道在隐藏第一级未命中的 10 到 15 周期未命中惩罚中的很大一部分方面相当出色,但对于隐藏二级未命中的惩罚,它们几乎无能为力, 当进入主存时,可能是 50-100 个时钟周期。

结果是这些设计从未接近达到峰值指令吞吐量,尽管有大量晶体管和极其复杂和巧妙的技术。 第 3.15 节讨论了这一困境以及从更激进的 ILP 方案转向多核方案,但还有另一个变化体现了这一缺陷。 设计人员没有试图用 ILP 隐藏更多的内存延迟,而是简单地使用晶体管来构建更大的缓存。 Itanium 2和i7都使用三级缓存,相比奔腾4的二级缓存,三级缓存分别为9和8 MiB,而奔腾的二级缓存为2 MiB。 不用说,构建更大的缓存比设计 20+ 级 Pentium 4 流水线要容易得多,而且根据图 3.44 中的数据,这样做似乎更有效。

Pitfall And sometimes smarter is better than bigger and dumber.

过去十年更令人惊讶的结果之一是分支预测。 混合标记的预测变量的出现表明,更复杂的预测变量可以在位数相同的情况下胜过简单的gshare预测变量(请参见第171页的图3.8)。 这个结果如此令人惊讶的一个原因是带标签的预测器实际上存储的预测较少,因为它也消耗比特来存储标签,而 gshare 只有大量的预测。 尽管如此,通过不误用另一个分支上一个分支的预测所获得的优势似乎比将比特分配给标签与预测相比更合理。

Pitfall Believing that there are large amounts of ILP available, if only we had the right techniques.

尝试利用大量 ILP 失败的原因有很多,但最重要的一个(一些设计人员最初不接受)是即使有推测,也很难在传统结构的程序中找到大量 ILP。 David Wall 在 1993 年进行的一项著名研究(参见 Wall,1993)分析了各种理想条件下可用的 ILP 数量。 我们总结了 2017 年处理器配置的结果,其性能大约是最先进处理器的五到十倍。 Wall的研究广泛记录了各种不同的方法,并且对利用ILP的挑战感兴趣的读者应该阅读完整的研究报告。

我们考虑的激进处理器具有以下特点:

  1. 每个时钟最多 64 条指令发布和调度,没有问题限制,或者是 2016 年最宽处理器(IBM Power8)的总发布宽度的 8 倍,每个时钟允许的加载和存储数量高达 32 倍!正如我们所讨论的,大问题率存在严重的复杂性和功率问题。
  2. 一个有 1K 个条目的锦标赛预测器和一个 16 个条目的函数返回预测器。该预测器可与 2016 年的最佳预测器相媲美;预测器不是主要瓶颈。错误预测在一个周期内得到处理,但它们限制了推测的能力。
  3. 动态完成的内存引用的完美消歧——这是雄心勃勃的,但对于小窗口大小可能是可以实现的。
  4. 使用 64 个额外的整数和 64 个额外的 FP 寄存器重命名寄存器,这比 2011 年最激进的处理器要少一些。因为该研究假设所有指令的延迟只有一个周期(而在 i7 或Power8),重命名寄存器的有效数量大约是任何一个处理器的五倍。

在这里插入图片描述

图 3.45 显示了当我们改变窗口大小时此配置的结果。 这种配置比现有的实现更复杂和昂贵,尤其是在指令问题的数量方面。 尽管如此,它给出了未来实现可能产生的有用上限。 由于另一个原因,这些数字中的数据可能非常乐观。 64条指令之间没有问题限制:例如,它们可能都是内存引用。 在不久的将来,甚至没有人会考虑在处理器中使用这种功能。 此外,请记住,在解释这些结果时,没有考虑缓存未命中和非单位延迟,这两种影响都会产生重大影响.

Figure 3.45 中最令人吃惊的观察结果是,由于前面的实际处理器限制,整数程序的窗口大小的影响不如 FP 程序严重。 这个结果指出了这两种程序之间的关键区别。 两个 FP 程序中循环级并行的可用性意味着可以利用的 ILP 数量更高,但对于整数程序 其他因素——例如分支预测、寄存器重命名和较少的并行性——都是重要的限制。 这一观察非常重要,因为过去十年中的大部分市场增长——交易处理、Web 服务器等——都依赖于整数性能,而不是浮点数。

一些人并不相信 Wall 的研究,但 10 年后,现实已经沉没,适度的性能提升与大量硬件资源以及错误推测导致的重大能源问题的结合迫使方向发生了变化。 在结束语中,我们将再次讨论这一问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值