读书频道 > 网站 > 网页设计 > C#并行编程高级教程:精通.NET 4 Parallel Extension
1.4 考虑Gustafson法则
12-07-08    叶孤城
收藏    我要投稿   
本书旨在帮助有经验的C#开发人员能够利用.NET Framework 4中引入的Parallel Extensions,将现代微处理器中的多核处理能力转换为应用程序的性能。无论您是刚刚开始从老的多线程模型开始转换,还是已经有过一些...立即去当当网订购
John Gustafson注意到,Amdahl法则考虑了运行算法的硬件的变化,但是将算法看作是固定的。因此,在1988年,他提出重新审视这个法则。他认为在测量加速比的时候应该让问题的规模也随着处理器数目的变化而变化,而不是固定问题的大小。当硬件提供的并行处理能力得以提升时,要解决的工作负载也应该随之扩展。
 
Gustafson法则提供了以下公式,这个公式通过问题的大小来测量在固定时间内可以执行的工作量:
 
总工作量(单元数) = S + (N ×P)
 
其中:
 
●S表示一次顺序执行完成的工作单元数。
 
●P表示每一部分能够完全并行执行的工作单元数。
 
●N表示可用的执行单元数(处理器数或物理内核数)。
 
考虑一个问题,这个问题由50个单元的顺序执行的工作组成。这个问题还能够在每一个可用的内核上调度50个单元的并行工作量。如果有一个具有两个物理内核的微处理器,那么总工作量是150个单元。
 
总工作量(单元数) = 50 + (2 ×50) = 150 单元的工作量
 
图1-11展示了一个算法,这个算法带有50个单元的顺序执行的工作和一个并行化的部分。并行化部分可以根据物理内核的数目而扩展。通过这种方式,并行化部分可以处理50个单元可扩展可并行化的工作。可用内核越多,并行化部分的工作负载也越高。如果在并行化部分中有足够多的工作需要完成,那么这个算法就可以在更短时间内处理更多数据。同样的算法可以在具有8个物理内核的微处理器上运行。这种情况下,在前面示例中的同样时间内,这个算法能够处理450个单元的工作量。
 
总工作量(单元数) = 50 + (8 ×50) = 450 单元的工作量
 
 
 


图1-12展示了这个算法在物理内核数为1~16的情况下的加速比。在随着内核数增加时有足够多的工作能够并行化完成的前提下,这个加速比是可能实现的。从图中可以看出,这里的加速比要比采用Amdahl法则时的加速比的结果好。图1-13展示了这个算法在可用物理内核数为1~32的情况下所能完成的工作总量。

图1-14展示了一些由部分串行执行和并行化部分所组成的算法。并行化部分随着可用内核数的增加而增大。随着更多的可扩展的并行化部分运行更多的工作量,串行部分的影响也随之降低。在这种情况下,有必要计算串行部分和并行部分的总工作量,然后通过公式计算出8个物理内核的总工作量:

总串行工作量(单元数) = 25 + 150 + 100 + 150 = 425 单元的工作量 

总并行工作量(单元数) = 50 + 200 + 300 = 550 单元的工作量 

总工作量 = 425 + (8 × 550) = 4825 单元的工作量 

在相同时间内,顺序执行只能执行975单元的工作量:

一次串行执行的总工作量(单元数) =

25 + 50 + 150 + 200 + 100 + 300 + 150 = 975 单元的工作量





 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站