MPI_SendRecv 计时

问题描述

当我通过更改不同的缓冲区大小来使用以下代码时,无论我设置的 MPI_SendRecv 有多大,Dim 的 API 调用总是得到相似的时间(大约 0.5 秒),

MPI 调用的计时方法有问题吗?
是不是 MPI API 调用的异步(调用后立即返回)?

#include <stdio.h>
#include <string.h>
#include <mpi.h>

int main(int argc,char *argv[])
{
    float *d_msg;

    if (argc < 3){
        printf("./exe ndevices Dim\n");
        exit(-1);
    }

    int myrank,tag=0;
    MPI_Status status;

    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
    if (myrank == 0)
        printf("\n\n===== MPI Start =====\n");
        
    const int num_GPUs = 2;
    const int Dim = 100;

    cudamalloc((void**)&d_msg,Dim*sizeof(float)); 

    double t1,t2; 
    t1 = MPI_Wtime(); 

    MPI_Sendrecv(d_msg,Dim,MPI_FLOAT,(myrank + 1)%num_GPUs,tag,d_msg,(myrank - 1 + num_GPUs)%num_GPUs,MPI_COMM_WORLD,&status);

    t2 = MPI_Wtime(); 
    printf( "Elapsed time is %f\n",t2 - t1 ); 

    MPI_Finalize();
    printf("--*-- MPI Rank: %d END--*--\n",myrank);


    return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)