Python和MPI进程之间的内存共享策略

Python和MPI进程之间的内存共享策略,python,mpi,ipc,Python,Mpi,Ipc,我有一个生成系统矩阵的Python脚本。在一个处理器上,在一个进程中,这是串行发生的,没有并行化。我还有一个解算器代码。该代码在许多使用MPI的处理器上运行 当前,Python脚本创建矩阵,将其写入文件,通过subprocess.call[mpirun…]调用解算器,解算器从文件读取矩阵,解算,写回文件,最后Python脚本从文件读取结果 现在我正在寻找更有效的方法,避免文件读写。一个想法是启动MPI进程并在后台运行,然后在Python和解算器之间通过某种进程间通信传输数据和命令 如何在Pyth

我有一个生成系统矩阵的Python脚本。在一个处理器上,在一个进程中,这是串行发生的,没有并行化。我还有一个解算器代码。该代码在许多使用MPI的处理器上运行

当前,Python脚本创建矩阵,将其写入文件,通过subprocess.call[mpirun…]调用解算器,解算器从文件读取矩阵,解算,写回文件,最后Python脚本从文件读取结果

现在我正在寻找更有效的方法,避免文件读写。一个想法是启动MPI进程并在后台运行,然后在Python和解算器之间通过某种进程间通信传输数据和命令

如何在Python中进行进程间通信?还是有更好的选择


我要避免的是在MPI MPI4Py中使用Python脚本,因为它具有可调试性,而且并行化没有任何意义。

最简单的方法是使用或使用其他RAM支持的临时文件系统。考虑到您无论如何都在使用Python,这可能会提供非常合理的性能。只有当测量结果明确表明这是一个瓶颈并且有可能提高性能时,我才会采用更复杂的方法

现在,当然假设至少有一些MPI列组运行在Python脚本运行的同一节点上。如果并非所有列组都在同一节点上运行,则可能需要在MPI解算器中广播/分散数据


现在,您可以使用MPI的功能动态地建立通信等。。或者您甚至可以使用动态流程管理,例如使用而不是从Python运行MPI。我认为这会带来更大的复杂性,而且与RAM支持的文件相比,可能不会有显著的性能提升。HPC系统可能也不太支持它。

您确定文件I/O是此处的速率限制步骤吗?mpiexec通常将其标准输入重定向到秩0的标准输入,而对所有秩的标准输出则相反。只需打开一个到mpiexec命令的管道,发送矩阵,然后读取结果。只需确保标准输出只有0个输出,没有其他秩。或者使用os.mkfifo创建单独的FIFO。