Change-Id: I4df98c6d9991a3a58e2f646fc0c8fe8f104a105d


[ROCm/roctracer commit: a9048f33a8]
Этот коммит содержится в:
Evgeny
2020-08-05 00:37:28 -05:00
родитель bd1165a371
Коммит b3efbaf280
5 изменённых файлов: 152 добавлений и 9 удалений
+6
Просмотреть файл
@@ -85,7 +85,9 @@ set_property ( TARGET ${TARGET_NAME} PROPERTY SOVERSION "${LIB_VERSION_MAJOR}" )
#endif ()
## Build tests
if ( ${LIBRARY_TYPE} STREQUAL SHARED )
add_subdirectory ( ${TEST_DIR} ${PROJECT_BINARY_DIR}/test )
endif()
## pbulic headers
set ( PUBLIC_HEADERS
@@ -106,6 +108,8 @@ set ( PUBLIC_HEADERS
ext/hsa_rt_utils.hpp
)
if ( ${LIBRARY_TYPE} STREQUAL SHARED )
## Installation and packaging
set ( DEST_NAME ${ROCTRACER_NAME} )
if ( DEFINED CPACK_PACKAGING_INSTALL_PREFIX )
@@ -181,3 +185,5 @@ set ( CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/rpm_po
set ( CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/RPM/rpm_postun" )
include ( CPack )
endif()
Исполняемый файл
+48
Просмотреть файл
@@ -0,0 +1,48 @@
#!/bin/bash -x
SRC_DIR=`dirname $0`
COMPONENT="roctracer"
ROCM_PATH="${ROCM_PATH:=/opt/rocm}"
LD_RUNPATH_FLAG=" -Wl,--enable-new-dtags -Wl,--rpath,$ROCM_PATH/lib:$ROCM_PATH/lib64"
DEFAULTS=defaults.sh
fatal() {
echo "$1"
exit 1
}
umask 022
if [ -e "$DEFAULTS" ] ; then source "$DEFAULTS"; fi
if [ -z "$ROCTRACER_ROOT" ]; then ROCTRACER_ROOT=$SRC_DIR; fi
if [ -z "$BUILD_DIR" ] ; then BUILD_DIR=$PWD; fi
if [ -z "$HIP_PATH" ] ; then export HIP_PATH="$ROCM_PATH/hip"; fi
if [ -z "$HCC_HOME" ] ; then export HCC_HOME="$ROCM_PATH/hcc"; fi
if [ -z "$BUILD_TYPE" ] ; then BUILD_TYPE="release"; fi
if [ -z "$PACKAGE_ROOT" ] ; then PACKAGE_ROOT=$ROCM_PATH; fi
if [ -z "$PACKAGE_PREFIX" ] ; then PACKAGE_PREFIX="$ROCM_PATH/$COMPONENT"; fi
if [ -z "$PREFIX_PATH" ] ; then PREFIX_PATH=$PACKAGE_ROOT; fi
if [ -z "$HIP_VDI" ] ; then HIP_VDI=0; fi
if [ -z "$HIP_API_STRING" ] ; then HIP_API_STRING=1; fi
if [ -n "$ROCM_RPATH" ] ; then LD_RUNPATH_FLAG=" -Wl,--enable-new-dtags -Wl,--rpath,${ROCM_RPATH}"; fi
ROCTRACER_ROOT=$(cd $ROCTRACER_ROOT && echo $PWD)
if [ "$TO_CLEAN" = "yes" ] ; then rm -rf $BUILD_DIR; fi
mkdir -p $BUILD_DIR
pushd $BUILD_DIR
cmake \
-DCMAKE_MODULE_PATH=$ROCTRACER_ROOT/cmake_modules \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DCMAKE_PREFIX_PATH="$PREFIX_PATH" \
-DCMAKE_INSTALL_PREFIX=$PACKAGE_ROOT \
-DCMAKE_SHARED_LINKER_FLAGS="$LD_RUNPATH_FLAG" \
-DHIP_VDI="$HIP_VDI" \
-DHIP_API_STRING="$HIP_API_STRING" \
-DLIBRARY_TYPE=STATIC \
$ROCTRACER_ROOT
make
exit 0
+8
Просмотреть файл
@@ -65,6 +65,13 @@ if ( DEFINED ENV{CMAKE_DEBUG_TRACE} )
add_definitions ( -DDEBUG_TRACE=1 )
endif()
if ( NOT DEFINED LIBRARY_TYPE )
set ( LIBRARY_TYPE SHARED )
endif()
if ( ${LIBRARY_TYPE} STREQUAL STATIC )
add_definitions ( -DSTATIC_BUILD=1 )
endif()
if ( NOT DEFINED HIP_API_STRING )
set ( HIP_API_STRING 1 )
endif()
@@ -169,6 +176,7 @@ message ( "-------------HIP-VDI: ${HIP_VDI}" )
message ( "-----CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}" )
message ( "---CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}" )
message ( "---------GPU_TARGETS: ${GPU_TARGETS}" )
message ( "--------LIBRARY_TYPE: ${LIBRARY_TYPE}" )
## Check the ROCm pathes
if ( "${HSA_RUNTIME_INC_PATH}" STREQUAL "" )
+1 -1
Просмотреть файл
@@ -9,7 +9,7 @@ set ( LIB_SRC
${LIB_DIR}/proxy/intercept_queue.cpp
${LIB_DIR}/util/hsa_rsrc_factory.cpp
)
add_library ( ${TARGET_LIB} SHARED ${LIB_SRC} )
add_library ( ${TARGET_LIB} ${LIBRARY_TYPE} ${LIB_SRC} )
target_include_directories ( ${TARGET_LIB} PRIVATE ${LIB_DIR} ${ROOT_DIR} ${ROOT_DIR}/inc ${HSA_RUNTIME_INC_PATH} ${HSA_RUNTIME_HSA_INC_PATH} ${HIP_INC_DIR} ${HCC_INC_DIR} ${HSA_KMT_INC_PATH} )
target_link_libraries( ${TARGET_LIB} PRIVATE ${HSA_RUNTIME_LIB} c stdc++ )
+89 -8
Просмотреть файл
@@ -105,6 +105,70 @@ class RocpApi {
};
// HIP runtime library loader class
#if STATIC_BUILD
__attribute__((weak)) hipError_t hipRegisterApiCallback(uint32_t id, void* fun, void* arg) { return hipErrorUnknown; }
__attribute__((weak)) hipError_t hipRemoveApiCallback(uint32_t id) { return hipErrorUnknown; }
__attribute__((weak)) hipError_t hipRegisterActivityCallback(uint32_t id, void* fun, void* arg) { return hipErrorUnknown; }
__attribute__((weak)) hipError_t hipRemoveActivityCallback(uint32_t id) { return hipErrorUnknown; }
__attribute__((weak)) const char* hipKernelNameRef(const hipFunction_t f) { return NULL; }
__attribute__((weak)) const char* hipKernelNameRefByPtr(const void* hostFunction, hipStream_t stream) { return NULL; }
__attribute__((weak)) int hipGetStreamDeviceId(hipStream_t stream) { return 0; }
__attribute__((weak)) const char* hipApiName(uint32_t id) { return NULL; }
class HipLoaderStatic {
public:
typedef std::mutex mutex_t;
typedef HipLoaderStatic loader_t;
typedef std::atomic<loader_t*> instance_t;
typedef hipError_t (RegisterApiCallback_t)(uint32_t id, void* fun, void* arg);
typedef hipError_t (RemoveApiCallback_t)(uint32_t id);
typedef hipError_t (RegisterActivityCallback_t)(uint32_t id, void* fun, void* arg);
typedef hipError_t (RemoveActivityCallback_t)(uint32_t id);
typedef const char* (KernelNameRef_t)(const hipFunction_t f);
typedef const char* (KernelNameRefByPtr_t)(const void* hostFunction, hipStream_t stream);
typedef int (GetStreamDeviceId_t)(hipStream_t stream);
typedef const char* (ApiName_t)(uint32_t id);
RegisterApiCallback_t* RegisterApiCallback;
RemoveApiCallback_t* RemoveApiCallback;
RegisterActivityCallback_t* RegisterActivityCallback;
RemoveActivityCallback_t* RemoveActivityCallback;
KernelNameRef_t* KernelNameRef;
KernelNameRefByPtr_t* KernelNameRefByPtr;
GetStreamDeviceId_t* GetStreamDeviceId;
ApiName_t* ApiName;
static inline loader_t& Instance() {
loader_t* obj = instance_.load(std::memory_order_acquire);
if (obj == NULL) {
std::lock_guard<mutex_t> lck(mutex_);
if (instance_.load(std::memory_order_relaxed) == NULL) {
obj = new loader_t();
instance_.store(obj, std::memory_order_release);
}
}
return *instance_;
}
bool Enabled() const { return true; }
private:
HipLoaderStatic() {
RegisterApiCallback = hipRegisterApiCallback;
RemoveApiCallback = hipRemoveApiCallback;
RegisterActivityCallback = hipRegisterActivityCallback;
RemoveActivityCallback = hipRemoveActivityCallback;
KernelNameRef = hipKernelNameRef;
KernelNameRefByPtr = hipKernelNameRefByPtr;
GetStreamDeviceId = hipGetStreamDeviceId;
ApiName = hipApiName;
}
static mutex_t mutex_;
static instance_t instance_;
};
#else
class HipApi {
public:
typedef BaseLoader<HipApi> Loader;
@@ -139,6 +203,7 @@ class HipApi {
ApiName = loader->GetFun<ApiName_t>("hipApiName");
}
};
#endif
// HCC runtime library loader class
#include "inc/roctracer_hcc.h"
@@ -205,32 +270,48 @@ class RocTxApi {
};
typedef BaseLoader<RocpApi> RocpLoader;
typedef BaseLoader<HipApi> HipLoader;
typedef BaseLoader<HccApi> HccLoader;
typedef BaseLoader<KfdApi> KfdLoader;
typedef BaseLoader<RocTxApi> RocTxLoader;
#if STATIC_BUILD
typedef HipLoaderStatic HipLoader;
#else
typedef BaseLoader<HipApi> HipLoaderShared;
typedef HipLoaderShared HipLoader;
#endif
} // namespace roctracer
#define LOADER_INSTANTIATE2(HIP_LIB, HCC_LIB) \
#define LOADER_INSTANTIATE_2() \
template<class T> typename roctracer::BaseLoader<T>::mutex_t roctracer::BaseLoader<T>::mutex_; \
template<class T> std::atomic<roctracer::BaseLoader<T>*> roctracer::BaseLoader<T>::instance_{}; \
template<class T> bool roctracer::BaseLoader<T>::to_load_ = false; \
template<class T> bool roctracer::BaseLoader<T>::to_check_open_ = true; \
template<class T> bool roctracer::BaseLoader<T>::to_check_symb_ = true; \
template<> const char* roctracer::RocpLoader::lib_name_ = "librocprofiler64.so"; \
template<> const char* roctracer::HipLoader::lib_name_ = HIP_LIB; \
template<> bool roctracer::HipLoader::to_check_open_ = false; \
template<> const char* roctracer::HccLoader::lib_name_ = HCC_LIB; \
template<> const char* roctracer::HccLoader::lib_name_ = "libamdhip64.so"; \
template<> bool roctracer::HccLoader::to_check_open_ = false; \
template<> const char* roctracer::KfdLoader::lib_name_ = "libkfdwrapper64.so"; \
template<> const char* roctracer::RocTxLoader::lib_name_ = "libroctx64.so"; \
template<> bool roctracer::RocTxLoader::to_load_ = true;
#if HIP_VDI
#define LOADER_INSTANTIATE() LOADER_INSTANTIATE2("libamdhip64.so", "libamdhip64.so");
#if STATIC_BUILD
#define LOADER_INSTANTIATE_HIP() \
roctracer::HipLoaderStatic::mutex_t roctracer::HipLoaderStatic::mutex_; \
roctracer::HipLoaderStatic::instance_t roctracer::HipLoaderStatic::instance_{};
#else
#define LOADER_INSTANTIATE() LOADER_INSTANTIATE2("libhip_hcc.so", "libmcwamp.so");
#define LOADER_INSTANTIATE_HIP() \
template<> const char* roctracer::HipLoaderShared::lib_name_ = "libamdhip64.so"; \
template<> bool roctracer::HipLoaderShared::to_check_open_ = false;
#endif
#if HIP_VDI
#define LOADER_INSTANTIATE() \
LOADER_INSTANTIATE_2(); \
LOADER_INSTANTIATE_HIP();
#else
#error HCC support dropped
#endif
#endif // SRC_CORE_LOADER_H_