MPI_Sendrecv_replace函数过于耗时。

时间:2015-07-10 13:06:54

标签: c linux performance mpi

我在代码中多次调用了MPI_Sendrecv_replace。但是这个功能表现得非常奇怪。在第一个循环(5000次迭代)中,MPI_Sendrecv_replace总共花费大约30秒。但是,在第二个循环中,该函数仅使用1秒。我很好奇这个原因,因为我想优化代码。代码运行32个处理器。该机器是一个节点,带有4个Intel(R)Xeon(R)CPU E5-4620 v2。

我的部分代码在这里:

for (ishot=1;ishot<=nshots;ishot+=SHOTINC){
    ...
    for (nt=1;nt<=NT;nt++){
         ...
         MPI_Sendrecv_replace(&bufferlef_to_rig[1][1],NY*fdo3,MPI_FLOAT,INDEX[1],TAG1,INDEX[2],TAG1,MPI_COMM_WORLD,&status);
         ...
    }
    for (nt=1;nt<=NT;nt++){
        ...
        MPI_Sendrecv_replace(&bufferlef_to_rig[1][1],NY*fdo3,MPI_FLOAT,INDEX[1],TAG1,INDEX[2],TAG1,MPI_COMM_WORLD,&status);
         ...
    }
}

我使用MPI_Wtime来计算MPI_Sendrecv_replace计算的时间。

1 个答案:

答案 0 :(得分:0)

似乎问题是MPI_Sendrecv_replace的性能错误。当我用MPI_Sendrecv替换MPI_Sendrecv_replace时,程序运行正常并且耗时的问题消失。我在https://github.com/open-mpi/ompi/issues/93http://www.open-mpi.org/community/lists/users/2010/01/11683.php

中找到了错误报告