簡體   English   中英

如何比較MPI代碼兩部分的運行時間?

[英]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_INITMPI_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM