我需要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