Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
some of the action checking code didn't work right, so I removed it.
[simgrid.git] / src / smpi / sample / first.c
index d78aeac..e48d03a 100644 (file)
@@ -1,56 +1,32 @@
-/* A first simple SPMD example program using MPI                  */
+#include <stdio.h>
+#include <mpi.h>
 
-/* The program consists of on receiver process and N-1 sender     */
-/* processes. The sender processes send a message consisting      */
-/* of their process identifier (id) and the total number of       */
-/* processes (ntasks) to the receiver. The receiver process       */
-/* prints out the values it receives in the messeges from the     */
-/* senders.                                                       */
+int main(int argc, char *argv[])
+{
+       int rank, size, err;
 
-/* Compile the program with 'mpicc first.c -o first'              */
-/* To run the program, using four of the computers specified in   */
-/* your hostfile, do 'mpirun -machinefile hostfile -np 4 first    */
+       err = MPI_Init(&argc, &argv); /* Initialize MPI */
+       if (err != MPI_SUCCESS) {
+               printf("MPI initialization failed!\n");
+               exit(1);
+       }
 
-#include <stdio.h>
-#include <mpi.h>
-main(int argc, char *argv[]) {
-  const int tag = 42;         /* Message tag */
-  int id, ntasks, source_id, dest_id, err, i;
-  MPI_Status status;
-  int msg[2];     /* Message array */
-  
-  err = MPI_Init(&argc, &argv); /* Initialize MPI */
-  if (err != MPI_SUCCESS) {
-    printf("MPI initialization failed!\n");
-    exit(1);
-  }
-  err = MPI_Comm_size(MPI_COMM_WORLD, &ntasks); /* Get nr of tasks */
-  err = MPI_Comm_rank(MPI_COMM_WORLD, &id); /* Get id of this process */
-  if (ntasks < 2) {
-    printf("You have to use at least 2 processors to run this program\n");
-    MPI_Finalize();      /* Quit if there is only one processor */
-    exit(0);
-  }
-  
-  if (id == 0) {    /* Process 0 (the receiver) does this */
-    for (i=1; i<ntasks; i++) {
-      err = MPI_Recv(msg, 2, MPI_INT, MPI_ANY_SOURCE, tag, MPI_COMM_WORLD, \
-         &status);          /* Receive a message */
-      source_id = status.MPI_SOURCE;  /* Get id of sender */
-      printf("Received message %d %d from process %d\n", msg[0], msg[1], \
-       source_id);
-    }
-  }
-  else {      /* Processes 1 to N-1 (the senders) do this */
-    msg[0] = id;    /* Put own identifier in the message */
-    msg[1] = ntasks;          /* and total number of processes */
-    dest_id = 0;    /* Destination address */
-    sleep(3);
-    err = MPI_Send(msg, 2, MPI_INT, dest_id, tag, MPI_COMM_WORLD);
-  }
-  
-  err = MPI_Finalize();          /* Terminate MPI */
-  if (id==0) printf("Ready\n");
-  return 0;
-}
+       err = MPI_Comm_size(MPI_COMM_WORLD, &size);
+       if (err != MPI_SUCCESS) {
+               printf("MPI Get Communicator Size Failed!\n");
+       }
 
+       err = MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+       if (err != MPI_SUCCESS) {
+               printf("MPI Get Communicator Rank Failed!\n");
+       }
+
+       if (0 == rank) {
+               printf("root node believes there are %d nodes in world.\n", size);
+       }
+
+       sleep(20);
+
+       err = MPI_Finalize();          /* Terminate MPI */
+       return 0;
+}