0

我是新手..
我的代码有问题,我不知道如何在 MPI 中进行多项选择..
如果有 2 个函数进程,
1. 进程 A
2. 进程 B
3. 退出
“什么你想做什么?回答:“
如果我用 1 个设备 (mpiexec -n 1) 运行我的代码,就没有问题。
但是,如果有多个设备,则会出错。我想让所有“id”都做这个过程..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 {
        }
    }
}

谢谢..对不起,如果我的解释不好。

4

2 回答 2

1

如果您希望所有 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;
    }
}

它的工作原理是这样的:进程0从用户那里读取所需的答案,然后将答案从进程广播0到所有其他进程。然后每个进程(包括进程0)根据 的值进行分支answer。然后它再次循环,直到输入1或之外的其他内容2

于 2012-08-03T08:46:16.667 回答
0

我看到了一些问题,但我不能 100% 确定我是否正确理解了您。那时myid = 0您唯一的选择是按 3 ,否则它将永远不会退出循环。

所以不可能调用函数A或函数B

于 2012-08-03T03:21:43.327 回答