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();
...
}