spla
Macros
cl_debug.hpp File Reference
#include <profiling/time_profiler.hpp>
Include dependency graph for cl_debug.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define CL_FINISH(queue)   queue.finish()
 
#define CL_DISPATCH_PROFILED(name, queue, kernel, ...)
 
#define CL_READ_PROFILED(name, queue, buffer, ...)
 
#define CL_COUNTER_GET(name, queue, counter, value)
 
#define CL_COUNTER_SET(name, queue, counter, value)
 
#define CL_PROFILE_BEGIN(name, queue)
 
#define CL_PROFILE_END()
 

Macro Definition Documentation

◆ CL_COUNTER_GET

#define CL_COUNTER_GET (   name,
  queue,
  counter,
  value 
)
Value:
do { \
CL_FINISH(queue); \
{ \
TIME_PROFILE_SUBSCOPE(name); \
cl::Event __cl_event; \
(value) = (counter).get(queue, &__cl_event); \
__cl_event.wait(); \
cl_ulong __queued = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_QUEUED>(); \
cl_ulong __start = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_START>(); \
cl_ulong __end = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_END>(); \
TIME_PROFILE_SUBLABEL.queued_nano = __end - __queued; \
TIME_PROFILE_SUBLABEL.executed_nano = __end - __start; \
CL_FINISH(queue); \
} \
} while (false)

◆ CL_COUNTER_SET

#define CL_COUNTER_SET (   name,
  queue,
  counter,
  value 
)
Value:
do { \
CL_FINISH(queue); \
{ \
TIME_PROFILE_SUBSCOPE(name); \
cl::Event __cl_event; \
(counter).set(queue, (value), &__cl_event); \
__cl_event.wait(); \
cl_ulong __queued = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_QUEUED>(); \
cl_ulong __start = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_START>(); \
cl_ulong __end = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_END>(); \
TIME_PROFILE_SUBLABEL.queued_nano = __end - __queued; \
TIME_PROFILE_SUBLABEL.executed_nano = __end - __start; \
CL_FINISH(queue); \
} \
} while (false)

◆ CL_DISPATCH_PROFILED

#define CL_DISPATCH_PROFILED (   name,
  queue,
  kernel,
  ... 
)
Value:
do { \
CL_FINISH(queue); \
{ \
TIME_PROFILE_SUBSCOPE(name); \
cl::Event __cl_event; \
queue.enqueueNDRangeKernel(kernel, __VA_ARGS__, nullptr, &__cl_event); \
__cl_event.wait(); \
cl_ulong __queued = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_QUEUED>(); \
cl_ulong __start = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_START>(); \
cl_ulong __end = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_END>(); \
TIME_PROFILE_SUBLABEL.queued_nano = __end - __queued; \
TIME_PROFILE_SUBLABEL.executed_nano = __end - __start; \
CL_FINISH(queue); \
} \
} while (false)

◆ CL_FINISH

#define CL_FINISH (   queue)    queue.finish()

◆ CL_PROFILE_BEGIN

#define CL_PROFILE_BEGIN (   name,
  queue 
)
Value:
do { \
auto& __prfq = queue; \
CL_FINISH(__prfq); \
{ \
TIME_PROFILE_SUBSCOPE(name);

◆ CL_PROFILE_END

#define CL_PROFILE_END ( )
Value:
} \
CL_FINISH(__prfq); \
} \
while (false)

◆ CL_READ_PROFILED

#define CL_READ_PROFILED (   name,
  queue,
  buffer,
  ... 
)
Value:
do { \
CL_FINISH(queue); \
{ \
TIME_PROFILE_SUBSCOPE(name); \
cl::Event __cl_event; \
queue.enqueueReadBuffer(buffer, __VA_ARGS__, nullptr, &__cl_event); \
__cl_event.wait(); \
cl_ulong __queued = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_QUEUED>(); \
cl_ulong __start = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_START>(); \
cl_ulong __end = __cl_event.getProfilingInfo<CL_PROFILING_COMMAND_END>(); \
TIME_PROFILE_SUBLABEL.queued_nano = __end - __queued; \
TIME_PROFILE_SUBLABEL.executed_nano = __end - __start; \
CL_FINISH(queue); \
} \
} while (false)