.NET 3.5-4.0 并行计算的支持

每当既往的处理器发展历史受到,硬件技术的发展,特别是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对审查:

C++ 1

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

.net 3.5下的运行结果:

C++ 2

.netC++ 4的运作结果:

C++ 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