File: petsclogtypes.h.html

package info (click to toggle)
petsc 3.23.1%2Bdfsg1-1exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 515,576 kB
  • sloc: ansic: 751,607; cpp: 51,542; python: 38,598; f90: 17,352; javascript: 3,493; makefile: 3,157; sh: 1,502; xml: 619; objc: 445; java: 13; csh: 1
file content (240 lines) | stat: -rw-r--r-- 29,391 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
<center><a href="https://gitlab.com/petsc/petsc/-/blob/966382dc56242773704ef5f5cee7aa2db3ebc577/include/petsclogtypes.h">Actual source code: petsclogtypes.h</a></center><br>

<html>
<head>
<title></title>
<meta name="generator" content="c2html 0.9.6">
<meta name="date" content="2025-04-30T18:14:50+00:00">
</head>

<body bgcolor="#FFFFFF">
<pre width=80>
<a name="line1">  1: </a><font color="#A020F0">#pragma once</font>
<a name="line2">  2: </a>#include <A href="../include/petscsystypes.h.html">&lt;petscsystypes.h&gt;</A>

<a name="line4">  4: </a><font color="#B22222">/* MANSEC = Sys */</font>
<a name="line5">  5: </a><font color="#B22222">/* SUBMANSEC = Log */</font>

<a name="line7">  7: </a><font color="#B22222">/*S</font>
<a name="line8">  8: </a><font color="#B22222">  <a href="../manualpages/Log/PetscEventPerfInfo.html">PetscEventPerfInfo</a> - statistics on how many times the event is used, how much time it takes, etc.</font>

<a name="line10"> 10: </a><font color="#B22222">  Level: advanced</font>

<a name="line12"> 12: </a><font color="#B22222">  Note:</font>
<a name="line13"> 13: </a><font color="#B22222">  This is the data structure that describes profiling statsitics collected for an event from</font>
<a name="line14"> 14: </a><font color="#B22222">  the default log handler (`<a href="../manualpages/Log/PetscLogDefaultBegin.html">PetscLogDefaultBegin</a>()`) using `<a href="../manualpages/Log/PetscLogEventGetPerfInfo.html">PetscLogEventGetPerfInfo</a>()`.</font>

<a name="line16"> 16: </a><font color="#B22222">.seealso(): [](ch_profiling)</font>
<a name="line17"> 17: </a><font color="#B22222">S*/</font>
<a name="line18"> 18: </a><font color="#4169E1">typedef</font> <font color="#4169E1">struct</font> {
<a name="line19"> 19: </a>  int            id;                  <font color="#B22222">/* The integer identifying this event / stage */</font>
<a name="line20"> 20: </a>  <a href="../manualpages/Sys/PetscBool.html">PetscBool</a>      active;              <font color="#B22222">/* Deprecated */</font>
<a name="line21"> 21: </a>  <a href="../manualpages/Sys/PetscBool.html">PetscBool</a>      visible;             <font color="#B22222">/* The flag to print info in summary */</font>
<a name="line22"> 22: </a>  int            depth;               <font color="#B22222">/* The nesting depth of the event call */</font>
<a name="line23"> 23: </a>  int            count;               <font color="#B22222">/* The number of times this event was executed */</font>
<a name="line24"> 24: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> flops;               <font color="#B22222">/* The flops used in this event */</font>
<a name="line25"> 25: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> flops2;              <font color="#B22222">/* The square of flops used in this event */</font>
<a name="line26"> 26: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> flopsTmp;            <font color="#B22222">/* The accumulator for flops used in this event */</font>
<a name="line27"> 27: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> time;                <font color="#B22222">/* The time taken for this event */</font>
<a name="line28"> 28: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> time2;               <font color="#B22222">/* The square of time taken for this event */</font>
<a name="line29"> 29: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> timeTmp;             <font color="#B22222">/* The accumulator for time taken for this event */</font>
<a name="line30"> 30: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> syncTime;            <font color="#B22222">/* The synchronization barrier time */</font>
<a name="line31"> 31: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> dof[8];              <font color="#B22222">/* The number of degrees of freedom associated with this event */</font>
<a name="line32"> 32: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> errors[8];           <font color="#B22222">/* The errors (user-defined) associated with this event */</font>
<a name="line33"> 33: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> numMessages;         <font color="#B22222">/* The number of messages in this event */</font>
<a name="line34"> 34: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> messageLength;       <font color="#B22222">/* The total message lengths in this event */</font>
<a name="line35"> 35: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> numReductions;       <font color="#B22222">/* The number of reductions in this event */</font>
<a name="line36"> 36: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> memIncrease;         <font color="#B22222">/* How much the resident memory has increased in this event */</font>
<a name="line37"> 37: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> mallocIncrease;      <font color="#B22222">/* How much the maximum malloced space has increased in this event */</font>
<a name="line38"> 38: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> mallocSpace;         <font color="#B22222">/* How much the space was malloced and kept during this event */</font>
<a name="line39"> 39: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> mallocIncreaseEvent; <font color="#B22222">/* Maximum of the high water mark with in event minus memory available at the end of the event */</font>
<a name="line40"> 40: </a><font color="#A020F0">#if defined(PETSC_HAVE_DEVICE)</font>
<a name="line41"> 41: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> CpuToGpuCount; <font color="#B22222">/* The total number of CPU to GPU copies */</font>
<a name="line42"> 42: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> GpuToCpuCount; <font color="#B22222">/* The total number of GPU to CPU copies */</font>
<a name="line43"> 43: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> CpuToGpuSize;  <font color="#B22222">/* The total size of CPU to GPU copies */</font>
<a name="line44"> 44: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> GpuToCpuSize;  <font color="#B22222">/* The total size of GPU to CPU copies */</font>
<a name="line45"> 45: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> GpuFlops;      <font color="#B22222">/* The flops done on a GPU in this event */</font>
<a name="line46"> 46: </a>  <a href="../manualpages/Sys/PetscLogDouble.html">PetscLogDouble</a> GpuTime;       <font color="#B22222">/* The time spent on a GPU in this event */</font>
<a name="line47"> 47: </a><font color="#A020F0">#endif</font>
<a name="line48"> 48: </a>} <a href="../manualpages/Log/PetscEventPerfInfo.html">PetscEventPerfInfo</a>;

