如何继续运行MPI程序? 我用MPI编写了一个C++程序来模拟交通信号灯。基本上,我需要进程0每隔两秒钟向所有其他进程(交通灯)发送一条消息,说明它们需要更改颜色。我目前的方法是(我没有实际的代码): if(进程秩==0) { while(true) { 睡眠(2000);//我们睡2秒钟 对于(i=1;i
您的高级进程在接收后退出。如果它们不应该退出,则接收也必须在循环中 此外,程序的其他逻辑也必须适合于此。您可能会使用一些函数来完成其他有用的工作。甚至主程序和其他程序的完整代码也可能在不同的函数中如何继续运行MPI程序? 我用MPI编写了一个C++程序来模拟交通信号灯。基本上,我需要进程0每隔两秒钟向所有其他进程(交通灯)发送一条消息,说明它们需要更改颜色。我目前的方法是(我没有实际的代码): if(进程秩==0) { while(true) { 睡眠(2000);//我们睡2秒钟 对于(i=1;i,c++,mpi,C++,Mpi,您的高级进程在接收后退出。如果它们不应该退出,则接收也必须在循环中 此外,程序的其他逻辑也必须适合于此。您可能会使用一些函数来完成其他有用的工作。甚至主程序和其他程序的完整代码也可能在不同的函数中 #include <stdio.h> #include "mpi.h" #include <unistd.h> int main(argc,argv) int argc; char *argv[];{ int color, rank, numtasks; M
#include <stdio.h>
#include "mpi.h"
#include <unistd.h>
int main(argc,argv)
int argc;
char *argv[];{
int color, rank, numtasks;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
if ( rank == 0)
{
color = 0;
while(1)
{
sleep(2); //we sleep for 2 seconds
for(int i=1; i<numtasks;i++)
{
color = (color + 1) % 3;
MPI_Send((void*)&color, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
}
}
}
else
{
while(1)
{
MPI_Recv((void*)&color, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
printf("rank %i color is %i\n",rank, color);
}
}
MPI_Finalize();
}
#包括
#包括“mpi.h”
#包括
int main(argc、argv)
int-argc;
char*argv[]{
int颜色、等级、numtask;
MPI_状态;
MPI_Init(&argc,&argv);
MPI通信等级(MPI通信世界和等级);
MPI通信大小(MPI通信世界和numtasks);
如果(秩==0)
{
颜色=0;
而(1)
{
睡眠(2);//我们睡2秒钟
对于(int i=1;我明白了。这是有道理的。顺便问一下,你有工作样本吗?这对我真的很有帮助。非常感谢!我稍后会尝试代码,我会给出反馈。我尝试了你的解决方案,但由于某些原因我无法理解,输出很少出现。我的意思是,它应该每2秒钟打印一次内容吗?是的,而且它工作正常n我的系统(OpenMPI Linux)。您是如何运行它的?在哪里运行它的?您是否准确地复制了我的代码?您的代码中有几个错误。此外,如果您使用Windows,请将sleep()
callback中的数字设置为2000并包含相应的标头。我不使用Windows(或至少不使用MPI)。
#include <stdio.h>
#include "mpi.h"
#include <unistd.h>
int main(argc,argv)
int argc;
char *argv[];{
int color, rank, numtasks;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
if ( rank == 0)
{
color = 0;
while(1)
{
sleep(2); //we sleep for 2 seconds
for(int i=1; i<numtasks;i++)
{
color = (color + 1) % 3;
MPI_Send((void*)&color, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
}
}
}
else
{
while(1)
{
MPI_Recv((void*)&color, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status);
printf("rank %i color is %i\n",rank, color);
}
}
MPI_Finalize();
}