Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add collectives for allgather, allreduce, bcast and reduce
[simgrid.git] / src / smpi / colls / alltoall-simple.c
index df2be4e..dd64a1d 100644 (file)
  * Auther: Ahmad Faraj
 
  ****************************************************************************/
-int
-smpi_coll_tuned_alltoall_simple(void * send_buff, int send_count,
-               MPI_Datatype send_type, void * recv_buff,
-               int recv_count, MPI_Datatype recv_type,
-               MPI_Comm comm)
+int smpi_coll_tuned_alltoall_simple(void *send_buff, int send_count,
+                                    MPI_Datatype send_type,
+                                    void *recv_buff, int recv_count,
+                                    MPI_Datatype recv_type, MPI_Comm comm)
 {
   int i, rank, size, nreqs, err, src, dst, tag = 101;
   char *psnd;
@@ -36,7 +35,7 @@ smpi_coll_tuned_alltoall_simple(void * send_buff, int send_count,
   MPI_Request *req;
   MPI_Request *preq;
   MPI_Request *qreq;
-  MPI_Status s, * statuses;
+  MPI_Status s, *statuses;
 
 
   MPI_Comm_size(comm, &size);
@@ -49,45 +48,44 @@ smpi_coll_tuned_alltoall_simple(void * send_buff, int send_count,
   /* Allocate arrays of requests. */
 
   nreqs = 2 * (size - 1);
-  if (nreqs > 0)
-    {
-      req = (MPI_Request *) malloc(nreqs * sizeof(MPI_Request));
-      statuses = (MPI_Status *) malloc(nreqs * sizeof(MPI_Status));
-      if (!req || !statuses)
-       {
-         free(req);
-         free(statuses);
-         return 0;
-       }
+  if (nreqs > 0) {
+    req = (MPI_Request *) malloc(nreqs * sizeof(MPI_Request));
+    statuses = (MPI_Status *) malloc(nreqs * sizeof(MPI_Status));
+    if (!req || !statuses) {
+      free(req);
+      free(statuses);
+      return 0;
     }
-  else
-    req = 0;
+  } else {
+    req = NULL;
+    statuses = NULL;
+  }
 
   /* simple optimization */
 
   psnd = ((char *) send_buff) + (rank * sndinc);
   prcv = ((char *) recv_buff) + (rank * rcvinc);
-  MPI_Sendrecv (psnd, send_count, send_type, rank, tag,
-               prcv, recv_count, recv_type,
-               rank, tag, comm, &s);
+  MPI_Sendrecv(psnd, send_count, send_type, rank, tag,
+               prcv, recv_count, recv_type, rank, tag, comm, &s);
 
 
   /* Initiate all send/recv to/from others. */
 
   preq = req;
   qreq = req + size - 1;
-  prcv = (char*) recv_buff;
-  psnd = (char*) send_buff;
-  for (i = 0; i < size; i++)
-    {
-      src = dst = (rank + i) % size;
-      if (src == rank) continue;
-      if (dst == rank) continue;      
-      MPI_Recv_init(prcv + (src * rcvinc), recv_count, recv_type, src,
-                   tag, comm, preq++);
-      MPI_Send_init(psnd + (dst * sndinc), send_count, send_type, dst,
-                   tag, comm, qreq++);
-    }
+  prcv = (char *) recv_buff;
+  psnd = (char *) send_buff;
+  for (i = 0; i < size; i++) {
+    src = dst = (rank + i) % size;
+    if (src == rank)
+      continue;
+    if (dst == rank)
+      continue;
+    MPI_Recv_init(prcv + (src * rcvinc), recv_count, recv_type, src,
+                  tag, comm, preq++);
+    MPI_Send_init(psnd + (dst * sndinc), send_count, send_type, dst,
+                  tag, comm, qreq++);
+  }
 
   /* Start all the requests. */
 
@@ -107,9 +105,9 @@ smpi_coll_tuned_alltoall_simple(void * send_buff, int send_count,
     err = MPI_Request_free(preq);
     if (err != MPI_SUCCESS) {
       if (req)
-       free((char *) req);
+        free((char *) req);
       if (statuses)
-       free(statuses);
+        free(statuses);
       return err;
     }
   }
@@ -122,5 +120,3 @@ smpi_coll_tuned_alltoall_simple(void * send_buff, int send_count,
     free(statuses);
   return (1);
 }
-
-