Support ROCP_TOOL_LIBRARIES env + librocprofiler-sdk.so (#48)

* Fix support for version in find_package(rocprofiler-register <version>)

* Update lib/rocprofiler-register/rocprofiler-register.cpp

- change rocprofiler library name to librocprofiler-sdk.so
- add helper function rocp_load_rocprofiler_lib for dlopen of rocprofiler library
- support ROCP_TOOL_LIBRARIES environment variable
- reworked rocprofiler_register_error_string

* Update tests/rocprofiler

- rename library to librocprofiler-sdk
- remove rocprofiler_configure within librocprofiler-sdk.so

* Add tests/generic-tool

- provides implementation of rocprofiler_configure

* Update tests/CMakeLists.txt

- use libgeneric-tool.so
- LD_PRELOAD libgeneric-tool.so instead of librocprofiler
- Add tests which use ROCP_TOOL_LIBRARIES

* Update tests/generic-tool/generic-tool.cpp

- include <cstdint>
Šī revīzija ir iekļauta:
Jonathan R. Madsen authored and GitHub committed 2023-11-29 20:58:18 -06:00
1 vecāks b04c8478f2
revīzija ab02cb6570
8 files changed
+254 -120

No files matched your search

+54 -5
Parādīt failu
@@ -72,6 +72,11 @@ add_subdirectory(amdhip)
add_subdirectory(roctx)
add_subdirectory(rocprofiler)
#
# mock tool library
#
add_subdirectory(generic-tool)
#
# common to multiple tests
#
@@ -90,13 +95,20 @@ target_compile_definitions(rocprofiler-register-tests-strong
add_library(rocprofiler-register-tests-weak INTERFACE)
target_compile_definitions(rocprofiler-register-tests-weak INTERFACE ROCP_REG_TEST_WEAK=1)
add_library(rocprofiler-register-tests-tool INTERFACE)
target_link_options(rocprofiler-register-tests-tool INTERFACE -Wl,--no-as-needed)
target_link_libraries(rocprofiler-register-tests-tool
INTERFACE generic-tool::generic-tool)
add_library(rocprofiler-register-tests-rocp INTERFACE)
target_link_options(rocprofiler-register-tests-rocp INTERFACE -Wl,--no-as-needed)
target_link_libraries(rocprofiler-register-tests-rocp INTERFACE rocprofiler::rocprofiler)
target_link_libraries(rocprofiler-register-tests-rocp
INTERFACE rocprofiler::rocprofiler generic-tool::generic-tool)
add_library(rocprofiler-register::tests-common ALIAS rocprofiler-register-tests-common)
add_library(rocprofiler-register::tests-strong ALIAS rocprofiler-register-tests-strong)
add_library(rocprofiler-register::tests-weak ALIAS rocprofiler-register-tests-weak)
add_library(rocprofiler-register::tests-tool ALIAS rocprofiler-register-tests-tool)
add_library(rocprofiler-register::tests-rocp ALIAS rocprofiler-register-tests-rocp)
#
@@ -146,7 +158,10 @@ function(rocp_register_test_executable _NAME)
rocp_register_add_test(${_NAME} ${_NAME} "" "${RRTE_CORE_PASS_REGEX}"
"${RRTE_CORE_FAIL_REGEX}")
rocp_register_add_test(${_NAME}-preload ${_NAME} "LD_PRELOAD=librocprofiler64.so"
rocp_register_add_test(${_NAME}-preload ${_NAME} "LD_PRELOAD=libgeneric-tool.so"
"${RRTE_PRELOAD_PASS_REGEX}" "${RRTE_PRELOAD_FAIL_REGEX}")
rocp_register_add_test(${_NAME}-env ${_NAME} "ROCP_TOOL_LIBRARIES=libgeneric-tool.so"
"${RRTE_PRELOAD_PASS_REGEX}" "${RRTE_PRELOAD_FAIL_REGEX}")
rocp_register_add_test(${_NAME}-wrap ${_NAME} "ROCP_REG_TEST_WRAP=1"
@@ -154,7 +169,12 @@ function(rocp_register_test_executable _NAME)
rocp_register_add_test(
${_NAME}-preload-wrap ${_NAME}
"LD_PRELOAD=librocprofiler64.so;ROCP_REG_TEST_WRAP=1"
"LD_PRELOAD=libgeneric-tool.so;ROCP_REG_TEST_WRAP=1"
"${RRTE_PRELOAD_WRAP_PASS_REGEX}" "${RRTE_PRELOAD_WRAP_FAIL_REGEX}")
rocp_register_add_test(
${_NAME}-env-wrap ${_NAME}
"ROCP_TOOL_LIBRARIES=libgeneric-tool.so;ROCP_REG_TEST_WRAP=1"
"${RRTE_PRELOAD_WRAP_PASS_REGEX}" "${RRTE_PRELOAD_WRAP_FAIL_REGEX}")
endfunction()
@@ -189,6 +209,21 @@ rocp_register_test_executable(
".fwd.hpp. dlopen libamdhip64.so, 1\n.fwd.hpp. dlopen libroctx64.so, 1\n.rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.rocprofiler.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.rocprofiler.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.rocprofiler.cpp..push. thread-main\n.rocprofiler.cpp..pop. thread-main\n"
)
rocp_register_test_executable(
test-amdhip-roctx-tool
SOURCES test-amdhip-roctx.cpp
LIBRARIES rocprofiler-register::tests-strong amdhip::amdhip roctx::roctx
rocprofiler-register::tests-tool
CORE_PASS_REGEX
".rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.hsa-runtime.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.amdhip.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.roctx.cpp..push. thread-main\n.roctx.cpp..pop. thread-main\n"
PRELOAD_PASS_REGEX
".rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.hsa-runtime.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.amdhip.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.roctx.cpp..push. thread-main\n.roctx.cpp..pop. thread-main\n"
WRAP_PASS_REGEX
".rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.rocprofiler.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.rocprofiler.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.rocprofiler.cpp..push. thread-main\n.rocprofiler.cpp..pop. thread-main\n"
PRELOAD_WRAP_PASS_REGEX
".rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.rocprofiler.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.rocprofiler.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.rocprofiler.cpp..push. thread-main\n.rocprofiler.cpp..pop. thread-main\n"
)
rocp_register_test_executable(
test-amdhip-roctx-rocp
SOURCES test-amdhip-roctx.cpp
@@ -204,6 +239,20 @@ rocp_register_test_executable(
".rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.rocprofiler.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.rocprofiler.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.rocprofiler.cpp..push. thread-main\n.rocprofiler.cpp..pop. thread-main\n"
)
rocp_register_test_executable(
test-amdhip-roctx-weak-tool
SOURCES test-amdhip-roctx.cpp
LIBRARIES rocprofiler-register::tests-weak rocprofiler-register::tests-tool
CORE_PASS_REGEX
".fwd.hpp. dlopen libamdhip64.so, 1\n.fwd.hpp. dlopen libroctx64.so, 1\n.rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.hsa-runtime.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.amdhip.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.roctx.cpp..push. thread-main\n.roctx.cpp..pop. thread-main\n"
PRELOAD_PASS_REGEX
".fwd.hpp. dlopen libamdhip64.so, 1\n.fwd.hpp. dlopen libroctx64.so, 1\n.rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.hsa-runtime.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.amdhip.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.roctx.cpp..push. thread-main\n.roctx.cpp..pop. thread-main\n"
WRAP_PASS_REGEX
".fwd.hpp. dlopen libamdhip64.so, 1\n.fwd.hpp. dlopen libroctx64.so, 1\n.rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.rocprofiler.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.rocprofiler.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.rocprofiler.cpp..push. thread-main\n.rocprofiler.cpp..pop. thread-main\n"
PRELOAD_WRAP_PASS_REGEX
".fwd.hpp. dlopen libamdhip64.so, 1\n.fwd.hpp. dlopen libroctx64.so, 1\n.rocprofiler.cpp. rocp_ctor\n.rocprofiler.cpp. hsa :: 20100 :: 0 :: 1\n.hsa-runtime.cpp. hsa identifier 0\n.rocprofiler.cpp. hsa_init\n.rocprofiler.cpp. hip :: 60001 :: 0 :: 1\n.amdhip.cpp. hip identifier 8\n.rocprofiler.cpp. hip_init\n.rocprofiler.cpp. roctx :: 40601 :: 0 :: 1\n.roctx.cpp. roctx identifier 16\n.rocprofiler.cpp..push. thread-main\n.rocprofiler.cpp..pop. thread-main\n"
)
rocp_register_test_executable(
test-amdhip-roctx-weak-rocp
SOURCES test-amdhip-roctx.cpp
@@ -456,7 +505,7 @@ set_tests_properties(
test-rocprofiler-register-library-base-path
PROPERTIES
ENVIRONMENT
"LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY};ROCPROFILER_REGISTER_LIBRARY=librocprofiler64.so;ROCPROFILER_REGISTER_SECURE=yes;ROCPROFILER_REGISTER_VERBOSE=3;ROCPROFILER_REGISTER_MONOCHROME=true"
"LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY};ROCPROFILER_REGISTER_LIBRARY=librocprofiler-sdk.so.0;ROCPROFILER_REGISTER_SECURE=yes;ROCPROFILER_REGISTER_VERBOSE=3;ROCPROFILER_REGISTER_MONOCHROME=true"
LABELS
"dlopen;secure")
@@ -469,6 +518,6 @@ set_tests_properties(
test-rocprofiler-register-library-absolute-path
PROPERTIES
ENVIRONMENT
"LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY};ROCPROFILER_REGISTER_LIBRARY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/librocprofiler64.so;ROCPROFILER_REGISTER_SECURE=yes;ROCPROFILER_REGISTER_VERBOSE=3;ROCPROFILER_REGISTER_MONOCHROME=true"
"LD_LIBRARY_PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY};ROCPROFILER_REGISTER_LIBRARY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/librocprofiler-sdk.so.0;ROCPROFILER_REGISTER_SECURE=yes;ROCPROFILER_REGISTER_VERBOSE=3;ROCPROFILER_REGISTER_MONOCHROME=true"
LABELS
"dlopen;secure")
+11
Parādīt failu
@@ -0,0 +1,11 @@
#
# mock generic-tool library
#
add_library(generic-tool SHARED)
add_library(generic-tool::generic-tool ALIAS generic-tool)
target_sources(generic-tool PRIVATE generic-tool.cpp)
target_include_directories(
generic-tool PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
# target_link_libraries(generic-tool PRIVATE rocprofiler)
rocp_register_strip_target(generic-tool)
+46
Parādīt failu
@@ -0,0 +1,46 @@
#include <pthread.h>
#include <cstdint>
#include <stdexcept>
#include <string_view>
extern "C" {
typedef struct
{
const char* name; ///< clients should set this value for debugging
const uint32_t handle; ///< internal handle
} rocprofiler_client_id_t;
typedef void (*rocprofiler_client_finalize_t)(rocprofiler_client_id_t);
typedef int (*rocprofiler_tool_initialize_t)(rocprofiler_client_finalize_t finalize_func,
void* tool_data);
typedef void (*rocprofiler_tool_finalize_t)(void* tool_data);
typedef struct
{
size_t size; ///< in case of future extensions
rocprofiler_tool_initialize_t initialize; ///< context creation
rocprofiler_tool_finalize_t finalize; ///< cleanup
void* tool_data; ///< data to provide to init and fini callbacks
} rocprofiler_tool_configure_result_t;
rocprofiler_tool_configure_result_t*
rocprofiler_configure(uint32_t, const char*, uint32_t, rocprofiler_client_id_t*)
__attribute__((visibility("default")));
rocprofiler_tool_configure_result_t*
rocprofiler_configure(uint32_t version,
const char* runtime_version,
uint32_t priority,
rocprofiler_client_id_t* tool_id)
{
(void) version;
(void) runtime_version;
(void) priority;
(void) tool_id;
return nullptr;
}
}
+3 -3
Parādīt failu
@@ -8,7 +8,7 @@ target_include_directories(rocprofiler PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
set_target_properties(
rocprofiler
PROPERTIES OUTPUT_NAME rocprofiler64
SOVERSION 2
VERSION 2.0.0)
PROPERTIES OUTPUT_NAME rocprofiler-sdk
SOVERSION 0
VERSION 0.0.0)
rocp_register_strip_target(rocprofiler)
+15 -39
Parādīt failu
@@ -3,6 +3,7 @@
#include <hsa-runtime/hsa-runtime.hpp>
#include <roctx/roctx.hpp>
#include <dlfcn.h>
#include <pthread.h>
#include <stdexcept>
#include <string_view>
@@ -42,49 +43,10 @@ roctx_range_pop(const char* name)
} // namespace rocprofiler
extern "C" {
typedef struct
{
const char* name; ///< clients should set this value for debugging
const uint32_t handle; ///< internal handle
} rocprofiler_client_id_t;
typedef void (*rocprofiler_client_finalize_t)(rocprofiler_client_id_t);
typedef int (*rocprofiler_tool_initialize_t)(rocprofiler_client_finalize_t finalize_func,
void* tool_data);
typedef void (*rocprofiler_tool_finalize_t)(void* tool_data);
typedef struct
{
size_t size; ///< in case of future extensions
rocprofiler_tool_initialize_t initialize; ///< context creation
rocprofiler_tool_finalize_t finalize; ///< cleanup
void* tool_data; ///< data to provide to init and fini callbacks
} rocprofiler_tool_configure_result_t;
rocprofiler_tool_configure_result_t*
rocprofiler_configure(uint32_t, const char*, uint32_t, rocprofiler_client_id_t*)
__attribute__((visibility("default")));
int
rocprofiler_set_api_table(const char*, uint64_t, uint64_t, void**, uint64_t)
__attribute__((visibility("default")));
rocprofiler_tool_configure_result_t*
rocprofiler_configure(uint32_t version,
const char* runtime_version,
uint32_t priority,
rocprofiler_client_id_t* tool_id)
{
(void) version;
(void) runtime_version;
(void) priority;
(void) tool_id;
return nullptr;
}
int
rocprofiler_set_api_table(const char* name,
uint64_t lib_version,
@@ -99,6 +61,20 @@ rocprofiler_set_api_table(const char* name,
lib_instance,
num_tables);
auto* _tool_libs = std::getenv("ROCP_TOOL_LIBRARIES");
if(_tool_libs)
{
auto* _handle = dlopen(_tool_libs, RTLD_GLOBAL | RTLD_LAZY);
if(!_handle)
throw std::runtime_error{ std::string{ "error opening tool library " } +
_tool_libs };
auto* _sym = dlsym(_handle, "rocprofiler_configure");
if(!_sym)
throw std::runtime_error{ std::string{ "tool library " } +
std::string{ _tool_libs } +
" did not contain rocprofiler_configure symbol" };
}
using hip_table_t = hip::HipApiTable;
using hsa_table_t = hsa::HsaApiTable;
using roctx_table_t = roctx::ROCTxApiTable;