微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MPI_SendRecv 计时

如何解决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 举报,一经查实,本站将立刻删除。