阿姆达尔定律

023209f790529822cc1f309dd6ca7bcb0a46d455.jpg

P是指程序中可以并行的部分,S是核心数量。以下均假设一个程序有80%可以并行的情况:

 

核心数量是4,那么加速比是:

1 / (0.2 + 0.8 / 4) = 2.5。即程序在4核心下可以提速2.5倍。

核心数量是8,那么加速比是:

1 / (0.2 + 0.8 / 8) = 3.3。

核心数量是无限多,这个程序的加速比是:

1 / (0.2 + 0) = 5。

 

看到这里你应该明白了:任何多核程序的加速比都存在一个上限,即便是核心数量无限多,最后的性能也只取决于单线程的部分。

 

现在是有意思的一点,我们来比较两个平台:

A: 单线程性能是1, 有256个核心

B: 单线程性能是1.5,有16个核心

哪个平台性能强呢?看起来1 * 256远大于1.5*16。实际结果呢?

 

A: 1 / (0.2 + 0.8 / 256) = 4.92

B: 1 / (0.2 / 1.5 + 0.8 / (16 * 1.5)) = 6

惊讶吗?16核心的B平台的性能远高于256核心的A平台。