31#ifndef DWTRACE_TRACE_HPP_
32#define DWTRACE_TRACE_HPP_
122 TracerConfig(
bool const enabledFlag,
char8_t const*
const fileLoc, uint64_t
const chanMask,
123 bool const fileBackendFlag, uint32_t
const fileSize,
bool const networkBackendFlag,
char8_t const*
const ipAddress,
124 uint16_t
const portNum,
bool const nvtxBackendFlag, uint32_t
const traceLevel,
125 uint32_t
const flushEpoch,
bool const ftraceFlag,
bool const memTraceFlag,
bool const fullMemUse,
bool const diskIOStats,
126 char8_t const*
const start =
nullptr,
bool const& createCudaEventsFlag =
true)
127 :
enabled(enabledFlag),
filePath(fileLoc),
channelMask(chanMask),
fileBackendEnabled(fileBackendFlag),
maxFileSizeMB(fileSize),
networkBackendEnabled(networkBackendFlag),
ipAddr(ipAddress),
serverPort(portNum),
nvtxBackendEnabled(nvtxBackendFlag),
tracingLevel(static_cast<
Level>(traceLevel)),
flushInterval((flushEpoch >
DW_TRACE_MAX_NUM_EVENTS_PER_CHAN) ?
DW_TRACE_MAX_NUM_EVENTS_PER_CHAN : flushEpoch),
ftraceBackendEnabled(ftraceFlag),
memTraceEnabled(memTraceFlag),
fullMemUsage(fullMemUse),
diskIOStatsEnabled(diskIOStats),
startTime(start),
createCudaEvents(createCudaEventsFlag)
136#include <dwtrace/dw/trace/core/TraceImpl.hpp>
137#include <dwtrace/dw/trace/wrapper/TraceWrapper.hpp>
143#define DW_TRACE_GET_MACRO_2(_1, _2, NAME, ...) NAME
144#define DW_TRACE_GET_MACRO_5(_1, _2, _3, _4, _5, NAME, ...) NAME
146#define DW_TRACE_TAG(...) \
147 dw::trace::dwtFixedString_t(DW_TRACE_GET_MACRO_5(__VA_ARGS__, DW_TRACE_TAG5, DW_TRACE_TAG4, DW_TRACE_TAG3, DW_TRACE_TAG2, DW_TRACE_TAG1)(__VA_ARGS__))
148#define DW_TRACE_TAG1(STR1) (STR1)
149#define DW_TRACE_TAG2(STR1, STR2) (STR1 "@" STR2)
150#define DW_TRACE_TAG3(STR1, STR2, STR3) (STR1 ":" STR2 "@" STR3)
151#define DW_TRACE_TAG4(STR1, STR2, STR3, STR4) (STR1 ":" STR2 ":" STR3 "@" STR4)
152#define DW_TRACE_TAG5(STR1, STR2, STR3, STR4, STR5) (STR1 ":" STR2 ":" STR3 ":" STR4 "@" STR5)
154#define DW_TRACE_PAYLOAD(...) \
155 DW_TRACE_GET_MACRO_2(__VA_ARGS__, DW_TRACE_PAYLOAD2, DW_TRACE_PAYLOAD1) \
157#define DW_TRACE_PAYLOAD1(STR1) dw::trace::singlePayload(STR1)
170#define DW_TRACE_PAYLOAD2(STR1, STR2) dw::trace::joinPayloadChars(STR1, STR2)
171static inline dwtFixedString_t joinPayloadChars(
char8_t const*
const str1,
char8_t const*
const str2)
180#define DW_CONCAT_(x, y) x##y
181#define DW_CONCAT(x, y) DW_CONCAT_(x, y)
182#define DW_UNIQUE_VAR(name) DW_CONCAT(name, __LINE__)
190#define DW_TRACE_ENABLE(chan_mask, level) dw::trace::dwTraceEnable(chan_mask, level)
196#define DW_TRACE_DISABLE(chan_mask) dw::trace::dwTraceDisable(chan_mask)
201#define DW_TRACE_ENABLE_ALL() dw::trace::dwTraceEnableAll()
210#define DW_TRACE_MARK(...) dw::trace::dwTraceMark(__VA_ARGS__)
220#define DW_TRACE_BEGIN(...) dw::trace::dwTraceBegin(__VA_ARGS__)
230#define DW_TRACE_END(...) dw::trace::dwTraceEnd(__VA_ARGS__)
241#define DW_TRACE_ASYNC_BEGIN(...) dw::trace::dwTraceAsyncBegin(__VA_ARGS__)
250#define DW_TRACE_ASYNC_END(...) dw::trace::dwTraceAsyncEnd(__VA_ARGS__)
261#define DW_TRACE_CUDA_BEGIN(...) dw::trace::dwTraceCudaBegin(__VA_ARGS__)
271#define DW_TRACE_CUDA_END(...) dw::trace::dwTraceCudaEnd(__VA_ARGS__)
282#define DW_TRACE_CUDA_BEGIN_ASYNC(...) DW_TRACE_CUDA_BEGIN(__VA_ARGS__)
292#define DW_TRACE_CUDA_RECORD_ASYNC(...) dw::trace::dwTraceCudaRecordAsync(__VA_ARGS__)
310#define DW_TRACE_CUDA_COLLECT_ASYNC(...) dw::trace::dwTraceCudaCollectAsync(__VA_ARGS__)
324#define DW_TRACE_CUDA_COLLECT_ALL() dw::trace::dwTraceCudaCollectAll()
334#define DW_TRACE_CORE_INIT(...) dw::trace::dwTraceCoreInit(__VA_ARGS__)
342#define DW_TRACE_INIT(...) \
343 if (!dw::trace::isDWTracingEnabled()) \
345 dw::trace::dwTraceCoreInit(__VA_ARGS__); \
346 dw::trace::dwTraceWrapperInit(__VA_ARGS__); \
352#define DW_TRACE_RESET(...) \
353 dw::trace::dwTraceReset(__VA_ARGS__); \
354 if (!dw::trace::isDWTracingEnabled()) \
356 dw::trace::dwTraceWrapperDeinit(__VA_ARGS__); \
362#define DW_TRACE_RESET_WRAPPER(...) \
363 dw::trace::dwTraceWrapperReset(__VA_ARGS__);
365#define DW_TRACE_BIND_OUTPUT(...) dw::trace::dwTraceBindOutput(__VA_ARGS__)
367#define DW_TRACE_REGISTER_CB(...) dw::trace::dwTraceRegisterCallback(__VA_ARGS__)
374#define DW_TRACE_FLUSH(isForce) dw::trace::dwTraceFlush(isForce)
386#define DW_TRACE_SCOPE(...) \
387 dw::trace::CpuScopeTraceEvent DW_UNIQUE_VAR(cpuTraceEvent_){__VA_ARGS__}; \
388 if (dw::trace::isDWTracingEnabled()) \
390 dw::trace::dwTraceBegin(__VA_ARGS__); \
404#define DW_TRACE_CUDA_SCOPE(...) \
405 dw::trace::CudaScopeTraceEvent DW_UNIQUE_VAR(cudaTraceEvent_){false, __VA_ARGS__}; \
406 if (dw::trace::isDWTracingEnabled()) \
408 dw::trace::dwTraceCudaBegin(__VA_ARGS__); \
422#define DW_TRACE_CUDA_SCOPE_ASYNC(...) \
423 dw::trace::CudaScopeTraceEvent DW_UNIQUE_VAR(cudaTraceEvent_){true, __VA_ARGS__}; \
424 if (dw::trace::isDWTracingEnabled()) \
426 dw::trace::dwTraceCudaBegin(__VA_ARGS__); \
436#define DW_TRACE_BOOT_PROFILER(msg) dw::trace::dwTraceBootProfiler(msg)
438#define DW_TRACE_BOOT_PROFILER(msg)
450#define DW_TRACE_TAG(...)
451#define DW_TRACE_PAYLOAD(...)
452#define DW_TRACE_INIT(...)
453#define DW_TRACE_ENABLED(chan_mask, level)
454#define DW_TRACE_DISABLED(chan_mask)
455#define DW_TRACE_BIND_OUTPUT(...)
456#define DW_TRACE_REGISTER_CB(...)
457#define DW_UNIQUE_VAR(name)
458#define DW_TRACE_MARK(...)
459#define DW_TRACE_BEGIN(...)
460#define DW_TRACE_END(...)
461#define DW_TRACE_SCOPE(...)
462#define DW_TRACE_ASYNC_BEGIN(...)
463#define DW_TRACE_ASYNC_END(...)
464#define DW_TRACE_FLUSH(isForce)
465#define DW_TRACE_CUDA_BEGIN(...)
466#define DW_TRACE_CUDA_END(...)
467#define DW_TRACE_CUDA_BEGIN_ASYNC(...)
468#define DW_TRACE_CUDA_RECORD_ASYNC(...)
469#define DW_TRACE_CUDA_COLLECT_ASYNC(...)
470#define DW_TRACE_CUDA_SCOPE(...)
471#define DW_TRACE_CUDA_SCOPE_ASYNC(...)
472#define DW_TRACE_BOOT_PROFILER(msg)
Level
Tracing can be controlled through tracing levels.
static constexpr uint64_t DW_TRACE_CHAN_ENABLE_ALL
static constexpr uint64_t DW_TRACE_CHAN_MASK_NONE
static constexpr uint32_t DW_TRACE_FLUSH_INTERVAL_DEFAULT
Default number of channel traces before flush.
static constexpr Level DW_TRACE_LEVEL_DEFAULT
If not sure about tracing level at the time of using DWTrace API, then use default trace level.
uint32_t getPreferredBlockingFlags()
static constexpr size_t DW_TRACE_MAX_CUDA_EVENTS
Cuda events are required for measuring execution time on GPU/DLA.
static constexpr uint32_t DW_TRACE_MAX_NUM_EVENTS_PER_CHAN
dw::core::FixedString< DW_TRACE_MAX_TAG_SIZE > dwtFixedString_t
bool isBlockingSyncPreferred()
dw::core::FixedString< 384 > dwtStringFilepath_t
static constexpr char8_t const * DW_TRACE_STR_TAG
static constexpr uint32_t DW_TRACE_MAX_FILE_SIZE_MB
Default Max file size of generate DWTrace in MBs.
dw::core::FixedString< 16 > dwtStringIPAddr_t
static const auto DW_TRACE_CHAN_MASK
DWTrace initialisation and configuration structure.
TracerConfig(bool const enabledFlag, char8_t const *const fileLoc, uint64_t const chanMask, bool const fileBackendFlag, uint32_t const fileSize, bool const networkBackendFlag, char8_t const *const ipAddress, uint16_t const portNum, bool const nvtxBackendFlag, uint32_t const traceLevel, uint32_t const flushEpoch, bool const ftraceFlag, bool const memTraceFlag, bool const fullMemUse, bool const diskIOStats, char8_t const *const start=nullptr, bool const &createCudaEventsFlag=true)
dwtStringFilepath_t filePath
bool ftraceBackendEnabled
bool networkBackendEnabled
dwtFixedString_t startTime