From 6ca745c8c95697377069add351814e4ba8b223cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Chor=C4=85=C5=BCewicz?= Date: Mon, 11 Mar 2024 13:42:15 -0700 Subject: [PATCH 1/6] Bump UMF version and update integration code --- source/adapters/cuda/usm.cpp | 6 +-- source/adapters/cuda/usm.hpp | 6 +++ source/adapters/hip/usm.cpp | 6 +-- source/adapters/hip/usm.hpp | 6 +++ source/adapters/level_zero/context.cpp | 8 ++-- source/adapters/level_zero/usm.cpp | 8 ++-- source/adapters/level_zero/usm.hpp | 6 +++ source/common/CMakeLists.txt | 14 ++++--- source/common/umf_helpers.hpp | 40 ++++++++----------- .../device/device_adapter_level_zero-v2.match | 2 +- 10 files changed, 58 insertions(+), 44 deletions(-) diff --git a/source/adapters/cuda/usm.cpp b/source/adapters/cuda/usm.cpp index a7b3a60eac..7b7d488d55 100644 --- a/source/adapters/cuda/usm.cpp +++ b/source/adapters/cuda/usm.cpp @@ -398,7 +398,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, HostMemPool = umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host]) .second; @@ -407,7 +407,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, umf::memoryProviderMakeUnique(Context, Device) .second; DeviceMemPool = umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs .Configs[usm::DisjointPoolMemType::Device]) .second; @@ -415,7 +415,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, umf::memoryProviderMakeUnique(Context, Device) .second; SharedMemPool = umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs .Configs[usm::DisjointPoolMemType::Shared]) .second; diff --git a/source/adapters/cuda/usm.hpp b/source/adapters/cuda/usm.hpp index e5d1f7fbaa..7c6a2ea666 100644 --- a/source/adapters/cuda/usm.hpp +++ b/source/adapters/cuda/usm.hpp @@ -81,6 +81,12 @@ class USMMemoryProvider { umf_result_t purge_force(void *, size_t) { return UMF_RESULT_ERROR_NOT_SUPPORTED; }; + umf_result_t allocation_merge(void *, void *, size_t) { + return UMF_RESULT_ERROR_UNKNOWN; + } + umf_result_t allocation_split(void *, size_t, size_t) { + return UMF_RESULT_ERROR_UNKNOWN; + } virtual const char *get_name() = 0; virtual ~USMMemoryProvider() = default; diff --git a/source/adapters/hip/usm.cpp b/source/adapters/hip/usm.cpp index 79337ba87a..d58a8eb530 100644 --- a/source/adapters/hip/usm.cpp +++ b/source/adapters/hip/usm.cpp @@ -340,7 +340,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, HostMemPool = umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host]) .second; @@ -349,7 +349,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, umf::memoryProviderMakeUnique(Context, Device) .second; DeviceMemPool = umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs .Configs[usm::DisjointPoolMemType::Device]) .second; @@ -358,7 +358,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, umf::memoryProviderMakeUnique(Context, Device) .second; SharedMemPool = umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs .Configs[usm::DisjointPoolMemType::Shared]) .second; diff --git a/source/adapters/hip/usm.hpp b/source/adapters/hip/usm.hpp index a1c3964263..2149ac26ba 100644 --- a/source/adapters/hip/usm.hpp +++ b/source/adapters/hip/usm.hpp @@ -81,6 +81,12 @@ class USMMemoryProvider { umf_result_t purge_force(void *, size_t) { return UMF_RESULT_ERROR_NOT_SUPPORTED; }; + umf_result_t allocation_merge(void *, void *, size_t) { + return UMF_RESULT_ERROR_UNKNOWN; + } + umf_result_t allocation_split(void *, size_t, size_t) { + return UMF_RESULT_ERROR_UNKNOWN; + } virtual const char *get_name() = 0; virtual ~USMMemoryProvider() = default; diff --git a/source/adapters/level_zero/context.cpp b/source/adapters/level_zero/context.cpp index fc55b532b7..22adfa96ed 100644 --- a/source/adapters/level_zero/context.cpp +++ b/source/adapters/level_zero/context.cpp @@ -195,7 +195,7 @@ ur_result_t ur_context_handle_t_::initialize() { DeviceMemPools.emplace( std::piecewise_construct, std::make_tuple(Device->ZeDevice), std::make_tuple(umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &DisjointPoolConfigInstance .Configs[usm::DisjointPoolMemType::Device]) .second)); @@ -206,7 +206,7 @@ ur_result_t ur_context_handle_t_::initialize() { SharedMemPools.emplace( std::piecewise_construct, std::make_tuple(Device->ZeDevice), std::make_tuple(umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &DisjointPoolConfigInstance .Configs[usm::DisjointPoolMemType::Shared]) .second)); @@ -218,7 +218,7 @@ ur_result_t ur_context_handle_t_::initialize() { std::piecewise_construct, std::make_tuple(Device->ZeDevice), std::make_tuple( umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &DisjointPoolConfigInstance .Configs[usm::DisjointPoolMemType::SharedReadOnly]) .second)); @@ -271,7 +271,7 @@ ur_result_t ur_context_handle_t_::initialize() { .second; HostMemPool = umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &DisjointPoolConfigInstance.Configs[usm::DisjointPoolMemType::Host]) .second; diff --git a/source/adapters/level_zero/usm.cpp b/source/adapters/level_zero/usm.cpp index 2f05bfaa57..616b4c4d57 100644 --- a/source/adapters/level_zero/usm.cpp +++ b/source/adapters/level_zero/usm.cpp @@ -827,7 +827,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, HostMemPool = umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs.Configs[usm::DisjointPoolMemType::Host]) .second; @@ -838,7 +838,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, DeviceMemPools.emplace( std::piecewise_construct, std::make_tuple(device), std::make_tuple(umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs .Configs[usm::DisjointPoolMemType::Device]) .second)); @@ -849,7 +849,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, SharedMemPools.emplace( std::piecewise_construct, std::make_tuple(device), std::make_tuple(umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs .Configs[usm::DisjointPoolMemType::Shared]) .second)); @@ -861,7 +861,7 @@ ur_usm_pool_handle_t_::ur_usm_pool_handle_t_(ur_context_handle_t Context, std::piecewise_construct, std::make_tuple(device), std::make_tuple( umf::poolMakeUniqueFromOps( - &UMF_DISJOINT_POOL_OPS, std::move(MemProvider), + umfDisjointPoolOps(), std::move(MemProvider), &this->DisjointPoolConfigs .Configs[usm::DisjointPoolMemType::SharedReadOnly]) .second)); diff --git a/source/adapters/level_zero/usm.hpp b/source/adapters/level_zero/usm.hpp index 6d61e43ee8..1f230a5f55 100644 --- a/source/adapters/level_zero/usm.hpp +++ b/source/adapters/level_zero/usm.hpp @@ -85,6 +85,12 @@ class USMMemoryProviderBase { virtual umf_result_t purge_force(void *, size_t) { return UMF_RESULT_ERROR_NOT_SUPPORTED; }; + umf_result_t allocation_merge(void *, void *, size_t) { + return UMF_RESULT_ERROR_UNKNOWN; + } + umf_result_t allocation_split(void *, size_t, size_t) { + return UMF_RESULT_ERROR_UNKNOWN; + } virtual const char *get_name() { return ""; }; virtual ~USMMemoryProviderBase() = default; }; diff --git a/source/common/CMakeLists.txt b/source/common/CMakeLists.txt index 09591f3b32..0e5e7a7956 100644 --- a/source/common/CMakeLists.txt +++ b/source/common/CMakeLists.txt @@ -26,8 +26,8 @@ if (NOT DEFINED UMF_REPO) endif() if (NOT DEFINED UMF_TAG) - # Merge pull request #119 from ldorau/Fix_arena_extent_split_and_arena_extent_merge - set(UMF_TAG 9bf7a0dc4dff76844e10edbb5c6e9d917536ef6d) + # Merge pull request #637 from kswiecicki/fix-dpool-poison-macro + set(UMF_TAG 1c34aae4c804e133c1273f30b1d6441ebb766f2f) endif() message(STATUS "Will fetch Unified Memory Framework from ${UMF_REPO}") @@ -43,16 +43,18 @@ if(UR_BUILD_TESTS) else() set(UMF_BUILD_TESTS OFF CACHE INTERNAL "Build UMF tests") endif() +# TODO: L0 provider not ready yet +set(UMF_BUILD_LEVEL_ZERO_PROVIDER OFF CACHE INTERNAL "Build Level Zero Provider") +set(UMF_BUILD_SHARED_LIBRARY ${UMF_BUILD_SHARED_LIBRARY} CACHE INTERNAL "Build UMF shared library") set(UMF_BUILD_LIBUMF_POOL_DISJOINT ON CACHE INTERNAL "Build Disjoint Pool") -set(UMF_BUILD_OS_MEMORY_PROVIDER OFF CACHE INTERNAL "Build OS Provider") FetchContent_MakeAvailable(unified-memory-framework) FetchContent_GetProperties(unified-memory-framework) target_link_libraries(ur_common PUBLIC - unified-memory-framework::umf - unified-memory-framework::headers - unified-memory-framework::disjoint_pool + umf::umf + umf::headers + umf::disjoint_pool ${CMAKE_DL_LIBS} ${PROJECT_NAME}::headers ) diff --git a/source/common/umf_helpers.hpp b/source/common/umf_helpers.hpp index 2cbebf3670..c381d05af7 100644 --- a/source/common/umf_helpers.hpp +++ b/source/common/umf_helpers.hpp @@ -69,7 +69,7 @@ umf_result_t initialize(T *obj, ArgsTuple &&args) { template umf_memory_pool_ops_t poolMakeUniqueOps() { - umf_memory_pool_ops_t ops; + umf_memory_pool_ops_t ops = {}; ops.version = UMF_VERSION_CURRENT; ops.initialize = [](umf_memory_provider_handle_t provider, void *params, @@ -106,7 +106,7 @@ umf_memory_pool_ops_t poolMakeUniqueOps() { /// forwarded to T::initialize(). template auto memoryProviderMakeUnique(Args &&...args) { - umf_memory_provider_ops_t ops; + umf_memory_provider_ops_t ops = {}; auto argsTuple = std::make_tuple(std::forward(args)...); ops.version = UMF_VERSION_CURRENT; @@ -128,9 +128,11 @@ auto memoryProviderMakeUnique(Args &&...args) { UMF_ASSIGN_OP_NORETURN(ops, T, get_last_native_error); UMF_ASSIGN_OP(ops, T, get_recommended_page_size, UMF_RESULT_ERROR_UNKNOWN); UMF_ASSIGN_OP(ops, T, get_min_page_size, UMF_RESULT_ERROR_UNKNOWN); - UMF_ASSIGN_OP(ops, T, purge_lazy, UMF_RESULT_ERROR_UNKNOWN); - UMF_ASSIGN_OP(ops, T, purge_force, UMF_RESULT_ERROR_UNKNOWN); UMF_ASSIGN_OP(ops, T, get_name, ""); + UMF_ASSIGN_OP(ops.ext, T, purge_lazy, UMF_RESULT_ERROR_UNKNOWN); + UMF_ASSIGN_OP(ops.ext, T, purge_force, UMF_RESULT_ERROR_UNKNOWN); + UMF_ASSIGN_OP(ops.ext, T, allocation_merge, UMF_RESULT_ERROR_UNKNOWN); + UMF_ASSIGN_OP(ops.ext, T, allocation_split, UMF_RESULT_ERROR_UNKNOWN); umf_memory_provider_handle_t hProvider = nullptr; auto ret = umfMemoryProviderCreate(&ops, &argsTuple, &hProvider); @@ -146,40 +148,32 @@ auto poolMakeUnique(provider_unique_handle_t provider, Args &&...args) { auto argsTuple = std::make_tuple(std::forward(args)...); auto ops = detail::poolMakeUniqueOps(); - auto hProvider = provider.release(); - - // capture providers and destroy them after the pool is destroyed - auto poolDestructor = [hProvider](umf_memory_pool_handle_t hPool) { - umfPoolDestroy(hPool); - umfMemoryProviderDestroy(hProvider); - }; - umf_memory_pool_handle_t hPool = nullptr; - auto ret = umfPoolCreate(&ops, hProvider, &argsTuple, &hPool); + + auto ret = umfPoolCreate(&ops, provider.get(), &argsTuple, + UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &hPool); + if (ret == UMF_RESULT_SUCCESS) { + provider.release(); // pool now owns the provider + } return std::pair{ - ret, pool_unique_handle_t(hPool, std::move(poolDestructor))}; + ret, pool_unique_handle_t(hPool, umfPoolDestroy)}; } static inline auto poolMakeUniqueFromOps(umf_memory_pool_ops_t *ops, provider_unique_handle_t provider, void *params) { umf_memory_pool_handle_t hPool; - auto ret = umfPoolCreate(ops, provider.get(), params, &hPool); + auto ret = umfPoolCreate(ops, provider.get(), params, + UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &hPool); if (ret != UMF_RESULT_SUCCESS) { return std::pair{ ret, pool_unique_handle_t(nullptr, nullptr)}; } - // capture provider and destroy it after the pool is destroyed - auto poolDestructor = - [provider_handle = provider.release()](umf_memory_pool_handle_t pool) { - umfPoolDestroy(pool); - umfMemoryProviderDestroy(provider_handle); - }; + provider.release(); // pool now owns the provider return std::pair{ - UMF_RESULT_SUCCESS, - pool_unique_handle_t(hPool, std::move(poolDestructor))}; + UMF_RESULT_SUCCESS, pool_unique_handle_t(hPool, umfPoolDestroy)}; } template umf_result_t &getPoolLastStatusRef() { diff --git a/test/conformance/device/device_adapter_level_zero-v2.match b/test/conformance/device/device_adapter_level_zero-v2.match index 02eb10fb04..162c342477 100644 --- a/test/conformance/device/device_adapter_level_zero-v2.match +++ b/test/conformance/device/device_adapter_level_zero-v2.match @@ -1,3 +1,3 @@ urDeviceCreateWithNativeHandleTest.SuccessWithUnOwnedNativeHandle {{OPT}}urDeviceGetGlobalTimestampTest.SuccessSynchronizedTime -urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE +{{OPT}}urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE From 822935484efceb4ff3579380dac72a32d0b25648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Chor=C4=85=C5=BCewicz?= Date: Mon, 11 Mar 2024 13:56:18 -0700 Subject: [PATCH 2/6] [CI] Install hwloc on CI (UMF dependency) --- .github/docker/ubuntu-22.04.Dockerfile | 3 ++- .github/scripts/install_hwloc.sh | 18 ++++++++++++++++++ .github/workflows/cmake.yml | 12 ++++++++++++ .github/workflows/codeql.yml | 12 +++++++++++- .github/workflows/coverity.yml | 5 +++++ 5 files changed, 48 insertions(+), 2 deletions(-) create mode 100755 .github/scripts/install_hwloc.sh diff --git a/.github/docker/ubuntu-22.04.Dockerfile b/.github/docker/ubuntu-22.04.Dockerfile index 09eaab03a8..55e63f2c03 100644 --- a/.github/docker/ubuntu-22.04.Dockerfile +++ b/.github/docker/ubuntu-22.04.Dockerfile @@ -32,7 +32,8 @@ ARG BASE_DEPS="\ ARG UR_DEPS="\ doxygen \ python3 \ - python3-pip" + python3-pip \ + libhwloc-dev" # Unified Runtime's dependencies (installed via pip) ARG UR_PYTHON_DEPS="\ diff --git a/.github/scripts/install_hwloc.sh b/.github/scripts/install_hwloc.sh new file mode 100755 index 0000000000..c3299f5881 --- /dev/null +++ b/.github/scripts/install_hwloc.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +# Copyright (C) 2024 Intel Corporation +# Part of the Unified-Runtime Project, under the Apache License v2.0 with LLVM Exceptions. +# See LICENSE.TXT +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +# install_hwloc.sh - Script for building and installing HWLOC library from source code + +set -e + +git clone -b hwloc-2.3.0 https://github.com/open-mpi/hwloc.git +pushd hwloc +./autogen.sh +./configure +make -j$(nproc) +sudo make install -j$(nproc) +popd diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index d8d2479587..3b5ef70e19 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -47,6 +47,9 @@ jobs: sudo apt-get update sudo apt-get install -y doxygen ${{matrix.compiler.c}} + - name: Install libhwloc + run: .github/scripts/install_hwloc.sh + - name: Install g++-7 if: matrix.compiler.cxx == 'g++-7' run: | @@ -224,11 +227,17 @@ jobs: Expand-Archive -Path "$WorkingDir\doxygen.zip" Add-Content $env:GITHUB_PATH "$WorkingDir\doxygen" + - name: Install hwloc + run: vcpkg install hwloc:x64-windows + - name: Configure CMake + env: + VCPKG_PATH: "C:/vcpkg/packages/hwloc_x64-windows" run: > cmake -B${{github.workspace}}/build ${{matrix.toolset}} + -DCMAKE_PREFIX_PATH="${{env.VCPKG_PATH}}" -DCMAKE_C_COMPILER=${{matrix.compiler.c}} -DCMAKE_CXX_COMPILER=${{matrix.compiler.cxx}} -DCMAKE_POLICY_DEFAULT_CMP0094=NEW @@ -267,6 +276,9 @@ jobs: - name: Install prerequisites run: python3 -m pip install -r third_party/requirements.txt + - name: Install hwloc + run: brew install hwloc + - name: Configure CMake run: > cmake diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b0ed45d6b5..2ad96fb348 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -31,6 +31,11 @@ jobs: - name: Install pip packages run: pip install -r third_party/requirements.txt + - name: Install apt packages + run: | + sudo apt-get update + sudo apt-get install -y libhwloc-dev + - name: Configure CMake run: cmake -B ${{github.workspace}}/build -DUR_DEVELOPER_MODE=ON -DUR_BUILD_TESTS=ON -DUR_ENABLE_TRACING=ON -DUR_BUILD_TOOLS=ON -DUMF_ENABLE_POOL_TRACKING=ON @@ -61,8 +66,13 @@ jobs: - name: Install pip packages run: python3 -m pip install -r third_party/requirements.txt + - name: Install hwloc + run: vcpkg install hwloc:x64-windows + - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_POLICY_DEFAULT_CMP0094=NEW -DUR_DEVELOPER_MODE=ON -DUR_BUILD_TESTS=ON -DUR_ENABLE_TRACING=ON -DUR_BUILD_TOOLS=ON -DUMF_ENABLE_POOL_TRACKING=ON + env: + VCPKG_PATH: "C:/vcpkg/packages/hwloc_x64-windows" + run: cmake -B ${{github.workspace}}/build -DCMAKE_POLICY_DEFAULT_CMP0094=NEW -DUR_DEVELOPER_MODE=ON -DUR_BUILD_TESTS=ON -DUR_ENABLE_TRACING=ON -DUR_BUILD_TOOLS=ON -DUMF_ENABLE_POOL_TRACKING=ON -DCMAKE_PREFIX_PATH="${{env.VCPKG_PATH}}" - name: Build run: cmake --build ${{github.workspace}}/build -j $(nproc) --config Release diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index ff6fdf6fde..876d799cfe 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -38,6 +38,11 @@ jobs: - name: Install pip packages run: pip install -r third_party/requirements.txt + - name: Install apt packages + run: | + sudo apt-get update + sudo apt-get install -y libhwloc-dev + - name: Configure CMake run: > cmake From 5b20fa15608616a5ec86ba2620af922b5e474d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Chor=C4=85=C5=BCewicz?= Date: Tue, 26 Mar 2024 11:18:09 -0700 Subject: [PATCH 3/6] Swith to linking dynamically with UMF --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a5870ddde0..f05a107881 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,7 @@ option(UR_USE_MSAN "enable MemorySanitizer" OFF) option(UR_USE_TSAN "enable ThreadSanitizer" OFF) option(UR_ENABLE_TRACING "enable api tracing through xpti" OFF) option(UR_ENABLE_SANITIZER "enable device sanitizer" ON) -option(UMF_BUILD_SHARED_LIBRARY "Build UMF as shared library" OFF) +option(UMF_BUILD_SHARED_LIBRARY "Build UMF as shared library" ON) option(UMF_ENABLE_POOL_TRACKING "Build UMF with pool tracking" ON) option(UR_BUILD_ADAPTER_L0 "Build the Level-Zero adapter" OFF) option(UR_BUILD_ADAPTER_OPENCL "Build the OpenCL adapter" OFF) From 688e43a9981affffd6a2ea2f4548a67925aee6c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Chor=C4=85=C5=BCewicz?= Date: Fri, 15 Mar 2024 17:41:06 -0700 Subject: [PATCH 4/6] Remove UMF from ur::common and make a separate ur_umf interface library. This way, components that do not require UMF (e.g. loader) do not need to link with it. --- source/adapters/cuda/CMakeLists.txt | 1 + source/adapters/hip/CMakeLists.txt | 2 ++ source/adapters/level_zero/CMakeLists.txt | 1 + source/adapters/native_cpu/CMakeLists.txt | 1 + source/adapters/opencl/CMakeLists.txt | 1 + source/common/CMakeLists.txt | 21 +++++++++++++++------ test/adapters/cuda/CMakeLists.txt | 2 +- test/adapters/hip/CMakeLists.txt | 2 +- test/adapters/level_zero/v2/CMakeLists.txt | 1 + test/usm/CMakeLists.txt | 1 + 10 files changed, 25 insertions(+), 8 deletions(-) diff --git a/source/adapters/cuda/CMakeLists.txt b/source/adapters/cuda/CMakeLists.txt index b3afb74329..013bd9b4d9 100644 --- a/source/adapters/cuda/CMakeLists.txt +++ b/source/adapters/cuda/CMakeLists.txt @@ -114,6 +114,7 @@ endif() target_link_libraries(${TARGET_NAME} PRIVATE ${PROJECT_NAME}::headers ${PROJECT_NAME}::common + ${PROJECT_NAME}::umf Threads::Threads cudadrv ${EXTRA_LIBS} diff --git a/source/adapters/hip/CMakeLists.txt b/source/adapters/hip/CMakeLists.txt index 09c60a8e71..164eae7521 100644 --- a/source/adapters/hip/CMakeLists.txt +++ b/source/adapters/hip/CMakeLists.txt @@ -140,6 +140,7 @@ if("${UR_HIP_PLATFORM}" STREQUAL "AMD") target_link_libraries(${TARGET_NAME} PRIVATE ${PROJECT_NAME}::headers ${PROJECT_NAME}::common + ${PROJECT_NAME}::umf rocmdrv ) @@ -174,6 +175,7 @@ elseif("${UR_HIP_PLATFORM}" STREQUAL "NVIDIA") target_link_libraries(${TARGET_NAME} PRIVATE ${PROJECT_NAME}::headers ${PROJECT_NAME}::common + ${PROJECT_NAME}::umf Threads::Threads cudadrv cudart diff --git a/source/adapters/level_zero/CMakeLists.txt b/source/adapters/level_zero/CMakeLists.txt index a19f768a95..148ee238f5 100644 --- a/source/adapters/level_zero/CMakeLists.txt +++ b/source/adapters/level_zero/CMakeLists.txt @@ -166,6 +166,7 @@ endif() target_link_libraries(${TARGET_NAME} PRIVATE ${PROJECT_NAME}::headers ${PROJECT_NAME}::common + ${PROJECT_NAME}::umf LevelZeroLoader LevelZeroLoader-Headers ) diff --git a/source/adapters/native_cpu/CMakeLists.txt b/source/adapters/native_cpu/CMakeLists.txt index 87391ac615..dbe480592b 100644 --- a/source/adapters/native_cpu/CMakeLists.txt +++ b/source/adapters/native_cpu/CMakeLists.txt @@ -52,6 +52,7 @@ find_package(Threads REQUIRED) target_link_libraries(${TARGET_NAME} PRIVATE ${PROJECT_NAME}::headers ${PROJECT_NAME}::common + ${PROJECT_NAME}::umf Threads::Threads ) diff --git a/source/adapters/opencl/CMakeLists.txt b/source/adapters/opencl/CMakeLists.txt index 65cbba9df6..fe197849b6 100644 --- a/source/adapters/opencl/CMakeLists.txt +++ b/source/adapters/opencl/CMakeLists.txt @@ -96,6 +96,7 @@ target_include_directories(${TARGET_NAME} PRIVATE target_link_libraries(${TARGET_NAME} PRIVATE ${PROJECT_NAME}::headers ${PROJECT_NAME}::common + ${PROJECT_NAME}::umf Threads::Threads ${OpenCLICDLoaderLibrary} ) diff --git a/source/common/CMakeLists.txt b/source/common/CMakeLists.txt index 0e5e7a7956..726ffaadff 100644 --- a/source/common/CMakeLists.txt +++ b/source/common/CMakeLists.txt @@ -4,9 +4,6 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception add_ur_library(ur_common STATIC - umf_helpers.hpp - umf_pools/disjoint_pool_config_parser.cpp - ur_pool_manager.hpp ur_util.cpp ur_util.hpp $<$:windows/ur_lib_loader.cpp> @@ -52,9 +49,6 @@ FetchContent_MakeAvailable(unified-memory-framework) FetchContent_GetProperties(unified-memory-framework) target_link_libraries(ur_common PUBLIC - umf::umf - umf::headers - umf::disjoint_pool ${CMAKE_DL_LIBS} ${PROJECT_NAME}::headers ) @@ -72,3 +66,18 @@ install(TARGETS ur_common RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) + +add_library(ur_umf INTERFACE) +target_sources(ur_umf INTERFACE + umf_helpers.hpp + umf_pools/disjoint_pool_config_parser.cpp + ur_pool_manager.hpp +) + +add_library(${PROJECT_NAME}::umf ALIAS ur_umf) + +target_link_libraries(ur_umf INTERFACE + umf::umf + umf::headers + umf::disjoint_pool +) diff --git a/test/adapters/cuda/CMakeLists.txt b/test/adapters/cuda/CMakeLists.txt index 66c1fa4b1e..50129826e5 100644 --- a/test/adapters/cuda/CMakeLists.txt +++ b/test/adapters/cuda/CMakeLists.txt @@ -28,4 +28,4 @@ target_include_directories(test-adapter-cuda PRIVATE ${PROJECT_SOURCE_DIR}/source/adapters/cuda ) -target_link_libraries(test-adapter-cuda PRIVATE cudadrv) +target_link_libraries(test-adapter-cuda PRIVATE cudadrv ${PROJECT_NAME}::umf) diff --git a/test/adapters/hip/CMakeLists.txt b/test/adapters/hip/CMakeLists.txt index 3496f71bd0..0cf7905f25 100644 --- a/test/adapters/hip/CMakeLists.txt +++ b/test/adapters/hip/CMakeLists.txt @@ -26,4 +26,4 @@ target_compile_definitions(test-adapter-hip PRIVATE ${HIP_COMPILE_DEFINITIONS} ) -target_link_libraries(test-adapter-hip PRIVATE rocmdrv) +target_link_libraries(test-adapter-hip PRIVATE rocmdrv ${PROJECT_NAME}::umf) diff --git a/test/adapters/level_zero/v2/CMakeLists.txt b/test/adapters/level_zero/v2/CMakeLists.txt index d5ec446323..b460371313 100644 --- a/test/adapters/level_zero/v2/CMakeLists.txt +++ b/test/adapters/level_zero/v2/CMakeLists.txt @@ -23,6 +23,7 @@ function(add_unittest name) target_link_libraries(${target} PRIVATE ${PROJECT_NAME}::common + ${PROJECT_NAME}::umf LevelZeroLoader LevelZeroLoader-Headers ) diff --git a/test/usm/CMakeLists.txt b/test/usm/CMakeLists.txt index 1e3d3eb78d..4d0d459bd8 100644 --- a/test/usm/CMakeLists.txt +++ b/test/usm/CMakeLists.txt @@ -15,6 +15,7 @@ function(add_usm_test name) PRIVATE ${PROJECT_NAME}::common ${PROJECT_NAME}::loader + ${PROJECT_NAME}::umf ur_testing GTest::gtest_main) add_test(NAME usm-${name} From f65a23eee3ab004de33959b1821fb3ee7eadc1d5 Mon Sep 17 00:00:00 2001 From: Igor Chorazewicz Date: Tue, 30 Apr 2024 17:23:52 +0200 Subject: [PATCH 5/6] [L0] make UR_DEVICE_INFO_GLOBAL_MEM_FREE fail optional --- test/conformance/device/device_adapter_level_zero.match | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/conformance/device/device_adapter_level_zero.match b/test/conformance/device/device_adapter_level_zero.match index 02eb10fb04..162c342477 100644 --- a/test/conformance/device/device_adapter_level_zero.match +++ b/test/conformance/device/device_adapter_level_zero.match @@ -1,3 +1,3 @@ urDeviceCreateWithNativeHandleTest.SuccessWithUnOwnedNativeHandle {{OPT}}urDeviceGetGlobalTimestampTest.SuccessSynchronizedTime -urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE +{{OPT}}urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE From 0a259f33df1011f655a0c4d174d685a06e6ccca2 Mon Sep 17 00:00:00 2001 From: Igor Chorazewicz Date: Fri, 10 May 2024 17:05:04 +0000 Subject: [PATCH 6/6] Disable building UMF tests and examples as they require extra depndencies (libnuma) --- source/common/CMakeLists.txt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/source/common/CMakeLists.txt b/source/common/CMakeLists.txt index 726ffaadff..2459bbd86a 100644 --- a/source/common/CMakeLists.txt +++ b/source/common/CMakeLists.txt @@ -35,11 +35,8 @@ FetchContent_Declare(unified-memory-framework GIT_TAG ${UMF_TAG} ) -if(UR_BUILD_TESTS) - set(UMF_BUILD_TESTS ON CACHE INTERNAL "Build UMF tests") -else() - set(UMF_BUILD_TESTS OFF CACHE INTERNAL "Build UMF tests") -endif() +set(UMF_BUILD_TESTS OFF CACHE INTERNAL "Build UMF tests") +set(UMF_BUILD_EXAMPLES OFF CACHE INTERNAL "Build UMF examples") # TODO: L0 provider not ready yet set(UMF_BUILD_LEVEL_ZERO_PROVIDER OFF CACHE INTERNAL "Build Level Zero Provider") set(UMF_BUILD_SHARED_LIBRARY ${UMF_BUILD_SHARED_LIBRARY} CACHE INTERNAL "Build UMF shared library")