此經驗將介紹如何在本地Visual Studio中配置環境,實現並行MPI程式的本地除錯執行。
工具/原料
MSMPISetup
msmpisdk
方法/步驟
下載並安裝MSMPI安裝包MSMPISetup及開發者工具msmpisdk
下載地址:
如果按照預設路徑安裝這兩個軟體,那麼會在C盤下生成兩個不同的目錄,分別為:
c:\Program Files (x86)\Microsoft SDKs\MPI\
c:\Program Files\Microsoft MPI\
開啟Visual Studio,建立新的解決方案,新增自己寫的cpp原始檔
這裡提供一個帶命令列輸入引數的原始碼:
#include
#include "mpi.h"
using namespace std;
int main( int argc, char ** argv )
{
int myRank, nProcs, length;
char name[ MPI_MAX_PROCESSOR_NAME ];
double T0, T1;
MPI_Init( & argc, & argv );
T0 = MPI_Wtime();
MPI_Comm_size( MPI_COMM_WORLD, & nProcs );
MPI_Comm_rank( MPI_COMM_WORLD, & myRank );
MPI_Get_processor_name( name, & length );
cout << "argc = " << argc << endl;
for ( int i = 0; i < argc; ++ i )
{
cout << "argv" << i << "= " << argv[ i ] << endl;
}
cout << "my rank is " << myRank << endl;
cout << "processor name is " << name << endl;
cout << "number of procs is " << nProcs << endl;
T1 = MPI_Wtime();
double t0 = T1 - T0;
cout << "wall time is " << t0 << endl;
double totalTime;
//MPI_Reduce( &t0, &totalTime, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD );
MPI_Allreduce( &t0, &totalTime, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD );
cout << "total wall time is " << totalTime << endl;
MPI_Finalize();
int a = getchar();
return 0;
}
專案---屬性---新增C++包含目錄,以及庫目錄,注意!!!Debug模式和Release模式都需要分別新增,否則不能正確執行,下同
新增連結庫檔案,連結器---輸入---附加依賴項---msmpi.lib
1. 除錯---要啟動的偵錯程式---MPI群集偵錯程式
2. 執行環境---localhost/4,說明選擇4個程序並行
3. 應用程式引數--- 1 3 5 7,此為程式命令列輸入引數,即argc = 5; argv = 程式路徑,1, 3, 5, 7,通過除錯可以驗證此結果
在Debug模式下除錯程式,程式可正常執行,輸出5個螢幕,其中第一個為cmd,其他4個即為4個並行程序,從輸出來看,啟動了4個程序,並且讀入了相應的命令列引數,可以F10逐行進入程式除錯。
注意事項
Debug和Release一定要分別新增包含目錄和庫目錄,以及設定相應引數,否則Release不能並行執行