gpt4 book ai didi

c - MPI 中的不同进程之间发送和接收

转载 作者:行者123 更新时间:2023-11-30 15:05:59 27 4
gpt4 key购买 nike

所以我正在编写一个程序来在进程之间弹跳“虚拟球”。根进程(即排名为 0 的任务)初始化游戏,然后将其发送到由 rand() % size 确定的随机进程(使用初始排名作为种子生成的随机数)。

我尝试过这样做:

int rnk= rand() % 大小;
MPI_Send(&ball,1, MPI_INT, rnk, MPI_COMM_WORLD);

这会将球发送到下一个随机进程,但在运行此代码时,代码会被阻塞的 MPI_Send 阻止。我刚刚开始并行编程,所以对此还没有足够的掌握。我如何发送到随机进程,然后他们进一步将其发送到任何随机进程?

欢迎任何指点、技巧、书籍和教程。

最佳答案

如果根最初尝试发送给自身,则会出现问题(由于 rand()%size 可能为零,因此可能会发生这种情况)。

  • 如果您首先将接收发送到根,那么它将阻塞,因为它永远不会到达发送调用(如上面@Gregor 所指出的);
  • 但是,如果您首先将发送发送到根,则无法保证它将永远进行到接收调用,因为 MPI_Send() 保证是异步的(即它可能是实现为同步发送,它将永远等待匹配的接收)。

您需要确保发送方永远不会向自身发送数据,或者使用非阻塞发送(或非阻塞接收)来避免潜在的死锁。

关于c - MPI 中的不同进程之间发送和接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459092/

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