gpt4 book ai didi

c - MPI_Bcast 所有进程发送到所有其余进程

转载 作者:行者123 更新时间:2023-11-30 16:25:31 25 4
gpt4 key购买 nike

我试图让每个进程都以这种方式广播到所有其余进程

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

int main(argc,argv)
int argc;
char **argv;
{

int MyProc, size,tag=1;
int msg_recpt;
MPI_Status status;

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

printf("Process # %d started \n", MyProc);
MPI_Barrier(MPI_COMM_WORLD);


MPI_Bcast( &MyProc, 1, MPI_INT, MyProc, MPI_COMM_WORLD);
MPI_Recv(&msg_recpt, 1, MPI_CHAR, MyProc, tag, MPI_COMM_WORLD, &status);
printf("Proc #%d recv'd message from Proc #%d \n", MyProc, msg_recpt) ;


printf("Finishing proc %d\n", MyProc);

MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
}

我需要在MPI_Recv之后显示消息上的发送进程,但我认为它已被阻止,执行未到达printf("Finishing proc %d\n", MyProc) ;

最佳答案

MPI_Bcast() 是一个集体操作。通信器中的所有 MPI 任务必须使用匹配的签名(例如计数和数据类型)调用它,并且它们必须全部使用相同的root 任务。

您的代码可能会在 MPI_Bcast() 中阻塞(由于消息非常小,因此这种情况不太可能发生,但您不应认为这是理所当然的)。如果没有,它肯定会在 MPI_Recv() 中阻塞,因为没有匹配的发送操作。

集体操作和点对点操作在 MPI 中是独立的。

您要么需要一个MPI_Bcast()循环,要么如果您有足够的内存来接收所有级别的消息,您可以使用一次MPI_Alltoallv()

关于c - MPI_Bcast 所有进程发送到所有其余进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53360390/

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