PhysicsBasedAnimationToolkit 0.0.10
Cross-platform C++20 library of algorithms and data structures commonly used in computer graphics research on physically-based simulation.
Loading...
Searching...
No Matches
Profiling.h
Go to the documentation of this file.
1
10
11#ifndef PBAT_GPU_PROFILING_PROFILING_H
12#define PBAT_GPU_PROFILING_PROFILING_H
13
14#if defined(PBAT_HAS_TRACY_PROFILER) and defined(__CUDACC__)
15 #define PBAT_CAN_USE_TRACY_C
16 #include <tracy/TracyC.h>
17 #define PBAT_PROFILE_CUDA_HOST_SCOPE_START(var) TracyCZone(var, true)
18 #define PBAT_PROFILE_CUDA_NAMED_HOST_SCOPE_START(var, name) TracyCZoneN(var, name, true)
19 #define PBAT_PROFILE_CUDA_HOST_SCOPE_END(var) TracyCZoneEnd(var)
20 #define PBAT_PROFILE_CUDA_LOG(txt, size) TracyCMessage(txt, size)
21 #define PBAT_PROFILE_CUDA_SCOPED_LOG(ctx, txt, size) TracyCZoneText(ctx, txt, size)
22 #define PBAT_PROFILE_CUDA_PLOT(name, value) TracyCPlot(name, value)
23
24 #define PBAT_PROFILE_CUDA_CONTEXT ___pbat_tracy_ctx
25 #define PBAT_PROFILE_CUDA_NAMED_SCOPE(name) \
26 PBAT_PROFILE_CUDA_NAMED_HOST_SCOPE_START(PBAT_PROFILE_CUDA_CONTEXT, name) \
27 pbat::gpu::profiling::Zone ___pbat_tracy_zone(&PBAT_PROFILE_CUDA_CONTEXT);
28
29#else
30 #define PBAT_PROFILE_CUDA_HOST_SCOPE_START(var)
31 #define PBAT_PROFILE_CUDA_NAMED_HOST_SCOPE_START(var, name)
32 #define PBAT_PROFILE_CUDA_HOST_SCOPE_END(var)
33 #define PBAT_PROFILE_CUDA_LOG(txt, size)
34 #define PBAT_PROFILE_CUDA_SCOPED_LOG(ctx, txt, size)
35 #define PBAT_PROFILE_CUDA_PLOT(name, value)
36 #define PBAT_PROFILE_CUDA_CONTEXT
37 #define PBAT_PROFILE_CUDA_NAMED_SCOPE(name)
38#endif // PBAT_CAN_USE_TRACY
39
40#include <cstring>
41#include <fmt/format.h>
42
43#if defined(PBAT_CAN_USE_TRACY_C)
44 #define PBAT_PROFILE_CUDA_SCOPED_CLOG(txt) \
45 PBAT_PROFILE_CUDA_SCOPED_LOG(PBAT_PROFILE_CUDA_CONTEXT, txt, std::strlen(txt))
46 #define PBAT_PROFILE_CUDA_CLOG(txt) PBAT_PROFILE_CUDA_LOG(txt, std::strlen(txt))
47 #define PBAT_PROFILE_CUDA_SCOPED_SLOG(txt) \
48 { \
49 auto const& txtref = txt; \
50 PBAT_PROFILE_CUDA_SCOPED_LOG(PBAT_PROFILE_CUDA_CONTEXT, txtref.c_str(), txtref.size()) \
51 }
52 #define PBAT_PROFILE_CUDA_SLOG(txt) \
53 { \
54 auto const& txtref = txt; \
55 PBAT_PROFILE_CUDA_LOG(txtref.c_str(), txtref.size()) \
56 }
57 #define PBAT_PROFILE_CUDA_SCOPED_FLOG(fmtstr, ...) \
58 { \
59 auto const& txt = fmt::format(fmtstr, __VA_ARGS__); \
60 PBAT_PROFILE_CUDA_SCOPED_SLOG(txt) \
61 }
62 #define PBAT_PROFILE_CUDA_FLOG(fmtstr, ...) \
63 { \
64 auto const& txt = fmt::format(fmtstr, __VA_ARGS__); \
65 PBAT_PROFILE_CUDA_LOG(txt.c_str(), txt.size()); \
66 }
67#endif // PBAT_CAN_USE_TRACY
68
73namespace pbat::gpu::profiling {
74
78class Zone
79{
80 public:
81#ifdef PBAT_CAN_USE_TRACY_C
82 Zone(TracyCZoneCtx* ctx);
83#else
84 Zone(void* ctx);
85#endif
86 ~Zone();
87
88 private:
89#ifdef PBAT_CAN_USE_TRACY_C
90 TracyCZoneCtx* mContext;
91#else
92 void* mContext;
93#endif
94};
95
96} // namespace pbat::gpu::profiling
97
98#endif // PBAT_GPU_PROFILING_PROFILING_H
Namespace for host-side GPU profiling utilities.
Definition Profiling.cu:7