]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/mpi/src/broadcast.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / mpi / src / broadcast.cpp
index 9f89cc85cac5650df08473996736241462ff5344..e171b4865e3d142e128825c423edae8eaa6bd855 100644 (file)
@@ -31,19 +31,14 @@ broadcast<const packed_oarchive>(const communicator& comm,
   int tag = environment::collectives_tag();
 
   // Broadcast data to all nodes
-  std::vector<MPI_Request> requests(size * 2);
-  int num_requests = 0;
+  std::vector<request> requests(size-1);
+  std::vector<request>::iterator it = requests.begin();
   for (int dest = 0; dest < size; ++dest) {
     if (dest != root) {
-      // Build up send requests for each child send.
-      num_requests += detail::packed_archive_isend(comm, dest, tag, oa,
-                                                   &requests[num_requests], 2);
+      *it++ = detail::packed_archive_isend(comm, dest, tag, oa);
     }
   }
-
-  // Complete all of the sends
-  BOOST_MPI_CHECK_RESULT(MPI_Waitall,
-                         (num_requests, &requests[0], MPI_STATUSES_IGNORE));
+  wait_all(requests.begin(), requests.end());
 }
 
 template<>
@@ -71,20 +66,14 @@ broadcast<packed_iarchive>(const communicator& comm, packed_iarchive& ia,
     detail::packed_archive_recv(comm, root, tag, ia, status);
   } else {
     // Broadcast data to all nodes
-    std::vector<MPI_Request> requests(size * 2);
-    int num_requests = 0;
+    std::vector<request> requests(size-1);
+    std::vector<request>::iterator it = requests.begin();
     for (int dest = 0; dest < size; ++dest) {
       if (dest != root) {
-        // Build up send requests for each child send.
-        num_requests += detail::packed_archive_isend(comm, dest, tag, ia,
-                                                     &requests[num_requests],
-                                                     2);
+        *it++ = detail::packed_archive_isend(comm, dest, tag, ia);
       }
     }
-
-    // Complete all of the sends
-    BOOST_MPI_CHECK_RESULT(MPI_Waitall,
-                           (num_requests, &requests[0], MPI_STATUSES_IGNORE));
+    wait_all(requests.begin(), requests.end());
   }
 }