32#define CS_PROFILING_NONE 0
35#define CS_PROFILING_NVTX 1
38#define CS_PROFILING_ROCTX 2
42#define CS_PROFILING CS_PROFILING_NONE
46#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) \
47 || defined(__SYCL_DEVICE_ONLY__)
49#define CS_PROFILING CS_PROFILING_NONE
52#define CS_COMBINE_DETAIL(x, y) x##y
53#define CS_COMBINE(x, y) CS_COMBINE_DETAIL(x, y)
55#define CS_STRINGIFY_DETAIL(x) #x
56#define CS_STRINGIFY(x) CS_STRINGIFY_DETAIL(x)
58#if CS_PROFILING == CS_PROFILING_NONE
65#define CS_PROFILE_START()
68#define CS_PROFILE_STOP()
71#define CS_PROFILE_FUNC_RANGE()
74#define CS_PROFILE_MARK_LINE()
80#elif CS_PROFILING == CS_PROFILING_NVTX
82#include <cuda_profiler_api.h>
84#include <nvtx3/nvtx3.hpp>
88#define CS_PROFILE_START() {cudaProfilerStart();}
91#define CS_PROFILE_STOP() {cudaProfilerStop();}
94#define CS_PROFILE_FUNC_RANGE() NVTX3_FUNC_RANGE()
97#define CS_PROFILE_MARK_LINE() nvtx3::mark(__FILE__ ":" CS_STRINGIFY(__LINE__))
103#elif CS_PROFILING == CS_PROFILING_ROCTX
105#include <rocprofiler-sdk-roctx/roctx.h>
110class cs_profiling_scoped_range {
113 cs_profiling_scoped_range(
const char *descr)
114 { roctxRangePushA(descr); }
117 ~cs_profiling_scoped_range()
123#define CS_PROFILE_START() {roctxProfilerResume();}
126#define CS_PROFILE_STOP() {roctxProfilerPause();}
129#define CS_PROFILE_FUNC_RANGE() \
130 cs_profiling_scoped_range _cs_psr = cs_profiling_scoped_range(__func__);
133#define CS_PROFILE_MARK_LINE() roctxMarkA(__FILE__ ":" CS_STRINGIFY(__LINE__))