我需要MPI世界通信器可以在函数/类成员函数中访问。但通过设计/惯例,MPI环境和传播者总是在int main()
的开始处被定义和初始化。C++:MPI通信器作为全局变量
我能想到的唯一的,简单的解决方案使用全局指针传播者。
有人知道更好的方法吗?使用全局指针解决方案危险吗?
这个问题同样适用于裸机MPI,并提振:: MPI(其中下面我用),我所提出的解决方案的
例(未经测试):
//globals.h
extern boost::mpi::communicator * my_MPI_world_ptr;
和
//main.cpp
...
int main(int argc, char* argv[])
{
boost::mpi::environment my_boost_mpi_env(argc, argv);
boost::mpi::communicator my_MPI_world;
my_MPI_world_ptr = &my_MPI_world;
my_MPI_rank = my_MPI_world_ptr->rank();
size_MPI_WORLD = my_MPI_world_ptr->size();
my_class an_Object;
an_Object.member_function_that_uses__MPI_world();
...
}
我在谈论boost的包装器,它必须在'int main()'中定义。我想你是对的,'MPI_COMM_WORLD'已经是全球性的。 – cmo 2012-03-30 18:40:15