gpt4 book ai didi

c - 我正在学习 MPI 编程,并对 MPI_Isend 和 MPI_Irecv 感到震惊

转载 作者:行者123 更新时间:2023-11-30 17:19:54 24 4
gpt4 key购买 nike

我想运行一个程序来了解 MPI_Isend 和 MPI_Irecv 的工作原理。等级 0 的 Isend 和 Irecv 工作正常,但等级 5 的 Irecv 采用默认值。有人可以向我解释一下吗?

#include<stdio.h>  
#include<mpi.h>
#include<stdlib.h>
#include<string.h>
int main(int argc , char *argv[])
{
int rank;
int size;
int i;
int index;
int ph_number[10] ={1,2,3,4,5,6,7,8,9};
int recv_numb[10];
MPI_Status status;
MPI_Request request;

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

if(rank ==0)
{

MPI_Isend(&ph_number,8,MPI_INT,0,10,MPI_COMM_WORLD, &request);
MPI_Isend(&ph_number,8,MPI_INT,5,11,MPI_COMM_WORLD, &request);
MPI_Irecv(&recv_numb,9,MPI_INT,0,10,MPI_COMM_WORLD, &request);

printf("recv number[7] = %d \n \n ", recv_numb[7]);
}

if(rank==5)
{

MPI_Irecv(&recv_numb,9,MPI_INT,0,11,MPI_COMM_WORLD,&request);
printf("recv number[5] = %d in rank %d\n \n ",recv_numb[5],rank);
}

MPI_Finalize();
}

最佳答案

MPI_Wait(&request, &status);

重点是,等级 > 1 正在非阻塞模式下接收,并且您会丢失数据。您必须检查MPI_Irecv的返回值,或者在接收后调用MPI_Wait(但这没有用,因为您可以简单地使用阻塞MPI_Recv)。

rank 0 Isend() --                    rank x Irecv()
\---- printf()
\-------------> //data are received now, but output is already printed

关于c - 我正在学习 MPI 编程,并对 MPI_Isend 和 MPI_Irecv 感到震惊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com