我需要可以在函数/类成员函数中访问 MPI 世界通信器。但按照设计/惯例,MPI 环境和通信器总是在开始时定义和初始化。int main()
.
我能想到的唯一简单的解决方案是使用指向通信器的全局指针。
有人知道更好的方法吗?使用全局指针解决方案有危险吗?
这个问题同样适用于简单的 MPI 和 Boost::MPI(我在下面使用)
我建议的解决方案示例(未经测试):
//globals.h
extern boost::mpi::communicator * my_MPI_world_ptr;
and
//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();
...
}
你的意思是实际的MPIMPI_COMM_WORLD
通信器(或其 Boost 包装器)?这已经是全球性的了。如果您使用不同的通信器将通信与您正在编写的库分开,那么最好完全避免使用全局变量。在这种情况下,您可能只想传递它(或指向它的指针)并将其存储在需要它的类中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)