Skip to content

Commit

Permalink
[PTI-LIB] Dynamically Load libpti.so.0.9
Browse files Browse the repository at this point in the history
Dynamically load libpti.so.0.9 that contains the implementation of
libpti_view.so. This prevents users from needing to have a direct
dependency on the Level Zero driver.

Up the VERSION to 0.9.1.

Signed-off-by: Schilling, Matthew <matthew.schilling@intel.com>
  • Loading branch information
mschilling0 authored Oct 1, 2024
1 parent 044cd28 commit ca292c1
Show file tree
Hide file tree
Showing 21 changed files with 568 additions and 74 deletions.
8 changes: 6 additions & 2 deletions .github/workflows/sdk_build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@ name: sdk-build-and-test

on:
push:
branches: [ "master" ]
branches:
- master
- release/**
paths:
- sdk/**
pull_request:
branches: [ "master" ]
branches:
- master
- release/**
paths:
- sdk/**

Expand Down
70 changes: 45 additions & 25 deletions sdk/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,16 @@ configure_file(${PROJECT_SOURCE_DIR}/include/pti/pti_version.h.in

find_package(Xpti)

if(PTI_DEBUG)
add_compile_definitions(PTI_DEBUG)
endif()

# https://cmake.org/cmake/help/latest/guide/importing-exporting/index.html
add_library(pti_all INTERFACE)
add_library(Pti::pti_all ALIAS pti_all)

add_library(pti SHARED "${PROJECT_SOURCE_DIR}/src/pti.cc"
"${PROJECT_SOURCE_DIR}/src/pti_version.cc")

add_library(Pti::pti ALIAS pti)

# formerly pti_view
add_library(pti MODULE "${PROJECT_SOURCE_DIR}/src/pti_view.cc")
# We might want to make our own, but for now use CMake's
# https://cmake.org/cmake/help/latest/module/GenerateExportHeader.html
include(GenerateExportHeader)
Expand All @@ -85,22 +86,24 @@ generate_export_header(pti EXPORT_FILE_NAME
# Suspect we need this since we're sharing across multiple targets
set(PTI_DEFINE_SYMBOL "pti_EXPORTS")

add_library(Pti::pti ALIAS pti)

target_include_directories(
pti
PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>"
"$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>"
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:${PTI_INSTALL_INCLUDE_DIR}>"
PRIVATE "${PROJECT_SOURCE_DIR}/src"
"${PROJECT_SOURCE_DIR}/src/syclpi"
PRIVATE "${PROJECT_SOURCE_DIR}/src" "${PROJECT_SOURCE_DIR}/src/syclpi"
"${PROJECT_SOURCE_DIR}/src/levelzero"
"${PROJECT_SOURCE_DIR}/src/utils")
"${PROJECT_SOURCE_DIR}/src/utils" "${PROJECT_SOURCE_DIR}/src/loader")

set_target_properties(
pti
PROPERTIES VERSION "${PROJECT_VERSION}"
SOVERSION "${PTI_API_SOVERSION}"
POSITION_INDEPENDENT_CODE ON)
POSITION_INDEPENDENT_CODE ON
DEFINE_SYMBOL "${PTI_DEFINE_SYMBOL}")

if (WIN32)
set_target_properties(
Expand All @@ -109,8 +112,29 @@ if (WIN32)
DEBUG_POSTFIX "d"
)
AddProjectVersionInfo(pti)
else()
set_target_properties(
pti
PROPERTIES SUFFIX ".so.${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
)
endif()

target_compile_definitions(
pti
PRIVATE $<$<TARGET_EXISTS:Xpti::xpti>:PTI_TRACE_SYCL>
$<$<TARGET_EXISTS:LevelZero::level-zero>:PTI_LEVEL_ZERO=1>
$<IF:$<BOOL:${PTI_ENABLE_LOGGING}>,
SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE,
SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_INFO>)

target_link_libraries(
pti
PUBLIC Threads::Threads
PRIVATE $<TARGET_NAME_IF_EXISTS:Xpti::xpti>
LevelZero::level-zero
spdlog::spdlog_header_only
${CMAKE_DL_LIBS})

# Why version 1.14.0?
# It is an IPEX requirement for PTI to link against the LTS version of the
# Level Zero Loader.
Expand All @@ -134,10 +158,16 @@ if(NOT TARGET LevelZero::level-zero)
GetLevelZero()
endif()

FindHeadersPath(
pti "${PROJECT_SOURCE_DIR}/src/levelzero/gen_tracing_callbacks.py"
"tracing.gen" gen_tracing_header LevelZero::level-zero)

find_package(Threads REQUIRED)

add_library(pti_view SHARED "${PROJECT_SOURCE_DIR}/src/pti_view.cc"
"${PROJECT_SOURCE_DIR}/src/pti_version.cc")
add_library(pti_view SHARED "${PROJECT_SOURCE_DIR}/src/xpti_adapter.cc"
"${PROJECT_SOURCE_DIR}/src/pti.cc"
"${PROJECT_SOURCE_DIR}/src/pti_version.cc"
"${PROJECT_SOURCE_DIR}/src/pti_view_load.cc")

add_library(Pti::pti_view ALIAS pti_view)

Expand Down Expand Up @@ -169,30 +199,20 @@ endif()

target_compile_definitions(
pti_view
PRIVATE $<$<TARGET_EXISTS:Xpti::xpti>:PTI_TRACE_SYCL>
$<$<TARGET_EXISTS:LevelZero::level-zero>:PTI_LEVEL_ZERO=1>
PRIVATE PTI_VIEW_CORE_LIB_NAME=$<TARGET_FILE_NAME:pti>
$<IF:$<BOOL:${PTI_ENABLE_LOGGING}>,
SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_TRACE,
SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_INFO>)

if(PTI_DEBUG)
add_compile_definitions(PTI_DEBUG)
endif()

target_link_libraries(
pti_view
PUBLIC Threads::Threads Pti::pti
PRIVATE $<TARGET_NAME_IF_EXISTS:Xpti::xpti>
LevelZero::level-zero
PUBLIC
PRIVATE LevelZero::headers
spdlog::spdlog_header_only
${CMAKE_DL_LIBS})

FindHeadersPath(
pti_view "${PROJECT_SOURCE_DIR}/src/levelzero/gen_tracing_callbacks.py"
"tracing.gen" gen_tracing_header LevelZero::level-zero)

target_link_libraries(
pti_all INTERFACE Pti::pti_view Pti::pti)
pti_all INTERFACE Pti::pti_view)

include(CTest)
if(BUILD_TESTING AND PTI_BUILD_TESTING)
Expand Down
13 changes: 8 additions & 5 deletions sdk/CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -293,37 +293,40 @@
"configurePreset": "linux-icpx-release",
"displayName": "Linux Release x64 IntelLLVM Tests",
"environment": {
"LD_LIBRARY_PATH": "${sourceDir}/build/lib:$penv{LD_LIBRARY_PATH}"
"LD_LIBRARY_PATH": "${sourceDir}/build-${presetName}/lib:$penv{LD_LIBRARY_PATH}"
}
},
{
"name": "linux-icpx-debug",
"configurePreset": "linux-icpx-debug",
"displayName": "Linux Debug x64 IntelLLVM Tests",
"environment": {
"LD_LIBRARY_PATH": "${sourceDir}/build-debug/lib:$penv{LD_LIBRARY_PATH}"
"LD_LIBRARY_PATH": "${sourceDir}/build-${presetName}/lib:$penv{LD_LIBRARY_PATH}"
}
},
{
"name": "linux-icpx-make-release",
"configurePreset": "linux-icpx-make-release",
"displayName": "Linux Release x64 IntelLLVM Tests",
"environment": {
"LD_LIBRARY_PATH": "${sourceDir}/build/lib:$penv{LD_LIBRARY_PATH}"
"LD_LIBRARY_PATH": "${sourceDir}/build-${presetName}/lib:$penv{LD_LIBRARY_PATH}"
}
},
{
"name": "linux-icpx-make-debug",
"configurePreset": "linux-icpx-make-debug",
"displayName": "Linux Debug x64 IntelLLVM Tests",
"environment": {
"LD_LIBRARY_PATH": "${sourceDir}/build/lib:$penv{LD_LIBRARY_PATH}"
"LD_LIBRARY_PATH": "${sourceDir}/build-${presetName}/lib:$penv{LD_LIBRARY_PATH}"
}
},
{
"name": "linux-oneAPI-release",
"configurePreset": "linux-oneAPI-release",
"displayName": "Linux oneAPI x64 Release Tests"
"displayName": "Linux oneAPI x64 Release Tests",
"environment": {
"LD_LIBRARY_PATH": "${sourceDir}/build-${presetName}/lib:$penv{LD_LIBRARY_PATH}"
}
},
{
"name": "linux-asan",
Expand Down
2 changes: 1 addition & 1 deletion sdk/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.9.0
0.9.1
11 changes: 10 additions & 1 deletion sdk/cmake/Modules/FindLevelZero.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ This module provides the following imported targets, if found:

``LevelZero::level-zero``
Level Zero library
``LevelZero::headers``
Level Zero Headers

Result Variables
^^^^^^^^^^^^^^^^
Expand Down Expand Up @@ -93,7 +95,7 @@ include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
LevelZero
FOUND_VAR LevelZero_FOUND
REQUIRED_VARS LevelZero_LIBRARY LevelZero_INCLUDE_DIR
REQUIRED_VARS LevelZero_INCLUDE_DIR
VERSION_VAR LevelZero_VERSION)

if(LevelZero_FOUND AND NOT TARGET LevelZero::level-zero)
Expand All @@ -105,6 +107,13 @@ if(LevelZero_FOUND AND NOT TARGET LevelZero::level-zero)
INTERFACE_INCLUDE_DIRECTORIES "${LevelZero_INCLUDE_DIR}")
endif()

if(LevelZero_FOUND AND NOT TARGET LevelZero::headers)
add_library(LevelZero::headers INTERFACE IMPORTED)
set_target_properties(
LevelZero::headers
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LevelZero_INCLUDE_DIR}")
endif()

mark_as_advanced(LevelZero_INCLUDE_DIR LevelZero_LIBRARY)

if(DEFINED LevelZero_VERSION)
Expand Down
6 changes: 5 additions & 1 deletion sdk/cmake/Modules/macros.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -1042,7 +1042,7 @@ macro(GetSpdlog)
FetchContent_MakeAvailable(fmt spdlog)

# Prevent fmt from using exceptions because it could throw while logging.
# Disable warning in fmt due to our usage of EHsc.
# Disable warning in fmt due to our usage of EHsc.
target_compile_definitions(fmt PUBLIC FMT_EXCEPTIONS=0)
target_compile_options(fmt PUBLIC $<$<CXX_COMPILER_ID:MSVC>:/wd6285 $<$<CONFIG:Release>:/wd4702 /wd6385>>)
target_compile_definitions(fmt-header-only INTERFACE FMT_EXCEPTIONS=0)
Expand Down Expand Up @@ -1179,6 +1179,10 @@ macro(GetLevelZero)
"system")
# Add Alias target to treat it as if we found it via find_packge
add_library(LevelZero::level-zero ALIAS pti_ze_loader)
add_library(LevelZero::headers INTERFACE IMPORTED)
set_target_properties(
LevelZero::headers
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${LZ_INCLUDE_DIR}")
endif()
endmacro()

Expand Down
6 changes: 3 additions & 3 deletions sdk/samples/dlworkloads/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ if (NOT TARGET Pti::pti_view)
find_package(Pti REQUIRED)
endif()

if (NOT TARGET LevelZero::level-zero)
find_package(LevelZero::level-zero REQUIRED)
if (NOT TARGET LevelZero::headers)
find_package(LevelZero REQUIRED)
endif()

target_include_directories(dlworkload SYSTEM PUBLIC $<TARGET_PROPERTY:MKL::MKL,INTERFACE_INCLUDE_DIRECTORIES>)
target_link_libraries(dlworkload DNNL::dnnl MKL::MKL MKL::MKL_SYCL oneDPL Pti::pti_view LevelZero::level-zero)
target_link_libraries(dlworkload DNNL::dnnl MKL::MKL MKL::MKL_SYCL oneDPL Pti::pti_view LevelZero::headers)
6 changes: 3 additions & 3 deletions sdk/samples/dpc_gemm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ endif()

find_package(LevelZero)

if (NOT TARGET LevelZero::level-zero)
message(WARNING "${PROJECT_NAME} pti requires level zero")
if (NOT TARGET LevelZero::headers)
message(WARNING "${PROJECT_NAME} pti requires level zero headers")
return()
endif()

Expand All @@ -35,4 +35,4 @@ if (NOT TARGET Pti::pti_view)
find_package(Pti REQUIRED)
endif()

target_link_libraries(dpc_gemm PUBLIC Pti::pti_view LevelZero::level-zero)
target_link_libraries(dpc_gemm PUBLIC Pti::pti_view PRIVATE LevelZero::headers)
5 changes: 3 additions & 2 deletions sdk/samples/dpc_gemm_threaded/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ target_link_options(dpc_gemm_threaded PRIVATE -fsycl -gline-tables-only)
target_include_directories(dpc_gemm_threaded PRIVATE
"${PROJECT_SOURCE_DIR}/../../src/utils"
"${PROJECT_SOURCE_DIR}/../samples_utilities")
if (NOT TARGET LevelZero::level-zero)
if (NOT TARGET LevelZero::headers)
find_package(LevelZero REQUIRED)
endif()

Expand All @@ -36,4 +36,5 @@ if (NOT TARGET Pti::pti_view)
find_package(Pti REQUIRED)
endif()

target_link_libraries(dpc_gemm_threaded PUBLIC Threads::Threads Pti::pti_view LevelZero::level-zero)
target_link_libraries(dpc_gemm_threaded PUBLIC Threads::Threads Pti::pti_view
LevelZero::headers)
2 changes: 1 addition & 1 deletion sdk/samples/iso3dfd_dpcpp/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ target_link_options(iso3dfd.exe PUBLIC -O3 -fsycl)
target_include_directories(
iso3dfd.exe PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../samples_utilities
${CMAKE_CURRENT_SOURCE_DIR}/../include)
target_link_libraries(iso3dfd.exe PUBLIC Pti::pti_view LevelZero::level-zero DevUtilities::utils)
target_link_libraries(iso3dfd.exe PUBLIC Pti::pti_view DevUtilities::utils LevelZero::headers)

if(SHARED_KERNEL)
target_compile_definitions(iso3dfd.exe PUBLIC USED_SHARED)
Expand Down
4 changes: 2 additions & 2 deletions sdk/samples/onemkl_gemm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@ if (NOT TARGET Pti::pti_view)
find_package(Pti REQUIRED)
endif()

if (NOT TARGET LevelZero::level-zero)
if (NOT TARGET LevelZero::headers)
find_package(LevelZero REQUIRED)
endif()

target_link_libraries(onemkl_gemm_exe PUBLIC MKL::MKL MKL::MKL_SYCL Pti::pti_view LevelZero::level-zero)
target_link_libraries(onemkl_gemm_exe PUBLIC MKL::MKL MKL::MKL_SYCL Pti::pti_view LevelZero::headers)
target_include_directories(onemkl_gemm_exe
PRIVATE "${PROJECT_SOURCE_DIR}/../../src/utils"
"${PROJECT_SOURCE_DIR}/../samples_utilities")
5 changes: 3 additions & 2 deletions sdk/src/levelzero/ze_collector.h
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,9 @@ class ZeCollector {
#if !defined(_WIN32)
// TODO Looks on Windows due to not specified DLLs unload order we hit assert here
if (tracer_ != nullptr) {
ze_result_t status = zelTracerDestroy(tracer_);
PTI_ASSERT(status == ZE_RESULT_SUCCESS);
[[maybe_unused]] ze_result_t status = zelTracerDestroy(tracer_);
// PTI_ASSERT(status == ZE_RESULT_SUCCESS);
tracer_ = nullptr;
}
#endif
}
Expand Down
Loading

0 comments on commit ca292c1

Please sign in to comment.