我想写一个脚本,看起来像下面这样:
Execute a pre-processing function (only 1 process should do this; all others wait until this is done)
--------
All processes then do the main function in parallel
--------
Finally, after all processes finish, execute a post-processing function
我试过:
from mpi4py import MPI
*pre-processing
MPI.Init()
*parallel script
MPI.Finalize()
*post-processing
但所有内核都在运行脚本的所有部分
1条答案
按热度按时间k4ymrczo1#
MPI不派生线程:每个内核运行整个程序。
MPI_Init
不是并行区域的开始:它会做一些诸如缓冲区分配、发现网络之类的事情。因此,init之前和finalize之后的所有内容都由每个进程执行。
解决方案:将
MPI_Init
一直移到顶部,然后执行if (myrank==0)
子句中的单进程内容。