多次调用MPI_Init
我明白MPI_init这个函数在一个程序运行实例中只能调用一次。有人能解释一下这个语言的限制吗?比如:
- 我知道可以在mpiexec上运行多个Python程序。
- 有没有类似于fork()或者线程的东西,会导致什么情况符合这个条件?是不是说这些操作必须先发生,然后再调用mpiexec?
谢谢!
1 个回答
1
如果我理解得没错,最简单的方法就是拦截对 MPI_Init
的调用,并只执行一次。对于C语言,MPI提供了PMPI性能分析接口,这个接口允许你重写任何MPI的符号,并提供一个额外的PMPI符号。比如,你可以定义一个函数 MPI_Init
,在这个函数里,根据它是否是第一次被调用,去调用 PMPI_Init
。对于 MPI_Finalize
也是同样的道理,只不过是反过来。
至于在Python中怎么优雅地做到这一点,我不太确定。我猜你可以直接修改Python的绑定,或者用 LD_PRELOAD
加载一个简单的C库来实现这个“魔法”。
不过,这些都只是变通的方法,可能会带来一些不好的副作用。MPI的实现建议你在 MPI_Init
之前不要做太多事情。真正的解决办法是修正代码,使其正确使用MPI。