Doh! Stupid Programming Mistakes <humor>

Jacob Fugal lukfugl at gmail.com
Thu Oct 19 12:35:32 MDT 2006


On 10/19/06, Corey Edwards <tensai at zmonkey.org> wrote:
> That depends on what exactly MPI is. From the code I get the impression
> that it's a library that handles parallel execution, in which case the
> whole point is to have multiple processes fork off and remain running.
> If that's the case I believe my code is correct. It could also be that
> each child is supposed to run MPI_Finalize, signalling that it has
> exited and should no longer be included in the process pool. Googling
> around for MPI seems to indicate something along those lines.

Good point, I hadn't considered that maybe MPI_Finalize was meant to
be called for each process. If that's the case, I'd move the
MPI_Finalize call up into the if statement and keep the return. Also
correcting the if statement so that it's the *children* who execute
the block:

  #include <stdio.h>
  #include <mpi.h>

  void main (int argc, char *argv[])
  {
      int myrank, size,x;
      MPI_Init(&argc, &argv);

      for(x = 0; x < 10; x++){
          if(fork()){
              /* do parent stuff */
          } else {
              /* do child stuff -- I assume it's
               * each child that does this, rather
               * than the parent doing it ten times
               */
              MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
              MPI_Comm_size(MPI_COMM_WORLD, &size);
              printf("Processor %d of %d: Running!\n", myrank, size);
              MPI_Finalize();
              return;
          }
      }
  }

Jacob Fugal



More information about the PLUG mailing list