https://mooseframework.inl.gov
Loading...
Searching...
No Matches
PerfGraphInterface.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "Moose.h"
13#include "PerfGuard.h"
14
15#ifndef MOOSE_NO_PERF_GRAPH
16#define TIME_SECTION1(id) \
17 mooseAssert(!Threads::in_threads, "PerfGraph timing cannot be used within threaded sections"); \
18 PerfGuard time_guard(this->_pg_moose_app.perfGraph(), id);
19#define CHECK_TIME_SECTION(id, section_name) \
20 mooseAssert(moose::internal::getPerfGraphRegistry().sectionInfo(id)._name == \
21 timedSectionName(section_name), \
22 "PerfGraph section '" + timedSectionName(section_name) + \
23 "' is already registered with name '" + \
24 moose::internal::getPerfGraphRegistry().sectionInfo(id)._name + "'");
25#else
26#define TIME_SECTION1(id)
27#define CHECK_TIME_SECTION(id, section_name)
28#endif
29
30#define TIME_SECTION2(section_name, level) \
31 const PerfID __perf_id = this->registerTimedSection(section_name, level); \
32 CHECK_TIME_SECTION(__perf_id, section_name); \
33 TIME_SECTION1(__perf_id);
34
35#define TIME_SECTION3(section_name, level, live_message) \
36 const PerfID __perf_id = this->registerTimedSection(section_name, level, live_message); \
37 CHECK_TIME_SECTION(__perf_id, section_name); \
38 TIME_SECTION1(__perf_id);
39
40#define TIME_SECTION4(section_name, level, live_message, print_dots) \
41 const PerfID __perf_id = \
42 this->registerTimedSection(section_name, level, live_message, print_dots); \
43 CHECK_TIME_SECTION(__perf_id, section_name); \
44 TIME_SECTION1(__perf_id);
45
46// Overloading solution from https://stackoverflow.com/a/11763277
47#define GET_MACRO(_1, _2, _3, _4, NAME, ...) NAME
48#define TIME_SECTION(...) \
49 GET_MACRO(__VA_ARGS__, TIME_SECTION4, TIME_SECTION3, TIME_SECTION2, TIME_SECTION1, )(__VA_ARGS__)
50
51class MooseApp;
52class InputParameters;
54class MooseObject;
55
62{
63public:
65
69 PerfGraphInterface(const MooseObject * moose_object);
70
74 PerfGraphInterface(const MooseObject * moose_object, const std::string prefix);
75
79 PerfGraphInterface(PerfGraph & perf_graph, const std::string prefix = "");
80
85 PerfGraphInterface(MooseApp & moose_app, const std::string prefix = "");
86
87#ifdef MOOSE_KOKKOS_ENABLED
92#endif
93
94 virtual ~PerfGraphInterface() = default;
95
100
102
103protected:
111 PerfID registerTimedSection(const std::string & section_name, const unsigned int level) const;
112
122 PerfID registerTimedSection(const std::string & section_name,
123 const unsigned int level,
124 const std::string & live_message,
125 const bool print_dots = true) const;
126
132 std::string timedSectionName(const std::string & section_name) const;
133
136
138 const std::string _prefix;
139};
unsigned int PerfID
Definition MooseTypes.h:240
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
Shared storage and allocation logic for linear finite-volume cell gradients for variables in the syst...
Base class for MOOSE-based applications.
Definition MooseApp.h:110
Every object that can be built by the factory should be derived from this class.
Definition MooseObject.h:31
Interface for objects interacting with the PerfGraph.
PerfID registerTimedSection(const std::string &section_name, const unsigned int level) const
Call to register a named section for timing.
std::string timedSectionName(const std::string &section_name) const
virtual ~PerfGraphInterface()=default
const std::string _prefix
A prefix to use for all sections.
PerfGraph & perfGraph()
Get the PerfGraph.
static InputParameters validParams()
MooseApp & _pg_moose_app
The MooseApp that owns the PerfGraph.
The PerfGraph will hold the master list of all registered performance segments and the head PerfNode.
Definition PerfGraph.h:44