locked
Why only one node to run my program? RRS feed

  • Question

  • I have three node,and each node have two core.so I have 6 core.One node is Head node(HN,is computing node) ,the other two node are computing node(CN2,CN3).

    I write a MPI program  to compute pi.

     

    I use the job manager to submit my job

    in the processors  tag ,the minimum required  is 6 and maximum required  is 6.

    in the tasks  tag , I type "mpiexec -n 6 pi.exe" in the command line ,then edit  it.

    the command line :mpiexec -n 6 pi.exe

    standard input:C:\in.txt

    standard output:C:\out.txt

    standard error:C:\out.txt

    workDirectory: F:\                               (I put pi.exe into the "F:\"  of each node  )

     

    Then I submit my job.and it run.

    but I find that only the cpu usage of  CN3 is 100%.

    the other two node ,the cpu usage  almost is  0%.

    I think that   the cpu usage  ot the three   node should balance.

    So it is only the CN3 to run the program.Is it right? Which step is wrong?

    How to balance the load?

     

    thanks.

     

    the code

    ///////////////////////////////////////////////////////////////////////////////
    /* -*- Mode: C; c-basic-offset:4 ; -*- */
    /*
     *  (C) 2001 by Argonne National Laboratory.
     *      See COPYRIGHT in top-level directory.
     */

    /* This is an interactive version of cpi */
    #include "mpi.h"
    #include <stdio.h>
    #include <math.h>

    double f(double);

    double f(double a)
    {
        return (4.0 / (1.0 + a*a));
    }

    int main(int argc,char *argv[])
    {
        int done = 0, n, myid, numprocs, i;
        double PI25DT = 3.141592653589793238462643;
        double mypi, pi, h, sum, x;
        double startwtime = 0.0, endwtime;
        int  namelen;
        char processor_name[MPI_MAX_PROCESSOR_NAME];

        MPI_Init(&argc,&argv);
        MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
        MPI_Comm_rank(MPI_COMM_WORLD,&myid);
        MPI_Get_processor_name(processor_name,&namelen);

        /*
        fprintf(stdout,"Process %d of %d is on %s\n",
         myid, numprocs, processor_name);
        fflush(stdout);
        */

        while (!done) {
            if (myid == 0) {
                fprintf(stdout, "Enter the number of intervals: (0 quits) ");
         fflush(stdout);
                if (scanf("%d",&n) != 1) {
      fprintf( stdout, "No number entered; quitting\n" );
      n = 0;
         }
         startwtime = MPI_Wtime();
            }
            MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
            if (n == 0)
                done = 1;
            else {
                h   = 1.0 / (double) n;
                sum = 0.0;
                for (i = myid + 1; i <= n; i += numprocs) {
                    x = h * ((double)i - 0.5);
                    sum += f(x);
                }
                mypi = h * sum;
                MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

                if (myid == 0) {
                    printf("pi is approximately %.16f, Error is %.16f\n",
                           pi, fabs(pi - PI25DT));
      endwtime = MPI_Wtime();
      printf("wall clock time = %f\n", endwtime-startwtime);       
      fflush( stdout );
         }
            }
        }
        MPI_Finalize();
        return 0;
    }
    /////////////////////////////////////////////////////////////////////////////////////////////

     

     

    Sunday, May 11, 2008 1:22 PM

Answers

  •  

    Try removing "-n 6" from your command line.  Mpiexec will pick up the number of processors to use from an environment variables set by the scheduler; you don't need to specify that.

     

    -Josh

     

    If you're wondering why we do that, it will allow you to say things like "numprocessors:2-6" since you won't need to know the number of processors you'll get in order to specify your MPI command.

     

     

    Sunday, May 11, 2008 3:20 PM
    Moderator