MPI中的对讲机

MPI中的对讲机,mpi,Mpi,我对以下代码有问题: #include "mpi.h" #include <stdio.h> #include <stdlib.h> #include <iostream> #define NUM_SPAWNS 2 // Based on the example from: http://mpi.deino.net/mpi_functions/MPI_Comm_spawn.html void MPI_messenger(int stuff, int dest

我对以下代码有问题:

#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

#define NUM_SPAWNS 2
// Based on the example from: http://mpi.deino.net/mpi_functions/MPI_Comm_spawn.html
void MPI_messenger(int stuff, int dest)
{
    MPI_Send(&stuff, 1, MPI_INT, dest, 1,intercomm);
}

int main( int argc, char *argv[] )
{
    int my_rank;
    int size;
    int np = NUM_SPAWNS;
    int errcodes[NUM_SPAWNS];
    MPI_Comm parentcomm, intercomm, testcomm;
    MPI_Init( &argc, &argv );
    MPI_Status stat;
    MPI_Comm_get_parent( &parentcomm );
    if (parentcomm == MPI_COMM_NULL)
    {
        MPI_Comm_spawn( "spawn_example4", MPI_ARGV_NULL, np, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &intercomm, errcodes );
        MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
        MPI_Comm_size(MPI_COMM_WORLD, &size);
        int lol = 10;
        MPI_messenger(lol,0);
        MPI_messenger(lol,1);
    }
    else
    {
        MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
        MPI_Comm_size(MPI_COMM_WORLD, &size);
        int lol;
        MPI_Recv(&lol, 1, MPI_INT,0,1,parentcomm, &stat);


        std::cout << lol << "\n";
    }
    fflush(stdout);
    MPI_Finalize();
    return 0;
}
#包括“mpi.h”
#包括
#包括
#包括
#定义NUM_繁殖2
//基于以下示例:http://mpi.deino.net/mpi_functions/MPI_Comm_spawn.html
无效MPI_messenger(int-stuff,int-dest)
{
MPI_发送(&stuff,1,MPI_INT,dest,1,内部通信);
}
int main(int argc,char*argv[])
{
int我的_等级;
整数大小;
int np=NUM_繁殖;
int errcode[NUM_SPAWNS];
MPI_通信父通信、内部通信、测试通信;
MPI_Init(&argc,&argv);
MPI_状态统计;
MPI_Comm_get_parent(&parentcomm);
if(parentcomm==MPI\u COMM\u NULL)
{
MPI_Comm_spawn(“spawn_example4”、MPI_ARGV_NULL、np、MPI_INFO_NULL、0、MPI_Comm_WORLD和内部通信、错误代码);
MPI通信等级(MPI通信世界和我的通信等级);
MPI_通信大小(MPI_通信世界和大小);
int-lol=10;
MPI_信使(lol,0);
MPI_信使(lol,1);
}
其他的
{
MPI通信等级(MPI通信世界和我的通信等级);
MPI_通信大小(MPI_通信世界和大小);
int-lol;
MPI_Recv(&lol,1,MPI_INT,0,1,parentcomm,&stat);

std::cout与任何其他变量的声明方式相同:全局声明它,或在
main()
MPI_messenger()
都可见的其他公共范围内声明它(例如,在与成员相同的类内).

谢谢您的回答,我很感激。为了将来的证明,您最好将其作为论据传递。较新的MPI标准很可能包含“MPI端点”允许多个MPI进程在单个操作系统进程内作为线程运行,而全局变量在多线程中不起作用的功能。谢谢,我想我会采用这种方法,这是我开始考虑的方法。我只是想知道MPI中是否有任何函数可以让您获得内部通信链接到组的对象,如MPI_Get_parent(),用于将通信器连接到父进程。如果有MPI_Get_childgroups()之类的对象,它将为您提供一个通信器数组及其大小,那就太好了。我不知道MPI 2.2中有任何功能允许您枚举现有的组和通信器句柄。