Hi,

master() never MPI_Bcast(dojob=2, c...), hence the hang

Cheers,

Gilles

On Tuesday, November 8, 2016, Baris Kececi via users <
users@lists.open-mpi.org> wrote:

> Hi friends,
> I'm trying to write a simple parallel master/slave program.
> Here in my program the task of master is to distribute a randomly filled
> array to the workers.
> And each worker have to print a part of the array. That's all what i want
> to do.
> The master need to make run the workers each time. Then workers and master
> need to end.
>
> The problem is the program doesnt complete. Probably it stuck in to an
> endless loop.
> Below is my c code and output.
> Can anybody help me on this issue?
> I would appreciate.
>
>
> C CODE
> ==============================================
> #include <stdio.h>
> #include <stdlib.h>
> #include <time.h>
> #include <mpi.h>
>
> #define SIZE 11
>
> int master(void);
> int worker(int pid);
>
> int main( int argc, char **argv )
> {
>         system("clear");
>     int pid;
>
>         /* Initialize MPI */
>         MPI_Init( &argc, &argv );
>
>         /* Get process id */
>         MPI_Comm_rank( MPI_COMM_WORLD, &pid );
>
>     if (pid == 0)
>         master();
>     else
>         worker(pid);
>
>         /* Terminate MPI */
>         MPI_Finalize();
>
>     printf("Hit anykey to continue...");
>     getchar();
>            return 0;
> }
>
> int master()
> {
>     int i, j, iteration, nofp, dojob, x_coor[SIZE];
>     srand( time(NULL) );
>
>     /* Get number of processes */
>         MPI_Comm_size( MPI_COMM_WORLD, &nofp );
>
>     for(iteration = 1; iteration <= 5; iteration++)
>     {
>         printf("Iteration-%d --> x_coor[.] = ", iteration);
>         for( j = 1; j < SIZE; j++ )
>         {
>             x_coor[j] = rand() % 50 + 1;
>             printf("%d ",x_coor[j]);
>         }
>         printf("\n");
>
>         /* Seed the workers */
>         if (iteration <= 5)
>             dojob = 1;
>         else
>             dojob = 2;
>         MPI_Bcast(&dojob, 1, MPI_INT, 0, MPI_COMM_WORLD);
>         MPI_Barrier(MPI_COMM_WORLD);
>         MPI_Bcast(x_coor, SIZE, MPI_INT, 0, MPI_COMM_WORLD);
>         MPI_Barrier(MPI_COMM_WORLD);
>     }
>
>     return 0;
> }
>
> int worker(int pid)
> {
>     int i, nofp, x_coor[SIZE], dojob;
>     dojob = 0;
>
>     /* Get number of processes */
>         MPI_Comm_size( MPI_COMM_WORLD, &nofp );
>
> START:
>
>     dojob = 0;
>     for(;;)
>     {
>         MPI_Bcast(&dojob, 1, MPI_INT, 0, MPI_COMM_WORLD);
>         MPI_Barrier(MPI_COMM_WORLD);
>         MPI_Bcast(x_coor, SIZE, MPI_INT, 0, MPI_COMM_WORLD);
>         MPI_Barrier(MPI_COMM_WORLD);
>
>         if(dojob == 1)
>             break;
>         else if(dojob == 2)
>             return 0;
>
>     }
>
>     /* do the work */
>     for ( i = pid; i < SIZE; i=i+nofp )
>         printf("x_coor[%d]=%d\n",i,x_coor[i]);
>
>     goto START;
> }
>
> OUTPUT
> ==============================================
> Iteration-1 --> x_coor[.] = 33 36 7 28 19 19 8 24 16 10
> Iteration-2 --> x_coor[.] = 39 46 48 46 23 9 32 4 17 15
> Iteration-3 --> x_coor[.] = 43 24 34 10 24 47 32 33 34 8
> Iteration-4 --> x_coor[.] = 22 18 45 28 47 14 48 5 39 14
> Iteration-5 --> x_coor[.] = 16 27 9 13 25 31 24 6 34 42
> x_coor[1]=33
> x_coor[3]=7
> x_coor[5]=19
> x_coor[7]=8
> x_coor[9]=16
> x_coor[1]=39
> x_coor[3]=48
> x_coor[5]=23
> x_coor[7]=32
> x_coor[9]=17
> x_coor[1]=43
> x_coor[3]=34
> x_coor[5]=24
> x_coor[7]=32
> x_coor[9]=34
> x_coor[1]=22
> x_coor[3]=45
> x_coor[5]=47
> x_coor[7]=48
> x_coor[9]=39
> x_coor[1]=16
> x_coor[3]=9
> x_coor[5]=25
> x_coor[7]=24
> x_coor[9]=34
>
>
> Kind regards to all.
> *BARIŞ KEÇECİ*
>
>
_______________________________________________
users mailing list
users@lists.open-mpi.org
https://rfd.newmexicoconsortium.org/mailman/listinfo/users

Reply via email to