随着CPU核数或分布式服务节点的不断增加, 代码的并行运算效率也会随之增加, 阿姆达尔定律就是对并行效率进行量化的公式.
阿姆达尔公式:
代码语言:javascript复制S=1/(1-a a/n)
S: 加速比
a: 代码中并行计算的比例
n: 并行计算的节点数
举个例子,
早上起来你需要用0.5小时吃饭, 0.5小时做家务,
因为做家务是可以并行的, 所以a = 0.5;
如果只有你一个人做, n = 1
代码语言:javascript复制S = 1/(1-a a/n)
= 1/ (1-0.5 0.5/1)
= 1
一个人做的时候, 效率没啥提升, 这也是当然的.
如果你媳妇和你一起做家务呢?
n = 2
代码语言:javascript复制S = 1/(1-a a/n)
= 1/(1-0.5 0.5/2)
≈ 1.33
两个人一起做的时候, 效率会提升1.33倍.
当n 趋近于无限大时, 你的效率最多能提升两倍
趋势图:
为了能提高整体运行效率, 可以从以下3方面入手:
1.优化串行(非并行)部分代码, 减少运行时间;
2.提高整体代码中并行化比例;
3.提高运行节点数量或CPU核数;
这只是一个参考公式, 实际运行时, 还要考虑会受网络情况, 主机网卡, CPU缓存等方面的影响.