并行总括的支撑

在昔日的处理器发展历史中,硬件技术的提升,特别是CPU频率的无休止提高,总是给软件带来更强的特性提高。从386到586,从赛扬到奔腾,每趟CPU频率的升迁,都拉动软件性能的大幅升级,而软件无需做其他改变。假若有客户抱怨你的软件性能不好,我们无需着急,只需要进步到更高频率的CPU就足以了。当单核CPU的效用发展到3G从此,再往上更上一层楼就赶上了技术瓶颈,单主旨CPU的前行已经抵达一个极限,硬件厂商不得不转而向多核芯CPU发展,在一颗芯片中投入三个甚至三个运算核心,通过中央的增多,来增进芯片总的频率。当硬件通过增加运算核心来增强性能时,由于饱受其架构的震慑,软件并不可能充足地便民多少个运算核心所带动的特性提升,甚至有些时候性能还具备降低。在这种情形下,开发者不得不更改应用程序的架构和开发方法,以应对这种多核的趋势,使得自己的软件可以丰硕利于硬件升级所带来的特性提升。

作为晚辈开发平台,Visual Studio
2010加大了对相互运算的支撑。微软正在使得尽量大的限量内的开发者都能便捷而方便地拓展并行总括的开发,不管她动用的是非曲直托管代码还是.NET
Framework。从而将开发者从麻烦而复杂的多线程开发中解放出来,将更多的精力放到业务逻辑上。

  • Visual Studio IDE对并行总计开发的雅量帮忙。Visual Studio
    2010提供了一个“并行性能分析器”,它可以援助我们解析应用程序的性能瓶颈,找到需要并行处理和可以开展并行处理的地点,并以图形化的花样彰显出来。
  • 非托管的C++库和编译器对并行总结的支撑
  • .NET Framework 3.5/4.0
    对并行总计的大气支撑,包括PLINQ、并行语言语句等等

本文研讨的是.net 3.5/4.0对并行统计的性能差距,采纳的事例是Visual Studio
2010  Beta2 Training
Kit
的Demo代码.
在座谈以前先想起一下.NET 的相互组件:

鉴于并行总结是将一个做事职责展开表明以并发执行,由此,任何一个支撑并行总结的软件开发与运作平台都必须解决这一个出现执行的子任务之间的相互协作问题,比如:

  • 一个子任务急需拭目以待其余子任务的成功,多少个子任务完成之后才同意实施下一个子任务(即所谓fork-join),
  • 一个子任务完毕后活动启动六个下级子任务的举行
  • 同意一个职责中途撤废
  • ……

发展历史,.NET 3.5/4.0因此对已有的基类库举行扩充和增长,满足了上述要求。.NET 给
“System.Threading”
命名空间扩大了有些新的类,同时对有些已有类也开展了调整和优化。另外,针对中途撤消线程或作务执行这一实际上开支中那多少个广阔的需求,提供了一个合并废除模型。最大的浮动是.NET为基类库提供了多少个与并行总括密切相关的类,并将它们统一称为“并行扩大(Parallel
Extensions)”。

.NET
3.5通过DevLabs发布了Reactive扩展中蕴藏的类库为并行处理提供支撑。Reactive扩展对象是简化异步及事件驱动程序的构建,可参看InfoQ的著作微软公布Reactive框架,简化异步及事件驱动编程。下述.net
3.5的例证代码的运行要求下载Reactive扩展

先介绍一下自我的机器配置,单CPU双核:

发展历史 1

下边的例证来自Visual Studio 2010  Beta2 Training
Kit
的ParallelBabyNames:

.net 3.5下的运转结果:

发展历史 2

.net 4的周转结果:

发展历史 3

从上述例子的运作结果来看,.net 4的性能要比.net 3.5要强,.net 3.5和.net
4.0的并行处理能力扶助上着力持平。

Visual studio 2010 and parallel computing for developer resources

http://blogs.msdn.com/hale/archive/2010/03/18/visual-studio-2010-and-parallel-computing-for-developer-resources.aspx

发表评论

电子邮件地址不会被公开。 必填项已用*标注