本地MPI並行程式除錯Visual?

此經驗將介紹如何在本地Visual Studio中配置環境,實現並行MPI程式的本地除錯執行。

工具/原料

MSMPISetup

msmpisdk

方法/步驟

下載安裝MSMPI安裝包MSMPISetup及開發者工具msmpisdk

下載地址:

如果按照預設路徑安裝這兩個軟體,那麼會在C盤下生成兩個不同的目錄,分別為:

c:\Program Files (x86)\Microsoft SDKs\MPI\

c:\Program Files\Microsoft MPI\

本地MPI並行程式除錯Visual Studio

開啟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;

}

本地MPI並行程式除錯Visual Studio

專案---屬性---新增C++包含目錄,以及庫目錄,注意!!!Debug模式和Release模式都需要分別新增,否則不能正確執行,下同

本地MPI並行程式除錯Visual Studio

本地MPI並行程式除錯Visual Studio

新增連結庫檔案,連結器---輸入---附加依賴項---msmpi.lib

本地MPI並行程式除錯Visual Studio

1. 除錯---要啟動的偵錯程式---MPI群集偵錯程式

2. 執行環境---localhost/4,說明選擇4個程序並行

3. 應用程式引數--- 1 3 5 7,此為程式命令列輸入引數,即argc = 5; argv = 程式路徑,1, 3, 5, 7,通過除錯可以驗證此結果

本地MPI並行程式除錯Visual Studio

在Debug模式下除錯程式,程式可正常執行,輸出5個螢幕,其中第一個為cmd,其他4個即為4個並行程序,從輸出來看,啟動了4個程序,並且讀入了相應的命令列引數,可以F10逐行進入程式除錯。

本地MPI並行程式除錯Visual Studio

注意事項

Debug和Release一定要分別新增包含目錄和庫目錄,以及設定相應引數,否則Release不能並行執行

大學, 環境, 程式, 程式除錯,
相關問題答案