我是新手..
我的代码有问题,我不知道如何在MPI中做多项选择。
如果有两个函数进程,
“你想做什么?回答:”
如果我在一个设备上运行我的代码(mpiexec -n 1),没有问题。
但是如果有多个设备,它就会出错。我想让所有的'id‘都做这个process..master和slave。
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &n);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
MPI_Get_processor_name (namenode, &namelen);
int answer;
if(myid==0){
while(answer!=3){
cout<<"1.Process A"<<endl;
cout<<"2.Process B"<<endl;
cout<<"3.exit"<<endl;
cout<<"choose your answer: ";
cin>>answer;
if(answer==1){
function A;
}
else if(answer==2){
function B;
}
else {
}
}
}
如果我的解释不好,谢谢you..sorry。
发布于 2012-08-03 16:46:17
如果希望所有MPI进程都根据process 0
中执行的对话框执行函数,则必须执行以下操作:
int answer = -1;
while (answer != 3) {
if (myid == 0) {
cout << "1.Process A" << endl;
cout << "2.Process B" << endl;
cout << "3.exit" << endl;
cout << "choose your answer: ";
cin >> answer;
}
MPI_Bcast(&answer, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (answer == 1) {
function A;
}
else if (answer == 2) {
function B;
}
else {
break;
}
}
它的工作原理是这样的: process 0
从用户那里读取所需的答案,然后将答案从process 0
广播到所有其他进程。然后,每个进程(包括进程0
)根据answer
的值进行分支。然后,它再次循环,直到输入了1
或2
以外的内容。
发布于 2012-08-03 11:21:43
我发现了一些问题,但我不能百分之百确定我是否正确理解了您的意思。如果为myid = 0
,那么您唯一的选择就是按3,否则它将永远不会退出循环。
因此不可能调用函数A或函数B
https://stackoverflow.com/questions/11788751
复制相似问题