使用 mpirun 传递用户输入

计算科学 Python 并行计算 高性能计算 mpi
2021-12-22 10:01:35

我正在使用 mpi4py 构建一个量子电路模拟器。模拟器接受用户输入来构建初始系统和系统通过的量子门。如果我不使用用户输入而只在系统和门中使用硬代码,我可以让代码工作。但是,当我使用用户输入时,我无法弄清楚如何让代码工作。如果我使用用户输入运行代码,它不允许我输入输入,然后代码会出错,因为从未定义过变量。我试图获取用户输入,然后 mpirun 其余代码,但它无法识别从用户输入获得的变量。我试图将用户输入变量传递到我正在运行的代码中,但我也无法让它工作。我不知道如何处理这个问题!

2个回答

如果在本地运行,来自控制台的输入可能在进程零上工作,但肯定不会在其他等级上工作。但是,我什至不会在进程零上进行交互式输入。

#!/bin/bash

if [ $PMI_RANK -eq 0 ] ; then 
  ( echo 5 ; echo 1 ; echo foo ) | $*
else
  exec $*
fi

把它放在一个脚本中,然后用 mpirun 启动它:

mpirun myscript.sh myprogram

MPI 等级的环境变量在您的 MPI 中可能具有不同的名称。

MPI 被设计成可以在多台机器上启动相同的可执行文件,而其中没有一台可能是调用该mpirun程序的机器。此外,MPI 作业通常被放入队列中,实际作业可能会在数小时或数天后运行。

因此,MPI 作业不打算在交互模式下使用,但所有输入都应该以某种方式提供,以便程序——无论何时何地实际运行——都可以以非交互方式访问它.