Visual Studio 2010对并行计算的支持
软件是运行在硬件之上的。当硬件发展了,软件也要做相应的变化,才能跟上时代的步伐。面对多核时代的到来,软件世界的并行计算开始兴盛起来。如何更加充分地利用CPU的多个核心?如何发挥多核的威力,带来软件性能上的提升?如何改造现有的程序,让她更好地适应多核时代?如何简便地实现并行计算,使自己开发的应用程序充分地利用硬件升级所带来的性能提升?这些问题,无不困扰着我们这些多核时代的程序员们。
现在崭新的Visual Studio 2010为我们带来了完整的并行计算解决方案,让我们可以从容面对多核时代的到来。
天下不再有“免费的午餐”
在以往的计算机发展历史中,硬件技术的发展,特别是CPU频率的不断提高,总是给软件带来免费的性能提升。从386到586,从赛扬到奔腾,每次CPU频率的提升,都带来软件性能的大幅提升,而软件无需做任何变动。如果有客户抱怨你的软件性能不佳,我们无需着急,只需要坐等Intel或者AMD推出更高频率的CPU就可以了。程序员们把这形象地称为“免费的午餐”。
图1,多核时代
当单核CPU的频率发展到3G之后,再往上发展就遇到了技术瓶颈,单核心CPU的发展已经到达一个极限,硬件厂商不得不转而向多核芯CPU发展,在一颗芯片中加入两个甚至多个运算核心,通过核心的增加,来提高芯片总的频率。虽然在硬件厂商看来,这仿佛是一个创举,但是却给软件厂商带来了无尽的烦劳。程序员们发现,进入多核时代后,这种“免费的午餐”再也没有了。这其中最主要的原因就是当前的应用程序几乎都是针对一个运算核心而设计的,当硬件通过增加运算核心来提高性能时,由于受到其架构的影响,软件并不能充分地利于多个运算核心所带来的性能提升,甚至有的时候性能还有所下降。在这种情况下,开发者不得不改变应用程序的架构和开发方法,以应对这种多核的趋势,使得自己的软件可以充分利于硬件升级所带来的性能提升。开发者希望有一个工具能够帮助他们分析应用程序中的性能瓶颈,能够简便地将现有的业务逻辑并行化处理,从而更好地利用硬件,提升软件的性能。面对这样的需求,作为下一代开发平台,Visual Studio 2010加大了对并行运算的支持。微软正在使得尽量大的范围内的开发者都能高效而简便地进行并行计算的开发,不管他使用的是非托管代码还是.NET Framework。从而将开发者从繁琐而复杂的多线程开发中解放出来,将更多的精力放到业务逻辑上。在Visual Studio 2010中,我们将看到:
• Visual Studio IDE对并行计算开发的大量支持。比如,Visual Studio 2010的调试器知道代码的并行特性,并且能够在调试程序的不同执行单元的时候,表现应用程序的状态。
• 非托管的C++库和编译器对并行计算的支持
• .NET Framework 4.0对并行计算的大量支持,包括PLINQ、并行语言语句等等
另外,Visual Studio 2010还提供了一个“并行性能分析器”,它可以帮助我们分析应用程序的性能瓶颈,找到需要并行处理和可以进行并行处理的地方,并以图形化的形式表现出来。这样,“并行性能分析器”配合着Visual Studio 2010,我们就可以轻松地实现应用程序的并行化。
微软的面对并行计算的解决方案
面对多核时代的到来,最为全球最大的软件公司,微软当然不会坐着等天上掉馅饼。在上图中我们可以看到,微软为并行计算提供了完整的解决方案。
图2,微软对并行计算的支持
首先在开发工具上,在即将发布的Visual Studio 2010中,它提供了并行计算调试工具和性能分析工具,开发者可以利用这些工具轻松地完成应用程序的并行化工作。在库的层次上,针对非托管代码,微软提供了Parallel Pattern Library(PPL)和Agent Library,而对于托管代码,微软则在.NET Framework中提供了丰富的并行计算扩展,其中包括Parallel LINQ(PLINQ), #p#page_title#e#Task Parallel Library(TPL)和Coordination Data Structures,在运行时层次上,有使用非托管代码开发应用程序时可用的并发运行时(Concurrency Runtime),也有托管代码的任务调度器(Task Scheduler)。有了这些丰富的开发工具,函数库和运行时的支持,我们可以轻松地将合适的业务逻辑并行化,从而充分地利用多核心CPU的性能。
除了上文所提到的微软应对并行计算的解决方案,实际上,微软在并行计算开发的整个生命周期,都提供了相应的工具和Framework对其进行很好的支持,从设计和建模到应用程序的调试,从应用程序的性能优化到最后的性能验证。
图3,完整的生命周期支持
总之,借助Visual Studio 2010所泰来的微软并行计算解决方案,我们可以轻松实现软件的并行化,充分利用多核CPU所带来的性能提升,从而再次吃上“免费的午餐”。