Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

From: Jeffrey L. Tilson (jtilson_at_[hidden])
Date: 2007-06-21 09:32:34


Hi George,
It does seem to me that your execution is correct.

Here are my stats...

-bash-3.00$ mpicc -V
Intel(R) C Compiler for Intel(R) EM64T-based applications, Version
9.1 Build 20060925 Package ID: l_cc_c_9.1.044
Copyright (C) 1985-2006 Intel Corporation. All rights reserved.

-bash-3.00$ uname -a
Linux kh0.renci.org 2.6.9-42.0.8.ELsmp #1 SMP Mon Feb 19 13:45:17 EST
2007 x86_64 x86_64 x86_64 GNU/Linux

(snip)
model : 15
model name : Intel(R) Xeon(R) CPU 5150 @ 2.66GHz
stepping : 6
cpu MHz : 2660.004
cache size : 4096 KB
(snip)

Lauching the job as
> /mpirun --mca btl mvapi,self ./a.out

Version:
openMPI 1.1.4

--jeff

On Wed, 2007-06-20 at 21:52, George Bosilca wrote:
> Jeff,
>
> With the proper MPI_Finalize added at the end of the main function,
> your program orks fine with the current version of Open MPI up to 32
> processors. Here is the output I got for 4 processors:
>
> I am 2 of 4 WORLD procesors
> I am 3 of 4 WORLD procesors
> I am 0 of 4 WORLD procesors
> I am 1 of 4 WORLD procesors
> Initial inttemp 1
> Initial inttemp 0
> final inttemp 0,0
> 0, WORLD barrier leaving routine
> final inttemp 1,0
> 1, WORLD barrier leaving routine
> Initial inttemp 2
> final inttemp 2,0
> 2, WORLD barrier leaving routine
> SERVER Got a DONE flag
> Initial inttemp 3
> final inttemp 3,0
> 3, WORLD barrier leaving routine
>
> This output seems to indicate that the program is running to
> completion and it does what you expect it to do.
>
> Btw, what version of Open MPI are you using and on what kind of
> hardware ?
>
> george.
>
> On Jun 20, 2007, at 6:31 PM, Jeffrey L. Tilson wrote:
>
> > Hi,
> > ANL suggested I post this question to you. This is my second
> > posting......but now with the proper attachments.
> >
> > From: Jeffrey Tilson <jltilson_at_[hidden]>
> > Date: June 20, 2007 5:17:50 PM PDT
> > To: mpich2-maint_at_[hidden], Jeffrey Tilson <jtilson_at_[hidden]>
> > Subject: MPI question/problem
> >
> >
> > Hello All,
> > This will probably turn out to be my fault as I haven't used MPI in
> > a few years.
> >
> > I am attempting to use an MPI implementation of a "nxtval" (see the
> > MPI book). I am using the client-server scenario. The MPI book
> > specifies the three functions required. Two are collective and one
> > is not. Only the two collectives are tested in the supplied code.
> > All three of the MPI functions are reproduced in the attached code,
> > however. I wrote a tiny application to create and free a counter
> > object and it fails.
> >
> > I need to know if this is a bug in the MPI book and a
> > misunderstanding on my part.
> >
> > The complete code is attached. I was using openMPI/intel to compile
> > and run.
> >
> > The error I get is:
> >
> >> [compute-0-1.local:22637] *** An error occurred in MPI_Comm_rank
> >> [compute-0-1.local:22637] *** on communicator MPI_COMM_WORLD
> >> [compute-0-1.local:22637] *** MPI_ERR_COMM: invalid communicator
> >> [compute-0-1.local:22637] *** MPI_ERRORS_ARE_FATAL (goodbye)
> >> mpirun noticed that job rank 0 with PID 22635 on node
> >> "compute-0-1.local" exited on signal 15.
> >
> > I've attempted to google my way to understanding but with little
> > success. If someone could point me to
> > a sample application that actually uses these functions, I would
> > appreciate it.
> >
> > Sorry if this is the wrong list, it is not an MPICH question and I
> > wasn't sure where to turn.
> >
> > Thanks,
> > --jeff
> >
> > ----------------------------------------------------------------------
> > --
> >
> > /* A beginning piece of code to perform large-scale web
> > construction. */
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <string.h>
> > #include "mpi.h"
> >
> > typedef struct {
> > char description[1024];
> > double startwtime;
> > double endwtime;
> > double difftime;
> > } Timer;
> >
> > /* prototypes */
> > int MPE_Counter_nxtval(MPI_Comm , int *);
> > int MPE_Counter_free( MPI_Comm *, MPI_Comm * );
> > void MPE_Counter_create( MPI_Comm , MPI_Comm *, MPI_Comm *);
> > /* End prototypes */
> >
> > /* Globals */
> > int rank,numsize;
> >
> > int main( argc, argv )
> > int argc;
> > char **argv;
> > {
> >
> > int i,j;
> > MPI_Status status;
> > MPI_Request r;
> > MPI_Comm smaller_comm, counter_comm;
> >
> >
> > int numtimings=0;
> > int inttemp;
> > int value=-1;
> > int server;
> >
> > //Init parallel environment
> >
> > MPI_Init( &argc, &argv );
> > MPI_Comm_rank( MPI_COMM_WORLD, &rank );
> > MPI_Comm_size( MPI_COMM_WORLD, &numsize );
> >
> > printf("I am %i of %i WORLD procesors\n",rank,numsize);
> > server = numsize -1;
> >
> > MPE_Counter_create( MPI_COMM_WORLD, &smaller_comm, &counter_comm );
> > printf("Initial inttemp %i\n",rank);
> >
> > inttemp = MPE_Counter_free( &smaller_comm, &counter_comm );
> > printf("final inttemp %i,%i\n",rank,inttemp);
> >
> > printf("%i, WORLD barrier leaving routine\n",rank);
> > MPI_Barrier( MPI_COMM_WORLD );
> > }
> >
> > //// Add new MPICH based shared counter.
> > //// grabbed from http://www-unix.mcs.anl.gov/mpi/usingmpi/examples/
> > advanced/nxtval_create_c.htm
> >
> > /* tag values */
> > #define REQUEST 0
> > #define GOAWAY 1
> > #define VALUE 2
> > #define MPE_SUCCESS 0
> >
> > void MPE_Counter_create( MPI_Comm oldcomm, MPI_Comm * smaller_comm,
> > MPI_Comm * counter_comm )
> > {
> > int counter = 0;
> > int message, done = 0, myid, numprocs, server, color,ranks[1];
> > MPI_Status status;
> > MPI_Group oldgroup, smaller_group;
> >
> > MPI_Comm_size(oldcomm, &numprocs);
> > MPI_Comm_rank(oldcomm, &myid);
> > server = numprocs-1; /* last proc is server */
> > MPI_Comm_dup( oldcomm, counter_comm ); /* make one new comm */
> > if (myid == server) color = MPI_UNDEFINED;
> > else color =0;
> > MPI_Comm_split( oldcomm, color, myid, smaller_comm);
> >
> > if (myid == server) { /* I am the server */
> > while (!done) {
> > MPI_Recv(&message, 1, MPI_INT, MPI_ANY_SOURCE,
> > MPI_ANY_TAG,
> > *counter_comm, &status );
> > if (status.MPI_TAG == REQUEST) {
> > MPI_Send(&counter, 1, MPI_INT, status.MPI_SOURCE,
> > VALUE,
> > *counter_comm );
> > counter++;
> > }
> > else if (status.MPI_TAG == GOAWAY) {
> > printf("SERVER Got a DONE flag\n");
> > done = 1;
> > }
> > else {
> > fprintf(stderr, "bad tag sent to MPE counter\n");
> > MPI_Abort(*counter_comm, 1);
> > }
> > }
> > MPE_Counter_free( smaller_comm, counter_comm );
> > }
> > }
> >
> > /*******************************/
> > int MPE_Counter_free( MPI_Comm *smaller_comm, MPI_Comm *
> > counter_comm )
> > {
> > int myid, numprocs;
> >
> > MPI_Comm_rank( *counter_comm, &myid );
> > MPI_Comm_size( *counter_comm, &numprocs );
> >
> > if (myid == 0)
> > MPI_Send(NULL, 0, MPI_INT, numprocs-1, GOAWAY, *counter_comm);
> >
> > MPI_Comm_free( counter_comm );
> >
> > if (*smaller_comm != MPI_COMM_NULL) {
> > MPI_Comm_free( smaller_comm );
> > }
> > return 0;
> > }
> >
> > /************************/
> > int MPE_Counter_nxtval(MPI_Comm counter_comm, int * value)
> > {
> > int server,numprocs;
> > MPI_Status status;
> >
> > MPI_Comm_size( counter_comm, &numprocs );
> > server = numprocs-1;
> > MPI_Send(NULL, 0, MPI_INT, server, REQUEST, counter_comm );
> > MPI_Recv(value, 1, MPI_INT, server, VALUE, counter_comm,
> > &status );
> > return 0;
> > }
> >
> >
> > _______________________________________________
> > users mailing list
> > users_at_[hidden]
> > http://www.open-mpi.org/mailman/listinfo.cgi/users
>
>
> ______________________________________________________________________
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users