频道栏目
读书频道 > web开发 > .NET > C#并行编程高级教程:精通.NET 4 Parallel Extension
1.3 理解Amdahl法则
2012-07-08 21:46:03     我来说两句
收藏   我要投稿
本书旨在帮助有经验的C#开发人员能够利用.NET Framework 4中引入的Parallel Extensions,将现代微处理器中的多核处理能力转换为应用程序的性能。无论您是刚刚开始从老的多线程模型开始转换,还是已经有过一些...  立即去当当网订购
如果想要充分发挥多核的优势,在更短时间内运行更多的指令,那么就有必要将代码分解为并行的序列。然而,大部分算法都要求运行一些串行代码来协调并行的执行。例如,以并行方式启动很多块计算,然后收集它们的计算结果。用于分解并行任务和收集结果的代码可能是串行代码,因而不能利用并行化的优势。如果将很多这类算法组合起来,则整体的串行代码的比例会增加,而性能优势可能会下降。
 
著名计算机架构师Gene Amdahl对只有部分能够改进的计算机系统所能够获得的最大性能提升进行了观察。他通过这些观察定义了Amdahl法则,通过以下公式预测多处理器系统的最大理论性能提升(即加速比,speedup)。这个公式也可以应用于运行在多核微处理器上的并行算法。
 
最大加速比(倍数) = 1 / ((1 - P) + (P/N))
 
其中:
 
●P表示能够完全并行运行的代码比例。
 
●N表示可用的计算单元数(处理器或物理内核数)。
 
根据这个公式,如果一个算法中总任务的50%(P=0.50)可以并行执行,那么在具有两个物理内核的微处理器上的最大加速比为1.33x。图1-8展示了一个带有1000份任务的算法,其中500份串行任务,500份并行任务。如果串行版本需要耗费1000秒的时间完成,那么带有并行代码的新版本至少需要750秒才能完成。
 
最大加速比(倍数) = 1 / ((1 - 0.50) + (0.50 / 2)) = 1.33x
 




同一个算法在具有8个物理内核的微处理器上的最大加速比也就是1.77x。因此,增加了这么多物理内核之后代码也还需要至少562.5秒的时间完成。
 
最大加速比(倍数) = 1 / ((1 - 0.50) + (0.50 / 8)) = 1.77x
 
图1-9展示了这个算法在物理内核数为1~16的时候的加速比。从图中可以看出,加速比并不是线性变化的。随着内核数的增加,处理资源的浪费也越多。图1-10展示了同样的内容,只不过使用了新版本的算法,其中总任务的90%(P=0.90)都是并行执行的。事实上,90%的并行率是非常高的成就了,但在具有16个物理内核的微处理器上只获得了6.40x的加速比。
 
最大加速比(倍数) = 1 / ((1 - 0.90) + (0.90 / 16)) = 6.40x




Amdahl法则考虑的只是物理内核数目的变化,并未考虑可以在既有应用程序中添加新功能以充分利用增加的并行处理能力。例如,可以创建一个能够充分利用剩余内核的新算法,同时并行运行另一个超过3个内核就不能获得很大性能提升的算法。您可以创建出考虑了不同并行化场景的设计,通过这种方式降低Amdahl法则的影响。随着硬件提供越来越多的能力,应用程序也应该随之演进
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.2 理解硬件线程和软件线程
下一篇:1.4 考虑Gustafson法则
相关文章
图文推荐
排行
热门
最新书评
文章
下载
读书
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站