<a name="line50"> 50: </a><font color="#4169E1">typedef struct _n_PetscIntStack *PetscIntStack;</font>

<a name="line52"> 52: </a><font color="#B22222">/*MC</font>
<a name="line53"> 53: </a><font color="#B22222">    <a href="../manualpages/Log/PetscLogEvent.html">PetscLogEvent</a> - id used to identify PETSc or user events which timed portions (blocks of executable)</font>
<a name="line54"> 54: </a><font color="#B22222">    code.</font>

<a name="line56"> 56: </a><font color="#B22222">    Level: intermediate</font>

<a name="line58"> 58: </a><font color="#B22222">.seealso: [](ch_profiling), `<a href="../manualpages/Log/PetscLogEventRegister.html">PetscLogEventRegister</a>()`, `<a href="../manualpages/Log/PetscLogEventBegin.html">PetscLogEventBegin</a>()`, `<a href="../manualpages/Log/PetscLogEventEnd.html">PetscLogEventEnd</a>()`, `<a href="../manualpages/Log/PetscLogStage.html">PetscLogStage</a>`</font>
<a name="line59"> 59: </a><font color="#B22222">M*/</font>
<a name="line60"> 60: </a><font color="#4169E1">typedef int <a href="../manualpages/Log/PetscLogEvent.html">PetscLogEvent</a>;</font>

<a name="line62"> 62: </a><font color="#B22222">/*MC</font>
<a name="line63"> 63: </a><font color="#B22222">    <a href="../manualpages/Log/PetscLogStage.html">PetscLogStage</a> - id used to identify user stages (phases, sections) of runs - for logging</font>

<a name="line65"> 65: </a><font color="#B22222">    Level: intermediate</font>

<a name="line67"> 67: </a><font color="#B22222">.seealso: [](ch_profiling), `<a href="../manualpages/Log/PetscLogStageRegister.html">PetscLogStageRegister</a>()`, `<a href="../manualpages/Log/PetscLogStagePush.html">PetscLogStagePush</a>()`, `<a href="../manualpages/Log/PetscLogStagePop.html">PetscLogStagePop</a>()`, `<a href="../manualpages/Log/PetscLogEvent.html">PetscLogEvent</a>`</font>
<a name="line68"> 68: </a><font color="#B22222">M*/</font>
<a name="line69"> 69: </a><font color="#4169E1">typedef int <a href="../manualpages/Log/PetscLogStage.html">PetscLogStage</a>;</font>

