从单处理器升级到n路关联多处理器应该提高了n倍的计算能力,实际是这样吗?
假设有5个朋友要粉刷一套有5个房间的屋子。如果所有房间大小都一样,那么可以指定每人负责一间,只要这5个人以同样的速度来粉刷,就能获得相当于由一个人完成整个粉刷工作5倍的加速比。如果每个房间的大小不一,问题就复杂多了。例如,若有一个房间是其他房间的2倍,那么这5个人同时工作就不可能获得5倍的加速比,因为整个任务的完成时间取决于粉刷时间最长的那个房间。
Amdahl定律是这样说的:对计算机系统的某个部分采用优化措施后所获得的计算机性能的提高,依赖于这部分的执行时间在整个执行时间中所占的比例。换句话说,工作的某部分优化(并行)获得性能提升是有限的,受限于必须被串行执行的部分。
工作的加速比S定义为由一个处理器来完成一项工作的时间与采用n个处理器并发完成该工作的时间之比,p是该工作中可以并行执行的部分。为简单起见,假设由一个处理器完成整个工作需用1个单位的时间,使用n个处理器并发执行工作中的并行部分需用时p/n,串行部分需用时为1-p。因此,并行化以后的工作时间为:
1 - p + p / n
按照加速比的定义得到
S = 1 / (1 - p + p / n)
回头再看粉刷屋子的例子,假定每个小房间是1个单位,唯一的大房间是2个单位。每个房间指定一个人(处理器)粉刷意味着6个单位中的5个可以并行粉刷,
即p = 5 / 6,1 - p = 1 / 6,S = 1 / ( 1 - p + p / n) = 1 / (1 / 6 + 1 / 6) = 3。由此可知,若有一间房间的大小是其他房间的2倍,那么5个人同时粉刷屋子的加速比仅仅是一个人粉刷的3倍。
如果由10个人分别粉刷10间房间,其中一间房间是其他房间的2倍,情况将变得更惨,S = 1 / (1 / 11 + 1 / 11) = 5.5,可以看出,仅仅微小的失衡就使10个人粉刷屋子只能获得5.5倍的加速比,几乎是预期值的一半。
假设有5个朋友要粉刷一套有5个房间的屋子。如果所有房间大小都一样,那么可以指定每人负责一间,只要这5个人以同样的速度来粉刷,就能获得相当于由一个人完成整个粉刷工作5倍的加速比。如果每个房间的大小不一,问题就复杂多了。例如,若有一个房间是其他房间的2倍,那么这5个人同时工作就不可能获得5倍的加速比,因为整个任务的完成时间取决于粉刷时间最长的那个房间。
Amdahl定律是这样说的:对计算机系统的某个部分采用优化措施后所获得的计算机性能的提高,依赖于这部分的执行时间在整个执行时间中所占的比例。换句话说,工作的某部分优化(并行)获得性能提升是有限的,受限于必须被串行执行的部分。
工作的加速比S定义为由一个处理器来完成一项工作的时间与采用n个处理器并发完成该工作的时间之比,p是该工作中可以并行执行的部分。为简单起见,假设由一个处理器完成整个工作需用1个单位的时间,使用n个处理器并发执行工作中的并行部分需用时p/n,串行部分需用时为1-p。因此,并行化以后的工作时间为:
1 - p + p / n
按照加速比的定义得到
S = 1 / (1 - p + p / n)
回头再看粉刷屋子的例子,假定每个小房间是1个单位,唯一的大房间是2个单位。每个房间指定一个人(处理器)粉刷意味着6个单位中的5个可以并行粉刷,
即p = 5 / 6,1 - p = 1 / 6,S = 1 / ( 1 - p + p / n) = 1 / (1 / 6 + 1 / 6) = 3。由此可知,若有一间房间的大小是其他房间的2倍,那么5个人同时粉刷屋子的加速比仅仅是一个人粉刷的3倍。
如果由10个人分别粉刷10间房间,其中一间房间是其他房间的2倍,情况将变得更惨,S = 1 / (1 / 11 + 1 / 11) = 5.5,可以看出,仅仅微小的失衡就使10个人粉刷屋子只能获得5.5倍的加速比,几乎是预期值的一半。