39 #include "Tpetra_Details_DistributorActor.hpp"
40 #include "Teuchos_TimeMonitor.hpp"
45 DistributorActor::DistributorActor()
46 : mpiTag_(DEFAULT_MPI_TAG)
48 #ifdef HAVE_TPETRA_DISTRIBUTOR_TIMINGS
50 #endif // HAVE_TPETRA_DISTRIBUTOR_TIMINGS
53 DistributorActor::DistributorActor(
const DistributorActor& otherActor)
54 : mpiTag_(otherActor.mpiTag_),
55 requests_(otherActor.requests_)
57 #ifdef HAVE_TPETRA_DISTRIBUTOR_TIMINGS
59 #endif // HAVE_TPETRA_DISTRIBUTOR_TIMINGS
62 void DistributorActor::doWaits(
const DistributorPlan& plan) {
63 #ifdef HAVE_TPETRA_DISTRIBUTOR_TIMINGS
64 Teuchos::TimeMonitor timeMon (*timer_doWaits_);
65 #endif // HAVE_TPETRA_DISTRIBUTOR_TIMINGS
67 if (requests_.size() > 0) {
68 Teuchos::waitAll(*plan.getComm(), requests_());
76 bool DistributorActor::isReady()
const {
78 for (
auto& request : requests_) {
79 result &= request->isReady();
84 #ifdef HAVE_TPETRA_DISTRIBUTOR_TIMINGS
85 void DistributorActor::makeTimers () {
86 timer_doWaits_ = Teuchos::TimeMonitor::getNewTimer (
87 "Tpetra::Distributor: doWaits");
89 timer_doPosts3KV_ = Teuchos::TimeMonitor::getNewTimer (
90 "Tpetra::Distributor: doPosts(3) KV");
91 timer_doPosts4KV_ = Teuchos::TimeMonitor::getNewTimer (
92 "Tpetra::Distributor: doPosts(4) KV");
94 timer_doPosts3KV_recvs_ = Teuchos::TimeMonitor::getNewTimer (
95 "Tpetra::Distributor: doPosts(3): recvs KV");
96 timer_doPosts4KV_recvs_ = Teuchos::TimeMonitor::getNewTimer (
97 "Tpetra::Distributor: doPosts(4): recvs KV");
99 timer_doPosts3KV_barrier_ = Teuchos::TimeMonitor::getNewTimer (
100 "Tpetra::Distributor: doPosts(3): barrier KV");
101 timer_doPosts4KV_barrier_ = Teuchos::TimeMonitor::getNewTimer (
102 "Tpetra::Distributor: doPosts(4): barrier KV");
104 timer_doPosts3KV_sends_ = Teuchos::TimeMonitor::getNewTimer (
105 "Tpetra::Distributor: doPosts(3): sends KV");
106 timer_doPosts4KV_sends_ = Teuchos::TimeMonitor::getNewTimer (
107 "Tpetra::Distributor: doPosts(4): sends KV");
108 timer_doPosts3KV_sends_slow_ = Teuchos::TimeMonitor::getNewTimer (
109 "Tpetra::Distributor: doPosts(3): sends KV SLOW");
110 timer_doPosts4KV_sends_slow_ = Teuchos::TimeMonitor::getNewTimer (
111 "Tpetra::Distributor: doPosts(4): sends KV SLOW");
112 timer_doPosts3KV_sends_fast_ = Teuchos::TimeMonitor::getNewTimer (
113 "Tpetra::Distributor: doPosts(3): sends KV FAST");
114 timer_doPosts4KV_sends_fast_ = Teuchos::TimeMonitor::getNewTimer (
115 "Tpetra::Distributor: doPosts(4): sends KV FAST");
117 #endif // HAVE_TPETRA_DISTRIBUTOR_TIMINGS