<a name="line71"> 71: </a><font color="#B22222">/*MC</font>
<a name="line72"> 72: </a><font color="#B22222">    <a href="../manualpages/Log/PetscLogClass.html">PetscLogClass</a> - id used to identify classes for logging purposes only.  It</font>
<a name="line73"> 73: </a><font color="#B22222">    is not equal to its `<a href="../manualpages/Sys/PetscClassId.html">PetscClassId</a>`, which is the identifier used for other</font>
<a name="line74"> 74: </a><font color="#B22222">    purposes.</font>

<a name="line76"> 76: </a><font color="#B22222">    Level: developer</font>

<a name="line78"> 78: </a><font color="#B22222">.seealso: [](ch_profiling), `<a href="../manualpages/Log/PetscLogStateClassRegister.html">PetscLogStateClassRegister</a>()`</font>
<a name="line79"> 79: </a><font color="#B22222">M*/</font>
<a name="line80"> 80: </a><font color="#4169E1">typedef int <a href="../manualpages/Log/PetscLogClass.html">PetscLogClass</a>;</font>

<a name="line82"> 82: </a><font color="#B22222">/*S</font>
<a name="line83"> 83: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandler.html">PetscLogHandler</a> - Interface for performance logging.  A log handler receives a `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>` that has</font>
<a name="line84"> 84: </a><font color="#B22222">  information about the events (`<a href="../manualpages/Log/PetscLogEvent.html">PetscLogEvent</a>`) and stages (`<a href="../manualpages/Log/PetscLogStage.html">PetscLogStage</a>`) in the logging environment.</font>
<a name="line85"> 85: </a><font color="#B22222">  When a handler is connected to PETSc's global logging stream (`<a href="../manualpages/Log/PetscLogHandlerStart.html">PetscLogHandlerStart</a>()`), it receives</font>
<a name="line86"> 86: </a><font color="#B22222">  updates about events (`<a href="../manualpages/Log/PetscLogEventBegin.html">PetscLogEventBegin</a>()` / `<a href="../manualpages/Log/PetscLogEventEnd.html">PetscLogEventEnd</a>()`), stages (`<a href="../manualpages/Log/PetscLogStagePush.html">PetscLogStagePush</a>()` /</font>
<a name="line87"> 87: </a><font color="#B22222">  `<a href="../manualpages/Log/PetscLogStagePop.html">PetscLogStagePop</a>()`), and objects (`<a href="../manualpages/Log/PetscLogObjectCreate.html">PetscLogObjectCreate</a>()` / `<a href="../manualpages/Log/PetscLogObjectDestroy.html">PetscLogObjectDestroy</a>()`).  After</font>
<a name="line88"> 88: </a><font color="#B22222">  collecting information the logger can summarize its data with `<a href="../manualpages/Log/PetscLogHandlerView.html">PetscLogHandlerView</a>()`.</font>

<a name="line90"> 90: </a><font color="#B22222">  Example Usage:</font>
<a name="line91"> 91: </a><font color="#B22222">.vb</font>
<a name="line92"> 92: </a>#include <A href="../include/petscsys.h.html">&lt;petscsys.h&gt;</A>

<a name="line94"> 94: </a><font color="#B22222">int main() {</font>
<a name="line95"> 95: </a><font color="#B22222">  UserCtx             ctx;</font>
<a name="line96"> 96: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandlerType.html">PetscLogHandlerType</a> handler_type;</font>

<a name="line98"> 98: </a><font color="#B22222">  <a href="../manualpages/Sys/PetscInitialize.html">PetscInitialize</a>(...);</font>
<a name="line99"> 99: </a><font color="#B22222">  // ... fill in ctx</font>
<a name="line100">100: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandlerCreate.html">PetscLogHandlerCreate</a>(<a href="../manualpages/Sys/PETSC_COMM_WORLD.html">PETSC_COMM_WORLD</a>, &amp;handler);</font>
<a name="line101">101: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandlerSetType.html">PetscLogHandlerSetType</a>(handler, handler_type);</font>
<a name="line102">102: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandlerStart.html">PetscLogHandlerStart</a>(handler); // connect your handler to global logging state</font>
<a name="line103">103: </a><font color="#B22222">  // ... run code to be profiled</font>
<a name="line104">104: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandlerStop.html">PetscLogHandlerStop</a>(handler); // disconnect your handler from the global logging state</font>
<a name="line105">105: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandlerView.html">PetscLogHandlerView</a>(handler, <a href="../manualpages/Viewer/PETSC_VIEWER_STDOUT_WORLD.html">PETSC_VIEWER_STDOUT_WORLD</a>); // view the results</font>
<a name="line106">106: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandlerDestroy.html">PetscLogHandlerDestroy</a>(&amp;handler);</font>
<a name="line107">107: </a><font color="#B22222">  <a href="../manualpages/Sys/PetscFinalize.html">PetscFinalize</a>();</font>
<a name="line108">108: </a><font color="#B22222">}</font>
<a name="line109">109: </a><font color="#B22222">.ve</font>

<a name="line111">111: </a><font color="#B22222">  Level: developer</font>

<a name="line113">113: </a><font color="#B22222">.seealso: [](ch_profiling),</font>
<a name="line114">114: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerCreate.html">PetscLogHandlerCreate</a>()`,</font>
<a name="line115">115: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerStart.html">PetscLogHandlerStart</a>()`, `<a href="../manualpages/Log/PetscLogHandlerStop.html">PetscLogHandlerStop</a>()`,</font>
<a name="line116">116: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerSetType.html">PetscLogHandlerSetType</a>()`, `<a href="../manualpages/Log/PetscLogHandlerGetType.html">PetscLogHandlerGetType</a>()`,</font>
<a name="line117">117: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerSetState.html">PetscLogHandlerSetState</a>()`, `<a href="../manualpages/Log/PetscLogHandlerGetState.html">PetscLogHandlerGetState</a>()`,</font>
<a name="line118">118: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerEventBegin.html">PetscLogHandlerEventBegin</a>()`, `<a href="../manualpages/Log/PetscLogHandlerEventEnd.html">PetscLogHandlerEventEnd</a>()`,</font>
<a name="line119">119: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerEventSync.html">PetscLogHandlerEventSync</a>()`,</font>
<a name="line120">120: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerObjectCreate.html">PetscLogHandlerObjectCreate</a>()`, `<a href="../manualpages/Log/PetscLogHandlerObjectDestroy.html">PetscLogHandlerObjectDestroy</a>()`,</font>
<a name="line121">121: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerStagePush.html">PetscLogHandlerStagePush</a>()`, `<a href="../manualpages/Log/PetscLogHandlerStagePop.html">PetscLogHandlerStagePop</a>()`,</font>
<a name="line122">122: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerView.html">PetscLogHandlerView</a>()`,</font>
<a name="line123">123: </a><font color="#B22222">          `<a href="../manualpages/Log/PetscLogHandlerDestroy.html">PetscLogHandlerDestroy</a>()`,</font>
<a name="line124">124: </a><font color="#B22222">S*/</font>
<a name="line125">125: </a><font color="#4169E1">typedef struct _p_PetscLogHandler *<a href="../manualpages/Log/PetscLogHandler.html">PetscLogHandler</a>;</font>

