Skip to content

Commit

Permalink
Add ITT instrumentation option (twitter#204)
Browse files Browse the repository at this point in the history
  • Loading branch information
michalbiesek authored and Yao Yue committed Jul 31, 2019
1 parent 236c98d commit 24e3131
Show file tree
Hide file tree
Showing 5 changed files with 152 additions and 0 deletions.
12 changes: 12 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ option(HAVE_STATS "stats enabled by default" ON)
option(HAVE_DEBUG_MM "debugging oriented memory management disabled by default" OFF)
option(COVERAGE "code coverage" OFF)
option(HAVE_RUST "rust bindings not built by default" OFF)
option(HAVE_ITT_INSTRUMENTATION "instrument code with ITT API" OFF)

if(HAVE_RUST)
option(RUST_VERBOSE_BUILD "pass -vv to cargo compilation" OFF)
Expand Down Expand Up @@ -165,6 +166,17 @@ if(CHECK_FOUND)
endif(NOT CHECK_WORKING)
endif(CHECK_FOUND)

if (HAVE_ITT_INSTRUMENTATION)
if(PKG_CONFIG_FOUND)
pkg_check_modules(ITTNOTIFY REQUIRED ittnotify>=1.0)
else()
find_package(ITTNOTIFY REQUIRED 1.0)
endif()
include_directories(${ITTNOTIFY_INCLUDE_DIRS})
link_directories(${ITTNOTIFY_LIBRARY_DIRS})
link_libraries(${ITTNOTIFY_LIBRARIES})
endif(HAVE_ITT_INSTRUMENTATION)

find_package(Threads)


Expand Down
65 changes: 65 additions & 0 deletions cmake/FindITTNOTIFY.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# ITTNOTIFY is the instrumentation and tracing technology (ITT) APIs provided by
# the Intel® VTune™Amplifier enable your application to generate and control
# the collection of trace data during its execution.
#
# The following variables are set when ITTNOTIFY is found:
# ITTNOTIFY_FOUND = Set to true, if all components of ITTNOTIFY have been found.
# ITTNOTIFY_INCLUDE_DIRS = Include path for the header files of ITTNOTIFY.
# ITTNOTIFY_LIBRARY_DIRS = Library search path for the ITTNOTIFY libraries.
# ITTNOTIFY_LIBRARIES = Link these to use ITTNOTIFY.
# ITTNOTIFY_LFLAGS = Linker flags (optional).

if (NOT ITTNOTIFY_FOUND)

find_program(VTUNE_EXECUTABLE amplxe-cl)

if(NOT VTUNE_EXECUTABLE)
set(ITTNOTIFY_FOUND false)
return()
endif()

get_filename_component(VTUNE_DIR ${VTUNE_EXECUTABLE} PATH)
set(ITTNOTIFY_ROOT_DIR "${VTUNE_DIR}/..")

##_____________________________________________________________________________
## Check for the header files

find_path (ITTNOTIFY_INCLUDE_DIRS
NAMES ittnotify.h
HINTS ${ITTNOTIFY_ROOT_DIR}
PATHS /usr /usr/local
PATH_SUFFIXES include
)

##_____________________________________________________________________________
## Check for the library

find_library (ITTNOTIFY_LIBRARIES ittnotify
HINTS ${ITTNOTIFY_ROOT_DIR}
PATHS /usr /usr/local /opt/local
PATH_SUFFIXES lib64 lib
)

##_____________________________________________________________________________
## Actions taken when all components have been found

find_package_handle_standard_args (ITTNOTIFY DEFAULT_MSG ITTNOTIFY_LIBRARIES ITTNOTIFY_INCLUDE_DIRS)

if (ITTNOTIFY_FOUND)
if (NOT ITTNOTIFY_FIND_QUIETLY)
message (STATUS "Found components for ITTNOTIFY")
message (STATUS "ITTNOTIFY_ROOT_DIR = ${ITTNOTIFY_ROOT_DIR}")
message (STATUS "ITTNOTIFY_INCLUDE_DIRS = ${ITTNOTIFY_INCLUDE_DIRS}")
message (STATUS "ITTNOTIFY_LIBRARIES = ${ITTNOTIFY_LIBRARIES}")
endif (NOT ITTNOTIFY_FIND_QUIETLY)
else (ITTNOTIFY_FOUND)
if (ITTNOTIFY_FIND_REQUIRED)
message (FATAL_ERROR "Could not find ITTNOTIFY!")
endif (ITTNOTIFY_FIND_REQUIRED)
endif (ITTNOTIFY_FOUND)

if(UNIX)
list(APPEND ITTNOTIFY_LIBRARIES dl)
endif()

endif (NOT ITTNOTIFY_FOUND)
2 changes: 2 additions & 0 deletions config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@
#cmakedefine HAVE_STATS

#cmakedefine HAVE_DEBUG_MM

#cmakedefine HAVE_ITT_INSTRUMENTATION
4 changes: 4 additions & 0 deletions include/cc_define.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ extern "C" {
#define CC_DEBUG_MM 1
#endif

#ifdef HAVE_ITT_INSTRUMENTATION
#define CC_ITT 1
#endif

#define CC_OK 0
#define CC_ERROR -1

Expand Down
69 changes: 69 additions & 0 deletions include/cc_itt.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#pragma once

#include <cc_define.h>

#ifdef CC_ITT
#include "ittnotify.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif
#ifdef CC_ITT

#define ITT_DOMAIN_NAME "cc_itt"

#define cc_declare_itt_function(_keyword, _name) \
_keyword __itt_heap_function _name

#define cc_create_itt_malloc(_name) \
_name = __itt_heap_function_create(#_name, ITT_DOMAIN_NAME)

#define cc_create_itt_free(_name) \
_name = __itt_heap_function_create(#_name, ITT_DOMAIN_NAME)

#define cc_create_itt_realloc(_name) \
_name = __itt_heap_function_create(#_name, ITT_DOMAIN_NAME)

#define cc_itt_alloc(_itt_heap_f, _p, _s) do { \
__itt_heap_allocate_begin(_itt_heap_f, (size_t)(_s), 0); \
__itt_heap_allocate_end(_itt_heap_f, (void *)&(_p), (size_t)(_s), 0); \
} while (0)

#define cc_itt_zalloc(_itt_heap_f, _p, _s) do { \
__itt_heap_allocate_begin(_itt_heap_f, (size_t)(_s), 1); \
__itt_heap_allocate_end(_itt_heap_f, (void *)&(_p), (size_t)(_s), 1); \
} while (0)

#define cc_itt_free(_itt_heap_f, _p) do { \
__itt_heap_free_begin(_itt_heap_f, _p); \
__itt_heap_free_end(_itt_heap_f, _p); \
} while (0)

#define cc_itt_realloc(_itt_heap_f, _p, _np, _s) do { \
__itt_heap_reallocate_begin(_itt_heap_f, _p, (size_t)(_s), 0); \
__itt_heap_reallocate_end(_itt_heap_f, _p, (void *)&(_np), (size_t)(_s), 0); \
} while (0)

#define cc_itt_heap_internal_access() \
__itt_heap_internal_access_begin()

#define cc_itt_heap_internal_access_end() \
__itt_heap_internal_access_end()

#else
#define cc_declare_itt_function(_keyword, _name)
#define cc_create_itt_malloc(_name)
#define cc_create_itt_free(_name)
#define cc_create_itt_realloc(_name)
#define cc_itt_alloc(_itt_heap_f, _p, _s)
#define cc_itt_zalloc(_itt_heap_f, _p, _s)
#define cc_itt_free(_itt_heap_f, _p)
#define cc_itt_realloc(_itt_heap_f, _p, _np, _s)
#define cc_itt_heap_internal_access_begin()
#define cc_itt_heap_internal_access_end()
#endif /* CC_ITT */

#ifdef __cplusplus
}
#endif

0 comments on commit 24e3131

Please sign in to comment.