我对以下代码有问题:
#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;
}当然,互通器intercomm不在函数MPI_messenger的作用域中定义。我想知道是否以及如何在不将其作为参数传递的情况下将此互通器放入函数中。
发布于 2012-06-08 00:59:12
与处理任何其他变量的方式相同:将其声明为全局变量,或者在对main()和MPI_messenger()都可见的其他公共范围内声明它(例如,在与成员相同的类中)。
https://stackoverflow.com/questions/10935387
复制相似问题