<a name="line127">127: </a><font color="#B22222">/*J</font>
<a name="line128">128: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogHandlerType.html">PetscLogHandlerType</a> - String with the name of a `<a href="../manualpages/Log/PetscLogHandler.html">PetscLogHandler</a>` type</font>

<a name="line130">130: </a><font color="#B22222">  Level: Developer</font>

<a name="line132">132: </a><font color="#B22222">  Note:</font>
<a name="line133">133: </a><font color="#B22222">  Implementations included with PETSc include\:</font>
<a name="line134">134: </a><font color="#B22222">+ `<a href="../manualpages/Log/PETSCLOGHANDLERDEFAULT.html">PETSCLOGHANDLERDEFAULT</a>` (`<a href="../manualpages/Log/PetscLogDefaultBegin.html">PetscLogDefaultBegin</a>()`)        - formats data for PETSc's default summary (`<a href="../manualpages/Log/PetscLogView.html">PetscLogView</a>()`) and data-dump (`<a href="../manualpages/Log/PetscLogDump.html">PetscLogDump</a>()`) formats.</font>
<a name="line135">135: </a><font color="#B22222">. `<a href="../manualpages/Log/PETSCLOGHANDLERNESTED.html">PETSCLOGHANDLERNESTED</a>` (`<a href="../manualpages/Log/PetscLogNestedBegin.html">PetscLogNestedBegin</a>()`)          - formats data for XML or flamegraph output</font>
<a name="line136">136: </a><font color="#B22222">. `<a href="../manualpages/Log/PETSCLOGHANDLERTRACE.html">PETSCLOGHANDLERTRACE</a>` (`<a href="../manualpages/Log/PetscLogTraceBegin.html">PetscLogTraceBegin</a>()`)            - traces profiling events in an output stream</font>
<a name="line137">137: </a><font color="#B22222">. `<a href="../manualpages/Log/PETSCLOGHANDLERMPE.html">PETSCLOGHANDLERMPE</a>` (`<a href="../manualpages/Log/PetscLogMPEBegin.html">PetscLogMPEBegin</a>()`)                - outputs parallel performance visualization using MPE</font>
<a name="line138">138: </a><font color="#B22222">. `<a href="../manualpages/Log/PETSCLOGHANDLERPERFSTUBS.html">PETSCLOGHANDLERPERFSTUBS</a>` (`<a href="../manualpages/Log/PetscLogPerfstubsBegin.html">PetscLogPerfstubsBegin</a>()`)    - outputs instrumentation data for PerfStubs/TAU</font>
<a name="line139">139: </a><font color="#B22222">. `<a href="../manualpages/Log/PETSCLOGHANDLERLEGACY.html">PETSCLOGHANDLERLEGACY</a>` (`<a href="../manualpages/Log/PetscLogLegacyCallbacksBegin.html">PetscLogLegacyCallbacksBegin</a>()`) - adapts legacy callbacks to the `<a href="../manualpages/Log/PetscLogHandler.html">PetscLogHandler</a>` interface</font>
<a name="line140">140: </a><font color="#B22222">- `<a href="../manualpages/Log/PETSCLOGHANDLERNVTX.html">PETSCLOGHANDLERNVTX</a>`                                      - creates NVTX ranges for events that are visible in Nsight</font>

<a name="line142">142: </a><font color="#B22222">.seealso: [](ch_profiling), `<a href="../manualpages/Log/PetscLogHandler.html">PetscLogHandler</a>`, `<a href="../manualpages/Log/PetscLogHandlerSetType.html">PetscLogHandlerSetType</a>()`, `<a href="../manualpages/Log/PetscLogHandlerGetType.html">PetscLogHandlerGetType</a>()`</font>
<a name="line143">143: </a><font color="#B22222">J*/</font>
<a name="line144">144: </a><font color="#4169E1">typedef const char *<a href="../manualpages/Log/PetscLogHandlerType.html">PetscLogHandlerType</a>;</font>

