7 #ifndef NAMDEVENTSPROFILING_H
8 #define NAMDEVENTSPROFILING_H
23 #define NAMD_PROFILE_EVENT(a,b) a,
24 #include "NamdEventsProfiling.def"
25 #undef NAMD_PROFILE_EVENT
31 #define NAMD_PROFILE_EVENT(a,b) b,
32 #include "NamdEventsProfiling.def"
33 #undef NAMD_PROFILE_EVENT
37 #undef NAMD_PROFILE_START
38 #undef NAMD_PROFILE_STOP
39 #undef NAMD_REGISTER_EVENT
40 #undef NAMD_EVENT_START
41 #undef NAMD_EVENT_START_EX
42 #undef NAMD_EVENT_STOP
43 #undef NAMD_EVENT_RANGE
44 #undef NAMD_EVENT_RANGE_2
50 #if defined(NAMD_CUDA) && defined(NAMD_NVTX_ENABLED)
52 #include <nvToolsExt.h>
53 #include <cuda_profiler_api.h>
56 #define NAMD_PROFILE_START() \
58 cudaProfilerStart(); \
59 } while (0) // must terminate with semi-colon
62 #define NAMD_PROFILE_STOP() \
65 } while (0) // must terminate with semi-colon
69 const uint32_t NAMD_nvtx_colors[] = {
82 const int NAMD_nvtx_colors_len =
sizeof(NAMD_nvtx_colors)/
sizeof(uint32_t);
84 #define NAMD_REGISTER_EVENT(name,cid) \
85 do { } while(0) // must terminate with semi-colon
88 #define NAMD_EVENT_START(eon,id) \
92 color_id = color_id % NAMD_nvtx_colors_len; \
93 nvtxEventAttributes_t eventAttrib = {0}; \
94 eventAttrib.version = NVTX_VERSION; \
95 eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; \
96 eventAttrib.colorType = NVTX_COLOR_ARGB; \
97 eventAttrib.color = NAMD_nvtx_colors[color_id]; \
98 eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; \
99 eventAttrib.message.ascii = NamdProfileEventStr[id]; \
100 nvtxRangePushEx(&eventAttrib); \
102 } while(0) // must terminate with semi-colon
105 #define NAMD_EVENT_START_EX(eon,id,str) \
109 color_id = color_id % NAMD_nvtx_colors_len; \
110 nvtxEventAttributes_t eventAttrib = {0}; \
111 eventAttrib.version = NVTX_VERSION; \
112 eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE; \
113 eventAttrib.colorType = NVTX_COLOR_ARGB; \
114 eventAttrib.color = NAMD_nvtx_colors[color_id]; \
115 eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII; \
116 eventAttrib.message.ascii = str; \
117 nvtxRangePushEx(&eventAttrib); \
119 } while(0) // must terminate with semi-colon
122 #define NAMD_EVENT_STOP(eon,id) \
127 } while (0) // must terminate with semi-colon
130 class NAMD_NVTX_Tracer {
134 NAMD_NVTX_Tracer(
int eon,
int id = 0) : evon(eon) {
142 #define NAMD_EVENT_RANGE(eon,id) \
143 NAMD_NVTX_Tracer namd_nvtx_tracer(eon,id)
146 #if defined(NAMD_PROFILE_EVENT_LAYER_2)
147 #define NAMD_EVENT_RANGE_2(eon,id) \
148 NAMD_EVENT_RANGE(eon,id)
150 #define NAMD_EVENT_RANGE_2(eon,id) \
151 do { } while(0) // must terminate with semi-colon
158 #elif defined(CMK_TRACE_ENABLED) && defined(NAMD_CMK_TRACE_ENABLED)
162 #define SEQUENCER_EVENT_ID_START 150
164 #define NAMD_PROFILE_START() \
165 do { } while(0) // must terminate with semi-colon
167 #define NAMD_PROFILE_STOP() \
168 do { } while(0) // must terminate with semi-colon
170 #define NAMD_REGISTER_EVENT(name,id) \
172 int eventID = SEQUENCER_EVENT_ID_START+id; \
173 traceRegisterUserEvent(name, eventID); \
174 } while(0) // must terminate with semi-colon
176 #define NAMD_EVENT_START(eon,id) \
179 int eventID = SEQUENCER_EVENT_ID_START+id; \
180 traceBeginUserBracketEvent(eventID); \
182 } while(0) // must terminate with semi-colon
184 #define NAMD_EVENT_START_EX(eon,id,str) \
185 NAMD_EVENT_START(eon,id)
187 #define NAMD_EVENT_STOP(eon,id) \
190 int eventID = SEQUENCER_EVENT_ID_START+id; \
191 traceEndUserBracketEvent(eventID); \
193 } while(0) // must terminate with semi-colon
196 class NAMD_Sequencer_Events_Tracer {
200 NAMD_Sequencer_Events_Tracer(
int eon,
int id = 0)
201 : tEventOn(eon), tEventID(id) {
204 ~NAMD_Sequencer_Events_Tracer() {
211 #define NAMD_EVENT_RANGE(eon,id) \
212 NAMD_Sequencer_Events_Tracer namd_events_tracer(eon,id)
215 #if defined(NAMD_PROFILE_EVENT_LAYER_2)
216 #define NAMD_EVENT_RANGE_2(eon,id) \
217 NAMD_EVENT_RANGE(eon,id)
219 #define NAMD_EVENT_RANGE_2(eon,id) \
220 do { } while(0) // must terminate with semi-colon
228 #define NAMD_PROFILE_START() \
229 do { } while(0) // must terminate with semi-colon
231 #define NAMD_PROFILE_STOP() \
232 do { } while(0) // must terminate with semi-colon
234 #define NAMD_REGISTER_EVENT(name,cid) \
235 do { } while(0) // must terminate with semi-colon
237 #define NAMD_EVENT_START(eon,id) \
238 do { } while(0) // must terminate with semi-colon
240 #define NAMD_EVENT_START_EX(eon,id,str) \
241 do { } while(0) // must terminate with semi-colon
243 #define NAMD_EVENT_STOP(eon,id) \
244 do { } while(0) // must terminate with semi-colon
246 #define NAMD_EVENT_RANGE(eon,id) \
247 do { } while(0) // must terminate with semi-colon
249 #define NAMD_EVENT_RANGE_2(eon,id) \
250 do { } while(0) // must terminate with semi-colon
252 #endif // NAMD_CUDA && NAMD_NVTX_ENABLED
#define NAMD_EVENT_STOP(eon, id)
char const *const NamdProfileEventStr[]
#define NAMD_EVENT_START(eon, id)