26 #ifndef GEOS_COMMON_TIMINGMACROS_HPP_
27 #define GEOS_COMMON_TIMINGMACROS_HPP_
32 namespace timingHelpers
34 inline std::string stripPF(
char const * prettyFunction )
37 std::string::size_type
const end = input.find_first_of(
'(' );
38 std::string::size_type
const beg = input.find_last_of(
' ', end ) + 1;
39 return input.substr( beg, end-beg );
44 #if defined( GEOS_USE_CUDA ) && defined( GEOS_USE_CUDA_NVTOOLSEXT )
46 #include "nvtx3/nvToolsExt.h"
48 namespace timingHelpers
60 class NVTXScopeTracer {
62 NVTXScopeTracer(
const char* name, NVTXColors color ) {
63 nvtxEventAttributes_t eventAttrib = { 0 };
64 eventAttrib.version = NVTX_VERSION;
65 eventAttrib.size = NVTX_EVENT_ATTRIB_STRUCT_SIZE;
66 eventAttrib.colorType = NVTX_COLOR_ARGB;
67 eventAttrib.color = color;
68 eventAttrib.messageType = NVTX_MESSAGE_TYPE_ASCII;
69 eventAttrib.message.ascii = name;
70 nvtxRangePushEx(&eventAttrib);
79 # define GEOS_NVTX_MARK_SCOPE_COLORED(name, color) timingHelpers::NVTXScopeTracer __FILE__ ## _ ## __LINE__ ## _ ## scopeTracer = timingHelpers::NVTXScopeTracer(name, color)
81 # define GEOS_NVTX_MARK_SCOPE(name) GEOS_NVTX_MARK_SCOPE_COLORED(STRINGIZE_NX(name), timingHelpers::PURPLE)
83 # define GEOS_NVTX_MARK_SCOPE_STR(name) GEOS_NVTX_MARK_SCOPE_COLORED(name, timingHelpers::PURPLE)
85 # define GEOS_NVTX_MARK_FUNCTION GEOS_NVTX_MARK_SCOPE_COLORED(timingHelpers::stripPF(__PRETTY_FUNCTION__).c_str(), timingHelpers::BLUE)
88 # define GEOS_NVTX_MARK_SCOPE(name)
89 # define GEOS_NVTX_MARK_SCOPE_STR(name)
90 # define GEOS_NVTX_MARK_FUNCTION
95 #ifdef GEOS_USE_CALIPER
96 #include <caliper/cali.h>
102 #define GEOS_CALIPER_MARK_SCOPE(name) cali::Function GEOS_CONCAT(_cali_ann, __LINE__)(STRINGIZE_NX(name))
105 #define GEOS_CALIPER_MARK_SCOPE_STR(name) cali::Function GEOS_CONCAT(_cali_ann, __LINE__)(name)
108 #define GEOS_CALIPER_MARK_FUNCTION cali::Function _cali_ann_func(timingHelpers::stripPF(__PRETTY_FUNCTION__).c_str())
111 #define GEOS_CALIPER_MARK_BEGIN(name) CALI_MARK_BEGIN(STRINGIZE(name))
114 #define GEOS_CALIPER_MARK_END(name) CALI_MARK_END(STRINGIZE(name))
117 #define GEOS_CALIPER_MARK_FUNCTION_BEGIN CALI_MARK_FUNCTION_BEGIN
120 #define GEOS_CALIPER_MARK_FUNCTION_END CALI_MARK_FUNCTION_END
125 #define GEOS_CALIPER_MARK_SCOPE(name)
126 #define GEOS_CALIPER_MARK_SCOPE_STR(name)
127 #define GEOS_CALIPER_MARK_FUNCTION
129 #define GEOS_CALIPER_MARK_BEGIN(name)
130 #define GEOS_CALIPER_MARK_END(name)
132 #define GEOS_CALIPER_MARK_FUNCTION_BEGIN
133 #define GEOS_CALIPER_MARK_FUNCTION_END
139 #define GEOS_MARK_SCOPE(name) GEOS_CALIPER_MARK_SCOPE(name); GEOS_NVTX_MARK_SCOPE(name)
141 #define GEOS_MARK_SCOPE_STR(name) GEOS_CALIPER_MARK_SCOPE_STR(name); GEOS_NVTX_MARK_SCOPE_STR(name)
143 #define GEOS_MARK_FUNCTION GEOS_CALIPER_MARK_FUNCTION; GEOS_NVTX_MARK_FUNCTION
145 #define GEOS_MARK_FUNCTION_BEGIN(name) GEOS_CALIPER_MARK_FUNCTION_BEGIN(name)
147 #define GEOS_MARK_FUNCTION_END(name) GEOS_CALIPER_MARK_FUNCTION_END(name)
149 #define GEOS_MARK_BEGIN(name) GEOS_CALIPER_MARK_BEGIN(name)
151 #define GEOS_MARK_END(name) GEOS_CALIPER_MARK_END(name)
154 #ifdef GEOS_USE_TIMERS
155 #define GEOS_GET_TIME( time ) \
160 gettimeofday(&tim, nullptr); \
161 time = tim.tv_sec + (tim.tv_usec / 1000000.0); \
164 #define GEOS_GET_TIME( time )
std::string string
String type.