<a name="line146">146: </a><strong><font color="#228B22">#define <a href="../manualpages/Log/PETSCLOGHANDLERDEFAULT.html">PETSCLOGHANDLERDEFAULT</a>   </font><font color="#666666">"default"</font><font color="#228B22"></font></strong>
<a name="line147">147: </a><strong><font color="#228B22">#define <a href="../manualpages/Log/PETSCLOGHANDLERNESTED.html">PETSCLOGHANDLERNESTED</a>    </font><font color="#666666">"nested"</font><font color="#228B22"></font></strong>
<a name="line148">148: </a><strong><font color="#228B22">#define <a href="../manualpages/Log/PETSCLOGHANDLERTRACE.html">PETSCLOGHANDLERTRACE</a>     </font><font color="#666666">"trace"</font><font color="#228B22"></font></strong>
<a name="line149">149: </a><strong><font color="#228B22">#define <a href="../manualpages/Log/PETSCLOGHANDLERMPE.html">PETSCLOGHANDLERMPE</a>       </font><font color="#666666">"mpe"</font><font color="#228B22"></font></strong>
<a name="line150">150: </a><strong><font color="#228B22">#define <a href="../manualpages/Log/PETSCLOGHANDLERPERFSTUBS.html">PETSCLOGHANDLERPERFSTUBS</a> </font><font color="#666666">"perfstubs"</font><font color="#228B22"></font></strong>
<a name="line151">151: </a><strong><font color="#228B22">#define <a href="../manualpages/Log/PETSCLOGHANDLERLEGACY.html">PETSCLOGHANDLERLEGACY</a>    </font><font color="#666666">"legacy"</font><font color="#228B22"></font></strong>
<a name="line152">152: </a><strong><font color="#228B22">#define <a href="../manualpages/Log/PETSCLOGHANDLERNVTX.html">PETSCLOGHANDLERNVTX</a>      </font><font color="#666666">"nvtx"</font><font color="#228B22"></font></strong>

