[英]How do I compare the runtime of two parts of MPI code?
我有一項分配,以2種方式對向量應用矩陣乘法。 第一個是列方式,第二個是行方式。 我在不同的cpp文件中實現了它們,現在我想將它們組合到同一文件中。 我試圖這樣做:
int main(int argc,char **argv)
{
int myId, Numofpoc,
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &Numofpoc);
MPI_Comm_rank(MPI_COMM_WORLD, &myId);
// here column wise code
MPI_Finalize();
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &Numofpoc);
MPI_Comm_rank(MPI_COMM_WORLD, &myId);
// here row wise code
MPI_Finalize();
//then here I compare the time of each way
}
但是,當我從命令行運行它時,按列打印輸出成功,但是按行打印使程序停止工作。 如果有人知道解決此問題的方法,或者我如何在MPI中建立兩個區域,您能幫我嗎?
MPI不允許您在單個應用程序中MPI_FINALIZE
調用MPI_INIT
或MPI_FINALIZE
。 這些調用只是通過設置內部數據結構,連接等為MPI庫提供了初始化自身的機會。多次調用函數只會導致事情變得奇怪,因為已經建立了數據結構/連接一旦。
您無需擔心應用程序的多個部分相互干擾。 只要您正確地匹配發送和接收,就沒有理由程序的某一部分的通信會與另一部分的通信混合在一起。 無論如何,您都應該這樣做,因為發送的代碼多於接收的代碼是無效的,反之亦然。
另外,您在問題正文中從未真正解決過的一件事就是標題中的問題:“如何對MPI代碼的兩部分進行計時”。 MPI提供了MPI_WTIME
函數,該函數為您提供了一種簡單,可移植的方式來獲取可用於對不同代碼塊進行計時的時間戳。 您可以這樣使用它:
int main(int argc,char **argv)
{
int myId, Numofpoc;
double start, stop, column_time, row_time;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &Numofpoc);
MPI_Comm_rank(MPI_COMM_WORLD, &myId);
start = MPI_Wtime();
// here column wise code
stop = MPI_Wtime();
column_time = stop - start;
start = MPI_Wtime();
// here row wise code
stop = MPI_Wtime();
row_time = stop - start;
//then here I compare the time of each way
MPI_Finalize();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.