I am building a quantum circuit simulator using mpi4py. The simulator takes user inputs to build the initial system and quantum gates the system passes through. I can get the code to work if I do not use user inputs and just hard code in the system and gates. However, I cannot figure out how to get the code to work when I do use user inputs. If I mpirun the code with the user inputs it does not allow me to enter inputs and then the code gives an error because variables are never defined. I tried to get the user inputs and then mpirun the rest of the code but it does not recognize the variables obtained from user inputs. I tried to pass in the user input variables into my code I am mpirunning, but I also could not get this to work. I am not sure how to deal with this issue!

  • $\begingroup$ When you say "user input", do you mean "stuff your program reads from the console"? "User input" could of course also be "stuff read from a parameter file"... $\endgroup$ May 31 at 22:42
  • $\begingroup$ Stuff your program reads from the console. Like I run the code and it says how many qubits do you want in your system and I input the number of qubits I want in my system. $\endgroup$
    – Orphea12
    May 31 at 22:47
  • $\begingroup$ This seems more a programming than a computational science question. $\endgroup$
    – nicoguaro
    Jun 1 at 14:47

Input from the console may work on process zero, if that runs locally, but will certainly not work on other ranks. However, I wouldn't even do interactive input on process zero.


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

Put that in a script and start that with mpirun:

mpirun myscript.sh myprogram

The environment variable for the MPI rank may have a different name in your MPI.

  • $\begingroup$ Thank you for the answer, but I am not sure what this does. Would you mind explaining? $\endgroup$
    – Orphea12
    Jun 1 at 1:02
  • $\begingroup$ Instead of running your program you run a shell script that calls your program. Then you let the shell script provide input to the program. $\endgroup$ Jun 1 at 20:48

MPI is designed so that the same executable is started on a number of machines, none of which may be the one on which the mpirun program is called. Furthermore, MPI jobs are typically put into a queue, and the actual job may run hours or days later.

As a consequence, MPI jobs are not meant to be used in an interactive mode, but all input should be provided in a way so that the program -- wherever and whenever it is actually running -- can access it in a non-interactive way.

  • $\begingroup$ So if I wanted to build a quantum circuit simulator in a parallel environment I would have to hard code in the system and gates I want and then run that way instead of it be an interactive experience? That makes a lot of sense. Thank you! $\endgroup$
    – Orphea12
    Jun 2 at 0:35
  • 1
    $\begingroup$ @Orphea12 Or ask users to write their commands into an input file that the program reads at run-time. That's what most MPI programs do: Read their inputs from either an input file or from the command line. $\endgroup$ Jun 2 at 2:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.