<a name="line154">154: </a><font color="#4169E1">typedef struct _n_PetscLogRegistry *PetscLogRegistry;</font>

<a name="line156">156: </a><font color="#B22222">/*S</font>
<a name="line157">157: </a><font color="#B22222">   <a href="../manualpages/Log/PetscLogState.html">PetscLogState</a> - Interface for the shared state information used by `<a href="../manualpages/Log/PetscLogHandler.html">PetscLogHandler</a>`s.</font>

<a name="line159">159: </a><font color="#B22222">   Most users will not need to reference a `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>` directly: global logging routines</font>
<a name="line160">160: </a><font color="#B22222">   like `<a href="../manualpages/Log/PetscLogEventRegister.html">PetscLogEventRegister</a>()`  and `<a href="../manualpages/Log/PetscLogStagePush.html">PetscLogStagePush</a>()` implicitly manipulate PETSc's global</font>
<a name="line161">161: </a><font color="#B22222">   logging state, `<a href="../manualpages/Log/PetscLogGetState.html">PetscLogGetState</a>()`.</font>

<a name="line163">163: </a><font color="#B22222">   Level: developer</font>

<a name="line165">165: </a><font color="#B22222">   Notes:</font>
<a name="line166">166: </a><font color="#B22222">   `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>` holds a registry of events (`<a href="../manualpages/Log/PetscLogStateEventRegister.html">PetscLogStateEventRegister</a>()`), stages</font>
<a name="line167">167: </a><font color="#B22222">   (`<a href="../manualpages/Log/PetscLogStateStageRegister.html">PetscLogStateStageRegister</a>()`), and classes (`<a href="../manualpages/Log/PetscLogStateClassRegister.html">PetscLogStateClassRegister</a>()`).</font>
<a name="line168">168: </a><font color="#B22222">   It keeps track of when the user has activated events (`<a href="../manualpages/Log/PetscLogStateEventSetActive.html">PetscLogStateEventSetActive</a>()`) and</font>
<a name="line169">169: </a><font color="#B22222">   stages (`<a href="../manualpages/Log/PetscLogStateStageSetActive.html">PetscLogStateStageSetActive</a>()`).  It also keeps a stack of running stages</font>
<a name="line170">170: </a><font color="#B22222">   (`<a href="../manualpages/Log/PetscLogStateStagePush.html">PetscLogStateStagePush</a>()`, `<a href="../manualpages/Log/PetscLogStateStagePop.html">PetscLogStateStagePop</a>()`).</font>

<a name="line172">172: </a><font color="#B22222">   The struct defining `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>` is in a public header so that `<a href="../manualpages/Log/PetscLogEventBegin.html">PetscLogEventBegin</a>()`,</font>
<a name="line173">173: </a><font color="#B22222">   `<a href="../manualpages/Log/PetscLogEventEnd.html">PetscLogEventEnd</a>()`, `<a href="../manualpages/Log/PetscLogObjectCreate.html">PetscLogObjectCreate</a>()`, and `<a href="../manualpages/Log/PetscLogObjectDestroy.html">PetscLogObjectDestroy</a>()` can be defined</font>
<a name="line174">174: </a><font color="#B22222">   as macros rather than function calls, but users are discouraged from directly accessing</font>
<a name="line175">175: </a><font color="#B22222">   the struct's fields, which are subject to change.</font>

<a name="line177">177: </a><font color="#B22222">.seealso: [](ch_profiling), `<a href="../manualpages/Log/PetscLogStateCreate.html">PetscLogStateCreate</a>()`, `<a href="../manualpages/Log/PetscLogStateDestroy.html">PetscLogStateDestroy</a>()`</font>
<a name="line178">178: </a><font color="#B22222">S*/</font>
<a name="line179">179: </a><font color="#4169E1">typedef struct _n_PetscLogState *<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>;</font>
<a name="line180">180: </a><font color="#4169E1"><a name="_n_PetscLogState"></a>struct _n_PetscLogState </font>{
<a name="line181">181: </a>  PetscLogRegistry registry;
<a name="line182">182: </a>  <a href="../manualpages/Sys/PetscBT.html">PetscBT</a>          active;
<a name="line183">183: </a>  PetscIntStack    stage_stack;
<a name="line184">184: </a>  int              current_stage;
<a name="line185">185: </a>  int              bt_num_stages;
<a name="line186">186: </a>  int              bt_num_events;
<a name="line187">187: </a>  int              refct;
<a name="line188">188: </a>};

