【发布时间】:2017-05-16 08:57:46
【问题描述】:
我有一个生成系统矩阵的 Python 脚本。这在一个处理器上,在一个进程中连续发生,没有并行化。我也有一个求解器代码。代码在许多使用 MPI 的处理器上运行。
目前,Python 脚本创建矩阵,将其写入文件,通过subprocess.call(["mpirun ....."]) 调用求解器,求解器从文件中读取矩阵,求解,写回文件,最后 Python 脚本读回结果来自文件。
现在我正在寻找更有效的方法,避免文件读/写。一种想法是启动 MPI 进程并在后台运行它,然后通过 Python 和求解器之间的某种进程间通信传输数据和命令。
如何在 Python 中进行进程间通信?还是有更好的选择?
我要避免在 MPI (MPI4Py) 中使用 Python 脚本,因为可调试性和并行化没有意义。
【问题讨论】:
-
你确定文件 I/O 是这里的限速步骤吗?
-
mpiexec通常将其标准输入重定向到等级 0 的标准输入,而对所有等级的标准输出执行相反的操作。只需打开mpiexec命令的管道,发送矩阵,然后读取结果。只需确保除 0 以外的任何等级都不会输出到标准输出。或者使用os.mkfifo()创建一个单独的FIFO。