From ea1c5ad2dea26b34de330dcdcb75f878acb80c94 Mon Sep 17 00:00:00 2001 From: Piotr Balcer Date: Fri, 26 Jul 2024 16:41:51 +0200 Subject: [PATCH] Revert "Merge pull request #1430 from igchor/umf_dynamic_linking" This reverts commit 3d8fe8d298cec8db624fc230fa5c0e19865aa6f1, reversing changes made to e8c9f3dbe6c4d3222c65b08e1a1048e177741775. --- .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 --- CMakeLists.txt | 2 +- source/adapters/cuda/CMakeLists.txt | 1 - source/adapters/cuda/usm.cpp | 6 +-- source/adapters/cuda/usm.hpp | 6 --- source/adapters/hip/CMakeLists.txt | 2 - source/adapters/hip/usm.cpp | 6 +-- source/adapters/hip/usm.hpp | 6 --- source/adapters/level_zero/CMakeLists.txt | 1 - source/adapters/level_zero/context.cpp | 8 ++-- source/adapters/level_zero/usm.cpp | 8 ++-- source/adapters/level_zero/usm.hpp | 6 --- source/adapters/native_cpu/CMakeLists.txt | 1 - source/adapters/opencl/CMakeLists.txt | 1 - source/common/CMakeLists.txt | 36 +++++++---------- source/common/umf_helpers.hpp | 40 +++++++++++-------- test/adapters/cuda/CMakeLists.txt | 2 +- test/adapters/hip/CMakeLists.txt | 2 +- test/adapters/level_zero/v2/CMakeLists.txt | 1 - .../device/device_adapter_level_zero-v2.match | 2 +- .../device/device_adapter_level_zero.match | 2 +- test/usm/CMakeLists.txt | 1 - 26 files changed, 58 insertions(+), 132 deletions(-) delete mode 100755 .github/scripts/install_hwloc.sh diff --git a/.github/docker/ubuntu-22.04.Dockerfile b/.github/docker/ubuntu-22.04.Dockerfile index 55e63f2c03..09eaab03a8 100644 --- a/.github/docker/ubuntu-22.04.Dockerfile +++ b/.github/docker/ubuntu-22.04.Dockerfile @@ -32,8 +32,7 @@ ARG BASE_DEPS="\ ARG UR_DEPS="\ doxygen \ python3 \ - python3-pip \ - libhwloc-dev" + python3-pip" # 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 deleted file mode 100755 index c3299f5881..0000000000 --- a/.github/scripts/install_hwloc.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/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 3b5ef70e19..d8d2479587 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -47,9 +47,6 @@ 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: | @@ -227,17 +224,11 @@ 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 @@ -276,9 +267,6 @@ 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 2ad96fb348..b0ed45d6b5 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -31,11 +31,6 @@ 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 @@ -66,13 +61,8 @@ 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 - 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}}" + 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 - 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 876d799cfe..ff6fdf6fde 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -38,11 +38,6 @@ 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 diff --git a/CMakeLists.txt b/CMakeLists.txt index f05a107881..a5870ddde0 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" ON) +option(UMF_BUILD_SHARED_LIBRARY "Build UMF as shared library" OFF) 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) diff --git a/source/adapters/cuda/CMakeLists.txt b/source/adapters/cuda/CMakeLists.txt index 013bd9b4d9..b3afb74329 100644 --- a/source/adapters/cuda/CMakeLists.txt +++ b/source/adapters/cuda/CMakeLists.txt @@ -114,7 +114,6 @@ 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/cuda/usm.cpp b/source/adapters/cuda/usm.cpp index 7b7d488d55..a7b3a60eac 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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 7c6a2ea666..e5d1f7fbaa 100644 --- a/source/adapters/cuda/usm.hpp +++ b/source/adapters/cuda/usm.hpp @@ -81,12 +81,6 @@ 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/CMakeLists.txt b/source/adapters/hip/CMakeLists.txt index 164eae7521..09c60a8e71 100644 --- a/source/adapters/hip/CMakeLists.txt +++ b/source/adapters/hip/CMakeLists.txt @@ -140,7 +140,6 @@ if("${UR_HIP_PLATFORM}" STREQUAL "AMD") target_link_libraries(${TARGET_NAME} PRIVATE ${PROJECT_NAME}::headers ${PROJECT_NAME}::common - ${PROJECT_NAME}::umf rocmdrv ) @@ -175,7 +174,6 @@ 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/hip/usm.cpp b/source/adapters/hip/usm.cpp index d58a8eb530..79337ba87a 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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 2149ac26ba..a1c3964263 100644 --- a/source/adapters/hip/usm.hpp +++ b/source/adapters/hip/usm.hpp @@ -81,12 +81,6 @@ 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/CMakeLists.txt b/source/adapters/level_zero/CMakeLists.txt index 148ee238f5..a19f768a95 100644 --- a/source/adapters/level_zero/CMakeLists.txt +++ b/source/adapters/level_zero/CMakeLists.txt @@ -166,7 +166,6 @@ endif() target_link_libraries(${TARGET_NAME} PRIVATE ${PROJECT_NAME}::headers ${PROJECT_NAME}::common - ${PROJECT_NAME}::umf LevelZeroLoader LevelZeroLoader-Headers ) diff --git a/source/adapters/level_zero/context.cpp b/source/adapters/level_zero/context.cpp index 22adfa96ed..fc55b532b7 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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 616b4c4d57..2f05bfaa57 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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( - umfDisjointPoolOps(), std::move(MemProvider), + &UMF_DISJOINT_POOL_OPS, 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 1f230a5f55..6d61e43ee8 100644 --- a/source/adapters/level_zero/usm.hpp +++ b/source/adapters/level_zero/usm.hpp @@ -85,12 +85,6 @@ 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/adapters/native_cpu/CMakeLists.txt b/source/adapters/native_cpu/CMakeLists.txt index dbe480592b..87391ac615 100644 --- a/source/adapters/native_cpu/CMakeLists.txt +++ b/source/adapters/native_cpu/CMakeLists.txt @@ -52,7 +52,6 @@ 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 fe197849b6..65cbba9df6 100644 --- a/source/adapters/opencl/CMakeLists.txt +++ b/source/adapters/opencl/CMakeLists.txt @@ -96,7 +96,6 @@ 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 2459bbd86a..09591f3b32 100644 --- a/source/common/CMakeLists.txt +++ b/source/common/CMakeLists.txt @@ -4,6 +4,9 @@ # 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> @@ -23,8 +26,8 @@ if (NOT DEFINED UMF_REPO) endif() if (NOT DEFINED UMF_TAG) - # Merge pull request #637 from kswiecicki/fix-dpool-poison-macro - set(UMF_TAG 1c34aae4c804e133c1273f30b1d6441ebb766f2f) + # Merge pull request #119 from ldorau/Fix_arena_extent_split_and_arena_extent_merge + set(UMF_TAG 9bf7a0dc4dff76844e10edbb5c6e9d917536ef6d) endif() message(STATUS "Will fetch Unified Memory Framework from ${UMF_REPO}") @@ -35,17 +38,21 @@ FetchContent_Declare(unified-memory-framework GIT_TAG ${UMF_TAG} ) -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") +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_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 ${CMAKE_DL_LIBS} ${PROJECT_NAME}::headers ) @@ -63,18 +70,3 @@ 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/source/common/umf_helpers.hpp b/source/common/umf_helpers.hpp index c381d05af7..2cbebf3670 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,11 +128,9 @@ 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); @@ -148,32 +146,40 @@ auto poolMakeUnique(provider_unique_handle_t provider, Args &&...args) { auto argsTuple = std::make_tuple(std::forward(args)...); auto ops = detail::poolMakeUniqueOps(); - umf_memory_pool_handle_t hPool = nullptr; + auto hProvider = provider.release(); - 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 - } + // 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); return std::pair{ - ret, pool_unique_handle_t(hPool, umfPoolDestroy)}; + ret, pool_unique_handle_t(hPool, std::move(poolDestructor))}; } 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, - UMF_POOL_CREATE_FLAG_OWN_PROVIDER, &hPool); + auto ret = umfPoolCreate(ops, provider.get(), params, &hPool); if (ret != UMF_RESULT_SUCCESS) { return std::pair{ ret, pool_unique_handle_t(nullptr, nullptr)}; } - provider.release(); // pool now owns the provider + // 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); + }; return std::pair{ - UMF_RESULT_SUCCESS, pool_unique_handle_t(hPool, umfPoolDestroy)}; + UMF_RESULT_SUCCESS, + pool_unique_handle_t(hPool, std::move(poolDestructor))}; } template umf_result_t &getPoolLastStatusRef() { diff --git a/test/adapters/cuda/CMakeLists.txt b/test/adapters/cuda/CMakeLists.txt index 50129826e5..66c1fa4b1e 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 ${PROJECT_NAME}::umf) +target_link_libraries(test-adapter-cuda PRIVATE cudadrv) diff --git a/test/adapters/hip/CMakeLists.txt b/test/adapters/hip/CMakeLists.txt index 0cf7905f25..3496f71bd0 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 ${PROJECT_NAME}::umf) +target_link_libraries(test-adapter-hip PRIVATE rocmdrv) diff --git a/test/adapters/level_zero/v2/CMakeLists.txt b/test/adapters/level_zero/v2/CMakeLists.txt index b460371313..d5ec446323 100644 --- a/test/adapters/level_zero/v2/CMakeLists.txt +++ b/test/adapters/level_zero/v2/CMakeLists.txt @@ -23,7 +23,6 @@ function(add_unittest name) target_link_libraries(${target} PRIVATE ${PROJECT_NAME}::common - ${PROJECT_NAME}::umf LevelZeroLoader LevelZeroLoader-Headers ) diff --git a/test/conformance/device/device_adapter_level_zero-v2.match b/test/conformance/device/device_adapter_level_zero-v2.match index 162c342477..02eb10fb04 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 -{{OPT}}urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE +urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE diff --git a/test/conformance/device/device_adapter_level_zero.match b/test/conformance/device/device_adapter_level_zero.match index 162c342477..02eb10fb04 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 -{{OPT}}urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE +urDeviceGetInfoTest.Success/UR_DEVICE_INFO_GLOBAL_MEM_FREE diff --git a/test/usm/CMakeLists.txt b/test/usm/CMakeLists.txt index 4d0d459bd8..1e3d3eb78d 100644 --- a/test/usm/CMakeLists.txt +++ b/test/usm/CMakeLists.txt @@ -15,7 +15,6 @@ 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}