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

标签 c mpi

所以我正在编写一个程序来在进程之间弹跳“虚拟球”。根进程(即排名为 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/

相关文章:

java - 为什么使用MPJ Express的程序会出现异常?

c - 为什么该函数看不到 "NULL"字符

c++ - Windows 上的 strptime() 等价物?

c - MPI_Waitsome 失败

python - 使用 Cython 包装返回 MPI 通信器的 C++ 函数

mpi - 显示 MPI 类型映射

C++ - 无符号整数的模

c - STM32闪烁的LED错误寄存器?

c - 通过循环将数组传递给 "isalpha"

compiler-errors - 设置代码::Blocks to compile MPI programs with MPICC.exe