多次调用MPI_Init

0 投票
1 回答
2218 浏览
提问于 2025-04-17 11:13

我明白MPI_init这个函数在一个程序运行实例中只能调用一次。有人能解释一下这个语言的限制吗?比如:

  1. 我知道可以在mpiexec上运行多个Python程序。
  2. 有没有类似于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。

撰写回答