Teuchos Package Browser (Single Doxygen Collection) Version of the Day
Loading...
Searching...
No Matches
stacked_timer4.cpp
Go to the documentation of this file.
1// @HEADER
2// @HEADER
3
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
23TEUCHOS_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.
69int main( int argc, char* argv[] )
70{
71 // Note that the dtor for GlobalMPISession will call
72 // Kokkos::finalize().
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));
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();
87#endif
88 return return_val;
89}
A MPI utilities class, providing methods for initializing, finalizing, and querying the global MPI se...
#define TEST_ASSERT(v1)
Assert the given statement is true.
Common capabilities for collecting and reporting performance data collectively across MPI processes.
Scope guard for Teuchos::Time, with MPI collective timer reporting.
Unit testing support.
#define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME)
Macro for defining a (non-templated) unit test.
Unit testing support.
the basic timer used elsewhere, uses MPI_Wtime for time
static Teuchos::RCP< const Comm< OrdinalType > > getComm()
Return the default global communicator.
Initialize, finalize, and query the global MPI session.
Concrete serial communicator subclass.
This class allows one to push and pop timers on and off a stack.
void start(const std::string name, const bool push_kokkos_profiling_region=true)
void stop(const std::string &name, const bool pop_kokkos_profiling_region=true)
const BaseTimer * findBaseTimer(const std::string &name) const
void report(std::ostream &os)
static int runUnitTestsFromMain(int argc, char *argv[])
Run the unit tests from main() passing in (argc, argv).
static void setGloballyReduceTestResult(const bool globallyReduceUnitTestResult)
Set if the unit tests should reduce pass/fail across processes.
std::ostream subclass that performs the magic of indenting data sent to an std::ostream object among ...
basic_FancyOStream & setOutputToRootOnly(const int rootRank)
Set the stream to print only on the (MPI) process with the given rank.
int main()
Definition evilMain.cpp:75