Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
First works on the datatypes. Still missing a lot.
[simgrid.git] / src / smpi / colls / reduce_scatter-mpich.cpp
index 00cd986..4906203 100644 (file)
@@ -38,7 +38,7 @@ int smpi_coll_tuned_reduce_scatter_mpich_pair(void *sendbuf, void *recvbuf, int
     extent =smpi_datatype_get_extent(datatype);
     smpi_datatype_extent(datatype, &true_lb, &true_extent);
     
-    if (smpi_op_is_commute(op)) {
+    if (op->is_commutative()) {
         is_commutative = 1;
     }
 
@@ -90,14 +90,14 @@ int smpi_coll_tuned_reduce_scatter_mpich_pair(void *sendbuf, void *recvbuf, int
             
             if (is_commutative || (src < rank)) {
                 if (sendbuf != MPI_IN_PLACE) {
-                    smpi_op_apply( op,
+                    if(op!=MPI_OP_NULL) op->apply(
                                                  tmp_recvbuf, recvbuf, &recvcounts[rank],
-                               &datatype); 
+                               datatype); 
                 }
                 else {
-                   smpi_op_apply(op, 
+                   if(op!=MPI_OP_NULL) op->apply( 
                        tmp_recvbuf, ((char *)recvbuf+disps[rank]*extent), 
-                       &recvcounts[rank], &datatype);
+                       &recvcounts[rank], datatype);
                     /* we can't store the result at the beginning of
                        recvbuf right here because there is useful data
                        there that other process/processes need. at the
@@ -107,8 +107,8 @@ int smpi_coll_tuned_reduce_scatter_mpich_pair(void *sendbuf, void *recvbuf, int
             }
             else {
                 if (sendbuf != MPI_IN_PLACE) {
-                   smpi_op_apply(op, 
-                      recvbuf, tmp_recvbuf, &recvcounts[rank], &datatype);
+                   if(op!=MPI_OP_NULL) op->apply( 
+                      recvbuf, tmp_recvbuf, &recvcounts[rank], datatype);
                     /* copy result back into recvbuf */
                     mpi_errno = smpi_datatype_copy(tmp_recvbuf, recvcounts[rank],
                                                datatype, recvbuf,
@@ -116,9 +116,9 @@ int smpi_coll_tuned_reduce_scatter_mpich_pair(void *sendbuf, void *recvbuf, int
                     if (mpi_errno) return(mpi_errno);
                 }
                 else {
-                   smpi_op_apply(op, 
+                   if(op!=MPI_OP_NULL) op->apply( 
                         ((char *)recvbuf+disps[rank]*extent),
-                       tmp_recvbuf, &recvcounts[rank], &datatype);
+                       tmp_recvbuf, &recvcounts[rank], datatype);
                     /* copy result back into recvbuf */
                     mpi_errno = smpi_datatype_copy(tmp_recvbuf, recvcounts[rank],
                                                datatype, 
@@ -232,18 +232,18 @@ int smpi_coll_tuned_reduce_scatter_mpich_noncomm(void *sendbuf, void *recvbuf, i
            is now our peer's responsibility */
         if (rank > peer) {
             /* higher ranked value so need to call op(received_data, my_data) */
-            smpi_op_apply(op, 
+            if(op!=MPI_OP_NULL) op->apply( 
                    incoming_data + recv_offset*true_extent,
                      outgoing_data + recv_offset*true_extent,
-                     &size, &datatype );
+                     &size, datatype );
             /* buf0_was_inout = buf0_was_inout; */
         }
         else {
             /* lower ranked value so need to call op(my_data, received_data) */
-           smpi_op_apply( op,
+           if(op!=MPI_OP_NULL) op->apply(
                     outgoing_data + recv_offset*true_extent,
                      incoming_data + recv_offset*true_extent,
-                     &size, &datatype);
+                     &size, datatype);
             buf0_was_inout = !buf0_was_inout;
         }
 
@@ -285,7 +285,7 @@ int smpi_coll_tuned_reduce_scatter_mpich_rdb(void *sendbuf, void *recvbuf, int r
     extent =smpi_datatype_get_extent(datatype);
     smpi_datatype_extent(datatype, &true_lb, &true_extent);
     
-    if (smpi_op_is_commute(op)) {
+    if ((op==MPI_OP_NULL) || op->is_commutative()) {
         is_commutative = 1;
     }
 
@@ -454,24 +454,24 @@ int smpi_coll_tuned_reduce_scatter_mpich_rdb(void *sendbuf, void *recvbuf, int r
                 if (received) {
                     if (is_commutative || (dst_tree_root < my_tree_root)) {
                         {
-                                smpi_op_apply(op, 
+                                if(op!=MPI_OP_NULL) op->apply( 
                                tmp_recvbuf, tmp_results, &blklens[0],
-                              &datatype); 
-                               smpi_op_apply(op, 
+                              datatype); 
+                               if(op!=MPI_OP_NULL) op->apply( 
                                ((char *)tmp_recvbuf + dis[1]*extent),
                               ((char *)tmp_results + dis[1]*extent),
-                              &blklens[1], &datatype); 
+                              &blklens[1], datatype); 
                         }
                     }
                     else {
                         {
-                                smpi_op_apply(op,
+                                if(op!=MPI_OP_NULL) op->apply(
                                    tmp_results, tmp_recvbuf, &blklens[0],
-                                   &datatype); 
-                                smpi_op_apply(op,
+                                   datatype); 
+                                if(op!=MPI_OP_NULL) op->apply(
                                    ((char *)tmp_results + dis[1]*extent),
                                    ((char *)tmp_recvbuf + dis[1]*extent),
-                                   &blklens[1], &datatype); 
+                                   &blklens[1], datatype); 
                         }
                         /* copy result back into tmp_results */
                         mpi_errno = smpi_datatype_copy(tmp_recvbuf, 1, recvtype,