什么是Amdahl定律? |
首先的一个问题就是,这个怎么读啊???对于我这蹩脚的英语来说真是一脸懵逼。赶紧百度下:阿姆达尔定律,是由Gene Amdal 在1967年提出。阿姆达尔定律定义了穿行系统并行化后加速比的计算公式和理论上限。
加速比 = 优化前的系统耗时/优化后的系统耗时
加速比越高说明你的优化越明显。在这个地方还有另外一个公式:
SpeedUp≤1F+1−FN
SpeedUp:加速比
F:系统内必须串行化的程序比重
N:CPU处理器数量
F的意思我解释下:比如说一个功能总共有6个步骤:
其中,白色的为必须串行的,绿色的为可以优化并行化的,那么其串行化比重:F=4/6=0.67
Amdahl定律的应用 |
举个例子吧,跟上边一样,每个步骤耗时100ms,其中只有步骤二和步骤四可以进行优化。
假设现在有两个处理器可以同时工作。那么优化后步骤二和步骤四的时间则变为50ms,整体的时间则由原来的600ms,降低到500ms
这种况下的加速比:600/500=1.2
但是其实这种优化也是有极限的,因为只有步骤二和步骤四可以优化,那么这两个步骤优化的极限就是无限接近0,整体的优化后的耗时无限接近400ms,也就是说在这种情况下的加速比的极限是 600/400 = 1.5
也可以根据上边的公式得出:
SpeedUp≤1F+1−FN
当N趋于无穷大的时候,加速比=1/F,这就是优化的极限。由此可见,为了提高系统的性能,只提高CPU的数量不一定能起到有效的作用。需要从根本上修改系统的串行行为。提高系统内可优化模块的比重,在此基础上,合理增加处理器的数量,才能以最小的投入,得到最大的加速比。
木桶原理 |
我觉得这一点也可以用“短板理论”来解释:
一只木桶盛水的多少,并不取决于桶壁上最高的那块木块,而是取决于桶壁上最短的那块。
决定系统性能的关键因素有那么几点:内存资源、CPU资源、磁盘I/O,那么系统的总体性能是取决于当前最慢的磁盘I/O速度,而不是内存和CPU。这种情况下,只有提高磁盘I/O速度才能对系统的整体性能进行优化。我觉得这一点跟阿姆达尔定律有相同之处。