我需要可以在函数/类成员函数中访问 MPI 世界通信器。但是按照设计/惯例,MPI 环境和通信器总是在int main()
.
我能想到的唯一简单的解决方案是使用指向通信器的全局指针。
有人知道更好的方法吗?使用全局指针解决方案是否危险?
这个问题同样适用于准系统 MPI 和 Boost::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();
...
}