Мне нужно, чтобы мировой коммуникатор 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();
...
}