首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MPI多选题

MPI多选题
EN

Stack Overflow用户
提问于 2012-08-03 11:15:12
回答 2查看 397关注 0票数 0

我是新手..

我的代码有问题,我不知道如何在MPI中做多项选择。

如果有两个函数进程,

  1. 进程A
  2. 进程B
  3. 退出

“你想做什么?回答:”

如果我在一个设备上运行我的代码(mpiexec -n 1),没有问题。

但是如果有多个设备,它就会出错。我想让所有的'id‘都做这个process..master和slave。

代码语言:javascript
运行
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-03 16:46:17

如果希望所有MPI进程都根据process 0中执行的对话框执行函数,则必须执行以下操作:

代码语言:javascript
运行
复制
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的值进行分支。然后,它再次循环,直到输入了12以外的内容。

票数 1
EN

Stack Overflow用户

发布于 2012-08-03 11:21:43

我发现了一些问题,但我不能百分之百确定我是否正确理解了您的意思。如果为myid = 0,那么您唯一的选择就是按3,否则它将永远不会退出循环。

因此不可能调用函数A或函数B

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11788751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档