1.9.1 Amdahl 定律

1.9.1 Amdahl 定律

Gene Amdahl,计算领域的早期先锋之一,对提升系统某一部分性能所带来的效果做出了简单却有见地的观察。这个观察被称为 Amdahl 定律(Amdahl's law)。该定律的主要思想是,当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。若系统执行某应用程序需要时间为 Told。假设系统某部分所需执行时间与该时间的比例为 α,而该部分性能提升比例为 k。即该部分初始所需时间为 αTold,现在所需时间为(αTold)/k。因此,总的执行时间应为

Tnew = (1 - α)Told + (αTold)/k = Told[(1 - α) + α/k]

由此,可以计算加速比 S = Told/Tnew

S = 1/[(1 - α) + α/k] (1.1)

举个例子,考虑这样一种情况,系统的某个部分初始耗时比例为 60%(α = 0.6),其加速比例因子为 3(k = 3)。则我们可以获得的加速比为 1/[0.4 + 0.6/3] = 1.67 倍。虽然我们对系统的一个主要部分做出了重大改进,但是获得的系统加速比却明显小于这部分的加速比。这就是 Amdahl 定律的主要观点——要想显著加速整个系统,必须提升全系统中相当大的部分的速度。

旁注 表示相对性能

性能提升最好的表示方法就是用比例的形式 Told/Tnew,其中,Told 为原始系统所需时间,Tnew 为修改后的系统所需时间。如果有所改进,则比值应大于 1。我们用后缀“X”来表示比例,因此,“2.2X”读作“2.2 倍”。

表示相对变化更传统的方法是用百分比,这种方法适用于变化小的情况,但其定义是模糊的。应该等于 100 · (Told - Tnew)/Tnew,还是 100 · (Told - Tnew)/Told,还是其他的值?此外,它对较大的变化也没有太大意义。与简单地说性能提升 2.2X 相比,“性能提升了 120%”更难理解。

练习题 1.1 假设你是个卡车司机,要将土豆从爱达荷州的 Boise 运送到明尼苏达州的 Minneapolis,全程 2500 公里。在限速范围内,你估计平均速度为 100 公里/小时,整个行程需要 25 个小时。

A. 你听到新闻说蒙大拿州刚刚取消了限速,这使得行程中有 1500 公里卡车的速度可以为 150 公里/小时。那么这对整个行程的加速比是多少?

B. 你可以在 www.fasttrucks.com 网站上为自己的卡车买个新的涡轮增压器。网站现货供应各种型号,不过速度越快,价格越高。如果想要让整个行程的加速比为 1.67X,那么你必须以多快的速度通过蒙大拿州?

练习题 1.2 公司的市场部向你的客户承诺,下一个版本的软件性能将改进 2X。这项任务被分配给你。你已经确认只有 80% 的系统能够被改进,那么,这部分需要被改进多少(即 k 取何值)才能达到整体性能目标?

Amdahl 定律一个有趣的特殊情况是考虑 k 趋向于 ∞ 时的效果。这就意味着,我们可以取系统的某一部分将其加速到一个点,在这个点上,这部分花费的时间可以忽略不计。于是我们得到

S = 1/(1 - α) (1.2)

举个例子,如果 60% 的系统能够加速到不花时间的程度,我们获得的净加速比将仍只有 1/0.4 = 2.5X。

Amdahl 定律描述了改善任何过程的一般原则。除了可以用在加速计算机系统方面之外,它还可以用在公司试图降低刀片制造成本,或学生想要提高自己的绩点平均值等方面。也许它在计算机世界里是最有意义的,在这里我们常常把性能提升 2 倍或更高的比例因子。这么高的比例因子只有通过优化系统的大部分组件才能获得。