您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

是否可以使用MPI将数据从Fortran程序发送到Python?

是否可以使用MPI将数据从Fortran程序发送到Python?

如果要在同一MPI作业中同时启动Fortran程序和Python程序,则必须使用以下方法

mpiexec -n 1 fortran_program : -n 1 python main.py

Fortran程序将变为MPI等级0,而Python程序将变为MPI等级1。您还可以启动每个可执行文件中的多个,例如:

mpiexec -n 2 fortran_program : -n 4 python main.py

排名0和1来自Fortran程序,排名2至5-来自Python。

还要注意,comm.recv()在mpi4py其他通信方式,与小写字母(启动comm.send()comm.irecv()等),引擎盖下使用泡菜和实际上序列化Python对象进行操作。这与Fortran代码发送的字符数组不兼容。你必须要使用以大写字母(启动通信方式comm.Send()comm.Recv()等等)上与NumPy阵列操作和接收显式类型信息。不幸的是,我的Python功能很弱,我现在无法提供完整的工作示例,但是MPI部分应该是这样的(未经验证的代码):

# Create an MPI status object
status = MPI.Status()
# Wait for a message without receiving it
comm.Probe(source=0, tag=22, status=status)
# Check the length of the message
nchars = status.Get_count(MPI.CHARACTER)
# Allocate a big enough data array of characters
data = np.empty(nchars, dtype='S')
# Receive the message
comm.Recv([data, MPI.CHARACTER], source=0, tag=22)
# Construct somehow the string out of the individual chars in "data"

在Fortran代码中,您必须指定目标等级1(如果您正在运行一个Fortran可执行文件一个Python可执行文件)。

python 2022/1/1 18:42:56 有294人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