<a name="line190">190: </a><font color="#B22222">/*S</font>
<a name="line191">191: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogEventInfo.html">PetscLogEventInfo</a> - A registry entry about a logging event for `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>`.</font>

<a name="line193">193: </a><font color="#B22222">  Level: developer</font>

<a name="line195">195: </a><font color="#B22222">.seealso: [](ch_profiling), `<a href="../manualpages/Log/PetscLogEvent.html">PetscLogEvent</a>`, `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>`, `<a href="../manualpages/Log/PetscLogStateEventGetInfo.html">PetscLogStateEventGetInfo</a>()`</font>
<a name="line196">196: </a><font color="#B22222">S*/</font>
<a name="line197">197: </a><font color="#4169E1">typedef</font> <font color="#4169E1">struct</font> {
<a name="line198">198: </a>  char        *name;       <font color="#B22222">/* The name of this event */</font>
<a name="line199">199: </a>  <a href="../manualpages/Sys/PetscClassId.html">PetscClassId</a> classid;    <font color="#B22222">/* The class the event is associated with */</font>
<a name="line200">200: </a>  <a href="../manualpages/Sys/PetscBool.html">PetscBool</a>    collective; <font color="#B22222">/* Flag this event as collective */</font>
<a name="line201">201: </a>} <a href="../manualpages/Log/PetscLogEventInfo.html">PetscLogEventInfo</a>;

<a name="line203">203: </a><font color="#B22222">/*S</font>
<a name="line204">204: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogClassInfo.html">PetscLogClassInfo</a> - A registry entry about a class for `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>`.</font>

<a name="line206">206: </a><font color="#B22222">  Level: developer</font>

<a name="line208">208: </a><font color="#B22222">.seealso: [](ch_profiling), `<a href="../manualpages/Log/PetscLogClass.html">PetscLogClass</a>`, `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>`, `<a href="../manualpages/Log/PetscLogStateStageGetInfo.html">PetscLogStateStageGetInfo</a>()`</font>
<a name="line209">209: </a><font color="#B22222">S*/</font>
<a name="line210">210: </a><font color="#4169E1">typedef</font> <font color="#4169E1">struct</font> {
<a name="line211">211: </a>  char        *name;    <font color="#B22222">/* The class name */</font>
<a name="line212">212: </a>  <a href="../manualpages/Sys/PetscClassId.html">PetscClassId</a> classid; <font color="#B22222">/* The integer identifying this class */</font>
<a name="line213">213: </a>} <a href="../manualpages/Log/PetscLogClassInfo.html">PetscLogClassInfo</a>;

<a name="line215">215: </a><font color="#B22222">/*S</font>
<a name="line216">216: </a><font color="#B22222">  <a href="../manualpages/Log/PetscLogStageInfo.html">PetscLogStageInfo</a> - A registry entry about a class for `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>`.</font>

<a name="line218">218: </a><font color="#B22222">  Level: developer</font>

<a name="line220">220: </a><font color="#B22222">.seealso: [](ch_profiling), `<a href="../manualpages/Log/PetscLogStage.html">PetscLogStage</a>`, `<a href="../manualpages/Log/PetscLogState.html">PetscLogState</a>`, `<a href="../manualpages/Log/PetscLogStateClassGetInfo.html">PetscLogStateClassGetInfo</a>()`</font>
<a name="line221">221: </a><font color="#B22222">S*/</font>
<a name="line222">222: </a><font color="#4169E1">typedef</font> <font color="#4169E1">struct</font> {
<a name="line223">223: </a>  char *name; <font color="#B22222">/* The stage name */</font>
<a name="line224">224: </a>} <a href="../manualpages/Log/PetscLogStageInfo.html">PetscLogStageInfo</a>;
</pre>
</body>

</html>