在visualstudio2010(vs)中启动mpi群集调试程序.doc
在此操作实例中,您将了解如何在本地计算机和MICROSOFTWINDOWSHPCSERVER2008群集上设置和启动MPI群集调试程序会话。此操作实例包括使用消息传递界面MPI和打开多进程OPENMP应用程序编程界面API创建应用程序所需的步骤和示例代码。本指南内容使用MPI群集调试程序的要求在VISUALSTUDIO2010中创建CMPI示例项目配置和启动MPI群集调试程序附录除应用程序二进制外,VISUALSTUDIO部署的文件和CRT(如果要求)使用MPI群集调试程序的要求您的开发计算机上必须安装了VISUALSTUDIO2010PROFESSIONALEDITION或更高版本(包括远程调试程序)。您必须在群集上拥有管理权限。VISUALSTUDIO必须能够访问要运行调试会话的计算节点。以下方案提供了所需的访问权限您在群集头节点或专用登录节点上开发应用程序。所使用群集的计算节点被连接到企业网络(拓扑2、4或5),并且您的开发计算机连接到了相同的域或是与群集域有信任关系的域。要从客户端计算机将应用程序提交到HPC群集,您必须安装了MICROSOFTHPCPACK2008。要使用MICROSOFT消息传递界面构建MPI程序,需要在开发计算机上安装WINDOWSHPCSERVER2008SDK。在VISUALSTUDIO2010中创建CMPI示例项目本部分的示例代码用于一个使用MONTECARLO模拟估算PI值的并行应用程序。示例代码在每个MPI进程上运行50,000,000次迭代计算。在每次迭代计算中,示例代码都生成间隔为0,1的随机数字以确定一组X和Y坐标。然后评估坐标组以确定点是否位于行X2Y21下。如果点位于该行下,则变量COUNT将加一。每个MPI的值COUNT的总和将成为变量RESULT。将位于行RESULT下的总点数乘以四,然后再用所乘的结果除以总迭代计算次数以估算PI值。以下步骤包含MONTECARLO模拟的两个实现。第一个示例使用的是MPI和OPENMP。有关OPENMP的详细信息,请参阅OPENMPINVISUALC。第二个示例使用的是MPI和并行格式库PPL。有关PPL的详细信息,请参阅PARALLELPATTERNSLIBRARYPLL。创建示例项目的步骤运行VISUALSTUDIO2010。创建一个名为PARALLELPI的新CWIN32控制台应用程序。使用一个无预编译头的项目。在“文件”菜单上,指向“新建”,然后单击“项目”。在“新建项目”对话框中,单击“已安装的模板”,然后选择“VISUALC”。(根据VISUALSTUDIO的设置方式,“VISUALC”可能位于“其他语言”节点下。)在模板列表中,单击“WIN32控制台应用程序”。关于项目名称,请键入PARALLELPI单击“确定”。此操作将打开“WIN32控制台应用程序”向导。单击“下一步”。在“应用程序设置”中的“其他选项”下,清除“预编译头”复选框。单击“结束”以关闭向导并创建项目。指定此项目的其他属性。在“解决方案资源管理器”中,右键单击PARALLELPI,然后单击“属性”。此操作将打开“属性页”对话框。展开“配置属性”,然后选择“VC目录”。在“包含目录”中,将指针指到文本框中显示的列表的开头,然后指定MSMPIC标头文件的位置,随后添加英文分号。例如C\PROGRAMFILES\MICROSOFTHPCPACK2008SDK\INCLUDE在“库目录”中,将指针指到文本框中显示的列表的开头,然后指定MICROSOFTHPCPACK2008SDK库文件的位置,随后添加英文分号。例如,如果您要构建和调试32位应用程序C\PROGRAMFILES\MICROSOFTHPCPACK2008SDK\LIB\I386如果您要构建和调试64位应用程序C\PROGRAMFILES\MICROSOFTHPCPACK2008SDK\LIB\AMD64在“链接器”下,选择“输入”。在“附加依赖关系”中,将指针指到文本框中显示的列表开头,然后键入MSMPILIB如果您使用的是OPENMP代码示例在“配置属性”中展开“C/C”,然后选择“语言”。在“打开MP支持”中,选择“是/OPENMP”以启用编译器对OPENMP的支持。单击“确定”关闭属性页。在主要源文件中,选择全部代码,然后将其删除。将以下示例代码之一粘贴到空的源文件中。第一个示例使用的是MPI和OPENMP,第二个示例使用的是MPI和并行格式库PPL。以下代码示例使用的是MPI和OPENMP。函数THROWDARTS使用OPENMP并行FOR循环,以利用多核硬件(如果可用)。//PARALLELPICPPDEFINESTHEENTRYPOINTFORTHEMPIAPPLICATION//INCLUDE“MPIH“INCLUDE“STDIOH“INCLUDE“STDLIBH“INCLUDE“LIMITSH“INCLUDE“OMPH“INCLUDEINTTHROWDARTSINTITERATIONS{STDTR1UNI_REALMYRANDOMSTDTR1MINSTD_RAND0MYENGINEDOUBLERANDMAXMYRANDOMMAXINTCOUNT0OMP_LOCK_TMYOMPLOCKOMP_INIT_LOCK//COMPUTEAPPROXIMATIONOFPIONEACHNODEPRAGMAOMPPARALLELFORFORINTI0I1{ITERATIONSATOIARGV1}PRINTF“CUTINGDITERATIONS\N“,ITERATIONSFSTDOUT}//BROADCASTTHENUMBEROFITERATIONSTOCUTEIFRANK0{FORINTI1IINCLUDEINCLUDEUSINGNAMESPACECONCURRENCYINTTHROWDARTSINTITERATIONS{COMBINABLECOUNTINTRESULT0PARALLEL_FOR0,ITERATIONS,DOUBLERANDMAXMYRANDOMMAXSTDTR1MINSTD_RAND0MYENGINEDOUBLEX,YMYENGINESEEDUNSIGNEDINTTIMENULLXMYRANDOMMYENGINE/RANDMAXYMYRANDOMMYENGINE/RANDMAXIFXXYY1{ITERATIONSATOIARGVARGC1}PRINTF“CUTINGDITERATIONSONDNODES\N“,ITERATIONS,SIZEFSTDOUT}//BROADCASTTHENUMBEROFITERATIONSTOCUTEMPI_BCASTCOUNTTHROWDARTSITERATIONS//GATHERANDSUMRESULTSMPI_REDUCEIFRANK0{PRINTF“THUEOFPIISAPPROXIMATEDTOBE16F“,4DOUBLERESULT/DOUBLEITERATIONSSIZE}MPI_BARRIERMPI_COMM_WORLDMPI_FINALIZE