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.
Smart reference counting pointer class for automatic garbage collection.
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