Teuchos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
stacked_timer4.cpp
Go to the documentation of this file.
1 // @HEADER
2 // @HEADER
3 
10 #include "Teuchos_DefaultComm.hpp"
11 #include <sstream>
12 #include <thread> // std::this_thread::sleep_for;
13 #include <tuple>
14 #include <regex>
15 #include <iterator>
16 #include <limits>
17 
18 #if defined(HAVE_TEUCHOS_KOKKOS_PROFILING) && defined(HAVE_TEUCHOSCORE_KOKKOSCORE)
19 #include "Kokkos_Core.hpp"
20 #endif
21 
22 
23 TEUCHOS_UNIT_TEST(StackedTimer, minmax_hist)
24 {
25 
26  Teuchos::StackedTimer timer("L0");
27  timer.stopBaseTimer();
28 
30  if (comm->getSize() != 4)
31  return;
32  const int myRank = Teuchos::rank(*comm);
33 
34  if ((myRank == 1) || (myRank == 2)) {
35  timer.start("T0");
36  timer.stop("T0");
37  const_cast<Teuchos::BaseTimer*>(timer.findBaseTimer("L0@T0"))->setAccumulatedTime(Teuchos::as<double>(myRank));
38  } else {
39  timer.start("T1");
40  timer.stop("T1");
41  const_cast<Teuchos::BaseTimer*>(timer.findBaseTimer("L0@T1"))->setAccumulatedTime(Teuchos::as<double>(myRank));
42  }
43 
45 
46  out << "\n### Printing default report ###" << std::endl;
47  options.output_minmax=true;
48  options.output_proc_minmax=true;
49  options.output_histogram=true;
50  options.num_histogram=2;
51  options.output_fraction=false;
52  timer.report(out, comm, options);
53  {
54  std::ostringstream os;
55  timer.report(os, comm, options);
56  if (myRank == 0) {
57  TEST_ASSERT(os.str().find("min=1, max=2, proc min=1, proc max=2") != std::string::npos);
58  TEST_ASSERT(os.str().find("<1, 1>") != std::string::npos);
59  TEST_ASSERT(os.str().find("min=0, max=3, proc min=0, proc max=3") != std::string::npos);
60  }
61  }
62 }
63 
64 // Use our own main to initialize kokkos before calling
65 // runUnitTestsFromMain(). The kokkos space_time_stack profiler seg
66 // faults due to inconsistent push/pop of timers in the teuchos unit
67 // test startup code. By calling initialize here we can use the
68 // space_time_stack profiler with this unit test.
69 int main( int argc, char* argv[] )
70 {
71  // Note that the dtor for GlobalMPISession will call
72  // Kokkos::finalize_all().
73  Teuchos::GlobalMPISession mpiSession(&argc, &argv);
74 #if defined(HAVE_TEUCHOS_KOKKOS_PROFILING) && defined(HAVE_TEUCHOSCORE_KOKKOSCORE)
75  Kokkos::initialize(argc,argv);
76 #endif
77  {
78  Teuchos::FancyOStream out(Teuchos::rcpFromRef(std::cout));
79  out.setOutputToRootOnly(0);
80  }
82 
83  auto return_val = Teuchos::UnitTestRepository::runUnitTestsFromMain(argc, argv);
84 #if defined(HAVE_TEUCHOS_KOKKOS_PROFILING) && defined(HAVE_TEUCHOSCORE_KOKKOSCORE)
85  if (Kokkos::is_initialized())
86  Kokkos::finalize_all();
87 #endif
88  return return_val;
89 }
#define TEST_ASSERT(v1)
Assert the given statement is true.
void stop(const std::string &name, const bool pop_kokkos_profiling_region=true)
#define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME)
Macro for defining a (non-templated) unit test.
static Teuchos::RCP< const Comm< OrdinalType > > getComm()
Return the default global communicator.
Initialize, finalize, and query the global MPI session.
Unit testing support.
static int runUnitTestsFromMain(int argc, char *argv[])
Run the unit tests from main() passing in (argc, argv).
void start(const std::string name, const bool push_kokkos_profiling_region=true)
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
the basic timer used elsewhere, uses MPI_Wtime for time
Unit testing support.
static void setGloballyReduceTestResult(const bool globallyReduceUnitTestResult)
Set if the unit tests should reduce pass/fail across processes.
basic_FancyOStream & setOutputToRootOnly(const int rootRank)
Set the stream to print only on the (MPI) process with the given rank.
const BaseTimer * findBaseTimer(const std::string &name) const
int main(int argc, char *argv[])
A MPI utilities class, providing methods for initializing, finalizing, and querying the global MPI se...
void report(std::ostream &os)
Scope guard for Teuchos::Time, with MPI collective timer reporting.
Smart reference counting pointer class for automatic garbage collection.
This class allows one to push and pop timers on and off a stack.
Common capabilities for collecting and reporting performance data collectively across MPI processes...