Visual Studio2010 Beta 1发布后,开发人员从其新特性,新功能中得到了不少的帮助。这里将介绍Visual Studio 2010并行编程方面的改进,较Visual Studio 2008有了极大的提高。
每当出现新的编程模型时,开发人员便需要一个用来学习、编写、调试以及优化代码的健壮的工具,以便能更好的利用该模型。由于并行计算在公式中添加了新的变量,对于工具的需求便更为突出。
Visual Studio 2010大幅度的提升了并行调试的用户体验。其中大部分的功能在Visual Studio 2008中也可通过插件获得。这里我将给大家介绍在Visual Studio 2008以及即将发布的Visual Studio2010并行编程、调试以及诊断等功能。
调试
虽然Visual Studio 2005有一个内建的MPI程序的简单调试器,但并未提供完整的“F5”体验。在新的Visual Studio 2008 插件(同时也将集成到Visual Studio 2010中)中,您只需选择一个集群头节点以及您需要多少核,然后按F5就可以对您的MPI程序进行调试了。
除了调试团队所作的很棒的核心工作以外,并行调试技术的领先供应商Allinea还将他们的环境导入到了Visual Studio中。Allinea的插件提供了针对集成的MPI程序的调试,包括基于排名的上下文切换、组单步调试、暂停及运行、并行栈视图和迭合。下面是Allinea的MPI调试环境:
面向服务的架构调试
Windows HPC Server 2008的一个重要的新的编程模型是集群系统面向服务体系架构 (Cluster SOA),它是基于WCF构建的,并包含由HPC的调度器和代理节点提供的高级调度和负载平衡功能。目前为止,对面向服务架构的集群系统的调试还仅仅限于基本的WCF/.Net方式的调试,并无集群的集成。在Visual Studio 2010中,一个集群面向服务架构插件将提供SOA设置标签,在这里您可以选择头节点、调试节点和服务、部署运行时类库并自动进行清理。现在来看一下Visual Studio 2010中新的SOA调试器吧:
剖析 (Profiling)
Windows Server HPC 1.0中没有集成针对MPI程序的剖析功能。在Windows HPC Server 2008中,XPerf等工具提供了MPI的剖析以及系统级别的剖析和故障排查的功能。但即使是XPerf也对MPI消息流量等细节所知甚少,目前为止也没有消息流量的浏览器。自那以后,消息流量浏览器Vampir被导入到Windows并完整地集成在事件跟踪日志(ETW)中。Vampir提供了对消息顺序和延迟进行故障排查的功能。还有更多的开源HPC工具,比如JumpShot是一个免费的基于Java的MPI消息浏览器。
在很多时候,VS内置的剖析器就能提供性能问题的分析。在Visual Studio 2010中,这一功能与HPC工作调度器进行了完整的集成,用来分析一个特定的MPI排名或节点的性能。Visual Studio MPI 剖析功能提供了行级别的剖析信息,包括与源代码视图并排的执行过程中的温度视图:
剖析器还显示多个运行或版本的结果比较报告,这样您就可以轻松地了解您的修改所带来的效果。
MPI 运行时分析
除了调试器和剖析器之外,有时您还需要专门的分析工具来帮助分析大规模并行程序的复杂度。位于斯图加特的HLRS/ZIH是德国的一个在该领域领先的机构,将他们自己的MPI分析工具Marmot导入到了Visual Studio 2008。Marmot可以用来检查MPI调用的输入参数的合法性、检测无法再生性、死锁和对资源的不正确管理。下面是运行中的Marmot:
从Printf到集成的剖析和调试
不久前我们还在printf风格的调试世界里,“艺术级”的调试和剖析工具将此往前推进了一大步。
在Visual Studio里,您可以调试和剖析高性能MPI程序以及拥有成百到上千个核的集群SOA应用程序。您可以使用XPerf和事件跟踪日志来获取应用程序在整个系统环境中的全局视图。Visual Studio 2010里新增的多核剖析和调试工具也可以有效地用于集群的节点级别分析。
Visual Studio正成为越来越丰富和有效的编写各种并行程序的开发环境。访问Windows HPC Server 开发人员资源中心您能找到更多关于Windows HPC的开发模型。在CodePlex的Parallel Dwarfs站点上您能找到许多使用各种Visual Studio 2010并行编程模型的示例。
【编辑推荐】