所以我正在编写一个程序来在进程之间反弹“虚拟球”。根进程,即具有等级0的任务初始化游戏,然后将其发送到由rand() % size
确定的随机过程(由初始等级生成的随机数生成)。
我尝试过:
int rnk= rand() % size;
MPI_Send(&ball,1, MPI_INT, rnk, MPI_COMM_WORLD);
这会将球发送到下一个随机进程,但在运行时,阻塞的MPI_Send会阻止代码。我刚刚开始并行编程,所以我对此没有足够的把握。如何发送到随机过程,然后他们进一步将其发送到任何随机过程?
欢迎提供任何指示,提示,书籍和教程。
答案 0 :(得分:1)
如果root最初尝试发送给自己(这可能发生,因为rand()%size可能为零),这里存在一个问题。
您需要确保发件人永远不会发送给自己,或使用非阻塞发送(或非阻塞接收)来避免潜在的死锁。
答案 1 :(得分:0)
您可以MPI_Recv
使用MPI_ANY_SOURCE
作为来源(请参阅francis的评论)。
请确保首先在除根目录之外的所有进程中调用MPI_Recv
。