diff --git a/.github/workflows/reusable_basic.yml b/.github/workflows/reusable_basic.yml index 3f6eb1cf9..97ae22817 100644 --- a/.github/workflows/reusable_basic.yml +++ b/.github/workflows/reusable_basic.yml @@ -24,7 +24,6 @@ jobs: level_zero_provider: ['ON'] cuda_provider: ['ON'] install_tbb: ['ON'] - disable_hwloc: ['OFF'] link_hwloc_statically: ['OFF'] include: - os: 'ubuntu-22.04' @@ -34,7 +33,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' - os: 'ubuntu-22.04' build_type: Release @@ -43,7 +41,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' - os: 'ubuntu-24.04' build_type: Debug @@ -52,7 +49,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' # test level_zero_provider='OFF' and cuda_provider='OFF' - os: 'ubuntu-22.04' @@ -62,7 +58,6 @@ jobs: level_zero_provider: 'OFF' cuda_provider: 'OFF' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' # test icx compiler - os: 'ubuntu-22.04' @@ -72,7 +67,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' # test lld linker - os: 'ubuntu-24.04' @@ -82,7 +76,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' llvm_linker: '-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" -DCMAKE_MODULE_LINKER_FLAGS="-fuse-ld=lld" -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld"' # test without installing TBB @@ -93,16 +86,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'OFF' - disable_hwloc: 'OFF' - link_hwloc_statically: 'OFF' - - os: 'ubuntu-22.04' - build_type: Debug - compiler: {c: gcc, cxx: g++} - shared_library: 'ON' - level_zero_provider: 'ON' - cuda_provider: 'ON' - install_tbb: 'ON' - disable_hwloc: 'ON' link_hwloc_statically: 'OFF' - os: 'ubuntu-22.04' build_type: Release @@ -111,7 +94,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'ON' runs-on: ${{matrix.os}} @@ -127,7 +109,6 @@ jobs: sudo apt-get install -y clang cmake libnuma-dev lcov - name: Install hwloc - if: matrix.disable_hwloc == 'OFF' run: | sudo apt-get install -y libhwloc-dev @@ -170,7 +151,6 @@ jobs: -DUMF_DEVELOPER_MODE=ON -DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON -DUMF_TESTS_FAIL_ON_SKIP=ON - -DUMF_DISABLE_HWLOC=${{matrix.disable_hwloc}} -DUMF_LINK_HWLOC_STATICALLY=${{matrix.link_hwloc_statically}} ${{ matrix.build_type == 'Debug' && matrix.compiler.c == 'gcc' && '-DUMF_USE_COVERAGE=ON' || '' }} ${{ matrix.llvm_linker || '' }} @@ -190,7 +170,7 @@ jobs: if: ${{ matrix.build_type == 'Debug' && matrix.compiler.c == 'gcc' }} working-directory: ${{env.BUILD_DIR}} run: | - export COVERAGE_FILE_NAME=${{env.COVERAGE_NAME}}-${{matrix.os}}-shared-${{matrix.shared_library}}-no_hwloc-${{matrix.disable_hwloc}} + export COVERAGE_FILE_NAME=${{env.COVERAGE_NAME}}-${{matrix.os}}-shared-${{matrix.shared_library}} echo "COVERAGE_FILE_NAME: $COVERAGE_FILE_NAME" ../scripts/coverage/coverage_capture.sh $COVERAGE_FILE_NAME mkdir -p ${{env.COVERAGE_DIR}} @@ -199,7 +179,7 @@ jobs: - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if: ${{ matrix.build_type == 'Debug' && matrix.compiler.c == 'gcc' }} with: - name: ${{env.COVERAGE_NAME}}-${{matrix.os}}-shared-${{matrix.shared_library}}-no_hwloc-${{matrix.disable_hwloc}} + name: ${{env.COVERAGE_NAME}}-${{matrix.os}}-shared-${{matrix.shared_library}} path: ${{env.COVERAGE_DIR}} - name: Remove the installation directory @@ -212,7 +192,7 @@ jobs: --build-dir ${{env.BUILD_DIR}} --install-dir ${{env.INSTL_DIR}} --build-type ${{matrix.build_type}} - ${{ matrix.install_tbb == 'ON' && matrix.disable_hwloc != 'ON' && matrix.shared_library == 'ON' && '--proxy' || '' }} + ${{ matrix.install_tbb == 'ON' && matrix.shared_library == 'ON' && '--proxy' || '' }} --umf-version ${{env.UMF_VERSION}} ${{ matrix.shared_library == 'ON' && '--shared-library' || '' }} diff --git a/.github/workflows/reusable_docs_build.yml b/.github/workflows/reusable_docs_build.yml index e73b67033..1c1e849a3 100644 --- a/.github/workflows/reusable_docs_build.yml +++ b/.github/workflows/reusable_docs_build.yml @@ -41,8 +41,7 @@ jobs: -DUMF_BUILD_LEVEL_ZERO_PROVIDER=OFF \ -DUMF_BUILD_CUDA_PROVIDER=OFF \ -DUMF_BUILD_TESTS=OFF \ - -DUMF_BUILD_EXAMPLES=OFF \ - -DUMF_DISABLE_HWLOC=ON + -DUMF_BUILD_EXAMPLES=OFF cmake --build build --target docs # diff --git a/CMakeLists.txt b/CMakeLists.txt index f7e640abc..db421e298 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,10 +72,6 @@ umf_option(UMF_BUILD_BENCHMARKS_MT "Build UMF multithreaded benchmarks" OFF) umf_option(UMF_BUILD_EXAMPLES "Build UMF examples" ON) umf_option(UMF_BUILD_GPU_EXAMPLES "Build UMF GPU examples" OFF) umf_option(UMF_BUILD_FUZZTESTS "Build UMF fuzz tests" OFF) -umf_option( - UMF_DISABLE_HWLOC - "Disable hwloc and UMF features requiring it (OS provider, memtargets, topology discovery)" - OFF) umf_option( UMF_LINK_HWLOC_STATICALLY "Link UMF with HWLOC library statically (proxy library will be disabled on Windows+Debug build)" @@ -249,7 +245,7 @@ else() ) endif() -if(NOT UMF_DISABLE_HWLOC AND (NOT UMF_LINK_HWLOC_STATICALLY)) +if(NOT UMF_LINK_HWLOC_STATICALLY) pkg_check_modules(LIBHWLOC hwloc>=2.3.0) if(NOT LIBHWLOC_FOUND) find_package(LIBHWLOC 2.3.0 COMPONENTS hwloc) @@ -267,108 +263,93 @@ if(NOT UMF_DISABLE_HWLOC AND (NOT UMF_LINK_HWLOC_STATICALLY)) endif() endif() -if(UMF_LINK_HWLOC_STATICALLY AND LINUX) - find_program(AUTORECONF_EXECUTABLE autoreconf) - if(NOT AUTORECONF_EXECUTABLE) - message(WARNING "autoreconf is not installed. Disabling hwloc.") - set(UMF_DISABLE_HWLOC ON) - set(UMF_LINK_HWLOC_STATICALLY OFF) +if(UMF_LINK_HWLOC_STATICALLY) + if(NOT DEFINED UMF_HWLOC_REPO) + set(UMF_HWLOC_REPO "https://github.com/open-mpi/hwloc.git") + endif() + if(NOT DEFINED UMF_HWLOC_TAG) + set(UMF_HWLOC_TAG hwloc-2.10.0) endif() -endif() -if(UMF_DISABLE_HWLOC) - message(STATUS "hwloc is disabled, hence OS provider, memtargets, " - "topology discovery, examples won't be available!") -else() - if(UMF_LINK_HWLOC_STATICALLY) - if(NOT DEFINED UMF_HWLOC_REPO) - set(UMF_HWLOC_REPO "https://github.com/open-mpi/hwloc.git") - endif() + message( + STATUS "Will fetch hwloc from ${UMF_HWLOC_REPO} (tag: ${UMF_HWLOC_TAG})" + ) - if(NOT DEFINED UMF_HWLOC_TAG) - set(UMF_HWLOC_TAG hwloc-2.10.0) + if(WINDOWS) + set(HWLOC_ENABLE_TESTING OFF) + set(HWLOC_SKIP_LSTOPO ON) + set(HWLOC_SKIP_TOOLS ON) + set(HWLOC_SKIP_INCLUDES ON) + + FetchContent_Declare( + hwloc_targ + GIT_REPOSITORY ${UMF_HWLOC_REPO} + GIT_TAG ${UMF_HWLOC_TAG} + SOURCE_SUBDIR contrib/windows-cmake/) + FetchContent_MakeAvailable(hwloc_targ) + + set(HWLOC_LIB_PATH "") + if(CMAKE_GENERATOR STREQUAL "NMake Makefiles") + set(HWLOC_LIB_PATH "${hwloc_targ_BINARY_DIR}/hwloc.lib") + else() + set(HWLOC_LIB_PATH "${hwloc_targ_BINARY_DIR}/lib/hwloc.lib") endif() - message( - STATUS - "Will fetch hwloc from ${UMF_HWLOC_REPO} (tag: ${UMF_HWLOC_TAG})" - ) - if(WINDOWS) - set(HWLOC_ENABLE_TESTING OFF) - set(HWLOC_SKIP_LSTOPO ON) - set(HWLOC_SKIP_TOOLS ON) - set(HWLOC_SKIP_INCLUDES ON) - - FetchContent_Declare( - hwloc_targ - GIT_REPOSITORY ${UMF_HWLOC_REPO} - GIT_TAG ${UMF_HWLOC_TAG} - SOURCE_SUBDIR contrib/windows-cmake/) - FetchContent_MakeAvailable(hwloc_targ) - - set(HWLOC_LIB_PATH "") - if(CMAKE_GENERATOR STREQUAL "NMake Makefiles") - set(HWLOC_LIB_PATH "${hwloc_targ_BINARY_DIR}/hwloc.lib") - else() - set(HWLOC_LIB_PATH "${hwloc_targ_BINARY_DIR}/lib/hwloc.lib") - endif() - - get_filename_component(LIBHWLOC_LIBRARY_DIRS ${HWLOC_LIB_PATH} - DIRECTORY) - set(LIBHWLOC_LIBRARIES ${HWLOC_LIB_PATH}) - set(LIBHWLOC_INCLUDE_DIRS ${hwloc_targ_BINARY_DIR}/include) - else() # not Windows - FetchContent_Declare( - hwloc_targ - GIT_REPOSITORY ${UMF_HWLOC_REPO} - GIT_TAG ${UMF_HWLOC_TAG}) - FetchContent_MakeAvailable(hwloc_targ) - - add_custom_command( - COMMAND ./autogen.sh - WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR} - OUTPUT ${hwloc_targ_SOURCE_DIR}/configure) - add_custom_command( - COMMAND - ./configure --prefix=${hwloc_targ_BINARY_DIR} - --enable-static=yes --enable-shared=no --disable-libxml2 - --disable-pci --disable-levelzero --disable-opencl - --disable-cuda --disable-nvml --disable-libudev - --disable-rsmi CFLAGS=-fPIC CXXFLAGS=-fPIC - WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR} - OUTPUT ${hwloc_targ_SOURCE_DIR}/Makefile - DEPENDS ${hwloc_targ_SOURCE_DIR}/configure) - add_custom_command( - COMMAND make - WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR} - OUTPUT ${hwloc_targ_SOURCE_DIR}/lib/libhwloc.la - DEPENDS ${hwloc_targ_SOURCE_DIR}/Makefile) - add_custom_command( - COMMAND make install - WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR} - OUTPUT ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a - DEPENDS ${hwloc_targ_SOURCE_DIR}/lib/libhwloc.la) - - add_custom_target(hwloc_prod - DEPENDS ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a) - add_library(hwloc INTERFACE) - target_link_libraries( - hwloc INTERFACE ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a) - add_dependencies(hwloc hwloc_prod) - - set(LIBHWLOC_LIBRARY_DIRS ${hwloc_targ_BINARY_DIR}/lib) - set(LIBHWLOC_INCLUDE_DIRS ${hwloc_targ_BINARY_DIR}/include) - set(LIBHWLOC_LIBRARIES ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a) - endif() - endif() # UMF_LINK_HWLOC_STATICALLY + get_filename_component(LIBHWLOC_LIBRARY_DIRS ${HWLOC_LIB_PATH} + DIRECTORY) + set(LIBHWLOC_LIBRARIES ${HWLOC_LIB_PATH}) + set(LIBHWLOC_INCLUDE_DIRS ${hwloc_targ_BINARY_DIR}/include) + else() # not Windows + FetchContent_Declare( + hwloc_targ + GIT_REPOSITORY ${UMF_HWLOC_REPO} + GIT_TAG ${UMF_HWLOC_TAG}) + FetchContent_MakeAvailable(hwloc_targ) - message(STATUS " LIBHWLOC_LIBRARIES = ${LIBHWLOC_LIBRARIES}") - message(STATUS " LIBHWLOC_INCLUDE_DIRS = ${LIBHWLOC_INCLUDE_DIRS}") - message(STATUS " LIBHWLOC_LIBRARY_DIRS = ${LIBHWLOC_LIBRARY_DIRS}") - message(STATUS " LIBHWLOC_API_VERSION = ${LIBHWLOC_API_VERSION}") - if(WINDOWS) - message(STATUS " LIBHWLOC_DLL_DIRS = ${LIBHWLOC_DLL_DIRS}") + add_custom_command( + COMMAND ./autogen.sh + WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR} + OUTPUT ${hwloc_targ_SOURCE_DIR}/configure) + add_custom_command( + COMMAND + ./configure --prefix=${hwloc_targ_BINARY_DIR} + --enable-static=yes --enable-shared=no --disable-libxml2 + --disable-pci --disable-levelzero --disable-opencl + --disable-cuda --disable-nvml --disable-libudev --disable-rsmi + CFLAGS=-fPIC CXXFLAGS=-fPIC + WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR} + OUTPUT ${hwloc_targ_SOURCE_DIR}/Makefile + DEPENDS ${hwloc_targ_SOURCE_DIR}/configure) + add_custom_command( + COMMAND make + WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR} + OUTPUT ${hwloc_targ_SOURCE_DIR}/lib/libhwloc.la + DEPENDS ${hwloc_targ_SOURCE_DIR}/Makefile) + add_custom_command( + COMMAND make install + WORKING_DIRECTORY ${hwloc_targ_SOURCE_DIR} + OUTPUT ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a + DEPENDS ${hwloc_targ_SOURCE_DIR}/lib/libhwloc.la) + + add_custom_target(hwloc_prod + DEPENDS ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a) + add_library(hwloc INTERFACE) + target_link_libraries(hwloc + INTERFACE ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a) + add_dependencies(hwloc hwloc_prod) + + set(LIBHWLOC_LIBRARY_DIRS ${hwloc_targ_BINARY_DIR}/lib) + set(LIBHWLOC_INCLUDE_DIRS ${hwloc_targ_BINARY_DIR}/include) + set(LIBHWLOC_LIBRARIES ${hwloc_targ_BINARY_DIR}/lib/libhwloc.a) endif() +endif() # UMF_LINK_HWLOC_STATICALLY + +message(STATUS " LIBHWLOC_LIBRARIES = ${LIBHWLOC_LIBRARIES}") +message(STATUS " LIBHWLOC_INCLUDE_DIRS = ${LIBHWLOC_INCLUDE_DIRS}") +message(STATUS " LIBHWLOC_LIBRARY_DIRS = ${LIBHWLOC_LIBRARY_DIRS}") +message(STATUS " LIBHWLOC_API_VERSION = ${LIBHWLOC_API_VERSION}") +if(WINDOWS) + message(STATUS " LIBHWLOC_DLL_DIRS = ${LIBHWLOC_DLL_DIRS}") endif() if(hwloc_targ_SOURCE_DIR) @@ -463,7 +444,7 @@ if(WINDOWS AND UMF_USE_DEBUG_POSTFIX) -DUMF_BUILD_TESTS=OFF -DUMF_BUILD_GPU_TESTS=OFF -DUMF_BUILD_BENCHMARKS=OFF -DUMF_BUILD_BENCHMARKS_MT=OFF -DUMF_BUILD_EXAMPLES=OFF -DUMF_BUILD_GPU_EXAMPLES=OFF - -DUMF_BUILD_FUZZTESTS=OFF -DUMF_DISABLE_HWLOC=${UMF_DISABLE_HWLOC} + -DUMF_BUILD_FUZZTESTS=OFF -DUMF_LINK_HWLOC_STATICALLY=${UMF_LINK_HWLOC_STATICALLY} -DUMF_HWLOC_NAME=${UMF_HWLOC_NAME} -DUMF_INSTALL_RPATH=${UMF_INSTALL_RPATH} -DUMF_DEVELOPER_MODE=OFF @@ -648,9 +629,7 @@ if(WINDOWS) endif() # set UMF_PROXY_LIB_ENABLED -if(UMF_DISABLE_HWLOC) - message(STATUS "Disabling the proxy library, because HWLOC is disabled") -elseif(NOT UMF_BUILD_SHARED_LIBRARY) +if(NOT UMF_BUILD_SHARED_LIBRARY) # TODO enable this scenario message( STATUS @@ -707,7 +686,7 @@ if(UMF_BUILD_BENCHMARKS) add_subdirectory(benchmark) endif() -if(UMF_BUILD_EXAMPLES AND NOT UMF_DISABLE_HWLOC) +if(UMF_BUILD_EXAMPLES) add_subdirectory(examples) endif() diff --git a/README.md b/README.md index 00d6136df..577af0d44 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,6 @@ List of options provided by CMake: | UMF_USE_VALGRIND | Enable Valgrind instrumentation | ON/OFF | OFF | | UMF_USE_COVERAGE | Build with coverage enabled (Linux only) | ON/OFF | OFF | | UMF_LINK_HWLOC_STATICALLY | Link UMF with HWLOC library statically (proxy library will be disabled on Windows+Debug build) | ON/OFF | OFF | -| UMF_DISABLE_HWLOC | Disable features that requires hwloc (OS provider, memory targets, topology discovery) | ON/OFF | OFF | ## Architecture: memory pools and providers diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 24beb1e0a..0e78e63ec 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -38,7 +38,8 @@ set(BA_SOURCES add_subdirectory(utils) add_subdirectory(coarse) -set(UMF_LIBS $ $) +set(UMF_LIBS $ $ + $) set(CTL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/ctl/ctl.c) @@ -62,6 +63,7 @@ set(HWLOC_DEPENDENT_SOURCES topology.c) set(UMF_SOURCES ${BA_SOURCES} ${CTL_SOURCES} + ${HWLOC_DEPENDENT_SOURCES} libumf.c ipc.c ipc_cache.c @@ -69,6 +71,7 @@ set(UMF_SOURCES memory_provider.c memory_provider_get_last_failed.c memtarget.c + memtargets/memtarget_numa.c mempolicy.c memspace.c memspaces/memspace_host_all.c @@ -100,16 +103,8 @@ if(UMF_POOL_JEMALLOC_ENABLED) "UMF_POOL_JEMALLOC_ENABLED=1") endif() -if(NOT UMF_DISABLE_HWLOC) - set(UMF_SOURCES ${UMF_SOURCES} ${HWLOC_DEPENDENT_SOURCES} - memtargets/memtarget_numa.c) - set(UMF_LIBS ${UMF_LIBS} $) - set(UMF_PRIVATE_LIBRARY_DIRS ${UMF_PRIVATE_LIBRARY_DIRS} - ${LIBHWLOC_LIBRARY_DIRS}) -else() - set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS} - "UMF_NO_HWLOC=1") -endif() +set(UMF_PRIVATE_LIBRARY_DIRS ${UMF_PRIVATE_LIBRARY_DIRS} + ${LIBHWLOC_LIBRARY_DIRS}) set(UMF_SOURCES_LINUX libumf_linux.c) set(UMF_SOURCES_MACOSX libumf_linux.c) @@ -124,12 +119,6 @@ if(NOT UMF_BUILD_LEVEL_ZERO_PROVIDER) set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS} "UMF_NO_LEVEL_ZERO_PROVIDER=1") endif() -if(UMF_DISABLE_HWLOC OR WINDOWS) - set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS} - "UMF_NO_DEVDAX_PROVIDER=1") - set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS} - "UMF_NO_FILE_PROVIDER=1") -endif() if(LINUX) set(UMF_SOURCES ${UMF_SOURCES} ${UMF_SOURCES_LINUX}) diff --git a/src/libumf.c b/src/libumf.c index 7c10402fe..fd5a49993 100644 --- a/src/libumf.c +++ b/src/libumf.c @@ -17,11 +17,9 @@ #include "provider_cuda_internal.h" #include "provider_level_zero_internal.h" #include "provider_tracking.h" +#include "topology.h" #include "utils_common.h" #include "utils_log.h" -#if !defined(UMF_NO_HWLOC) -#include "topology.h" -#endif umf_memory_tracker_handle_t TRACKER = NULL; @@ -62,7 +60,7 @@ int umfInit(void) { void umfTearDown(void) { if (utils_fetch_and_sub_u64(&umfRefCount, 1) == 1) { -#if !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#if !defined(_WIN32) umfMemspaceHostAllDestroy(); umfMemspaceHighestCapacityDestroy(); umfMemspaceHighestBandwidthDestroy(); diff --git a/src/memspaces/memspace_highest_bandwidth.c b/src/memspaces/memspace_highest_bandwidth.c index 93fede2cd..41086532b 100644 --- a/src/memspaces/memspace_highest_bandwidth.c +++ b/src/memspaces/memspace_highest_bandwidth.c @@ -1,6 +1,6 @@ /* * - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation * * Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception @@ -14,16 +14,15 @@ #include #include -// UMF_MEMSPACE_HIGHEST_BANDWIDTH requires HWLOC -// Additionally, it is currently unsupported on Win -#if defined(_WIN32) || defined(UMF_NO_HWLOC) +// UMF_MEMSPACE_HIGHEST_BANDWIDTH is currently unsupported on Win +#if defined(_WIN32) umf_const_memspace_handle_t umfMemspaceHighestBandwidthGet(void) { // not supported return NULL; } -#else // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#else // !defined(_WIN32) #include "base_alloc_global.h" #include "memspace_internal.h" @@ -115,4 +114,4 @@ umf_const_memspace_handle_t umfMemspaceHighestBandwidthGet(void) { return UMF_MEMSPACE_HIGHEST_BANDWIDTH; } -#endif // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#endif // !defined(_WIN32) diff --git a/src/memspaces/memspace_highest_capacity.c b/src/memspaces/memspace_highest_capacity.c index 4a195316a..4f3654f82 100644 --- a/src/memspaces/memspace_highest_capacity.c +++ b/src/memspaces/memspace_highest_capacity.c @@ -1,6 +1,6 @@ /* * - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation * * Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception @@ -13,16 +13,15 @@ #include #include -// UMF_MEMSPACE_HIGHEST_CAPACITY requires HWLOC -// Additionally, it is currently unsupported on Win -#if defined(_WIN32) || defined(UMF_NO_HWLOC) +// UMF_MEMSPACE_HIGHEST_CAPACITY is currently unsupported on Win +#if defined(_WIN32) umf_const_memspace_handle_t umfMemspaceHighestCapacityGet(void) { // not supported return NULL; } -#else // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#else // !defined(_WIN32) #include "base_alloc_global.h" #include "memspace_internal.h" @@ -87,4 +86,4 @@ umf_const_memspace_handle_t umfMemspaceHighestCapacityGet(void) { return UMF_MEMSPACE_HIGHEST_CAPACITY; } -#endif // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#endif // !defined(_WIN32) diff --git a/src/memspaces/memspace_host_all.c b/src/memspaces/memspace_host_all.c index 4b7db69d4..c6e36996b 100644 --- a/src/memspaces/memspace_host_all.c +++ b/src/memspaces/memspace_host_all.c @@ -1,6 +1,6 @@ /* * - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation * * Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception @@ -13,16 +13,14 @@ #include #include -// UMF_MEMSPACE_HOST_ALL requires HWLOC -// Additionally, it is currently unsupported on Win - -#if defined(_WIN32) || defined(UMF_NO_HWLOC) +// UMF_MEMSPACE_HOST_ALL is currently unsupported on Win +#if defined(_WIN32) umf_const_memspace_handle_t umfMemspaceHostAllGet(void) { // not supported return NULL; } -#else // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#else // !defined(_WIN32) #include "base_alloc_global.h" #include "memspace_internal.h" @@ -108,4 +106,4 @@ umf_const_memspace_handle_t umfMemspaceHostAllGet(void) { return UMF_MEMSPACE_HOST_ALL; } -#endif // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#endif // !defined(_WIN32) diff --git a/src/memspaces/memspace_lowest_latency.c b/src/memspaces/memspace_lowest_latency.c index 5ca369fee..a402cab16 100644 --- a/src/memspaces/memspace_lowest_latency.c +++ b/src/memspaces/memspace_lowest_latency.c @@ -1,6 +1,6 @@ /* * - * Copyright (C) 2024 Intel Corporation + * Copyright (C) 2024-2025 Intel Corporation * * Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception @@ -14,16 +14,15 @@ #include #include -// UMF_MEMSPACE_LOWEST_LATENCY requires HWLOC -// Additionally, it is currently unsupported on Win -#if defined(_WIN32) || defined(UMF_NO_HWLOC) +// UMF_MEMSPACE_LOWEST_LATENCY is currently unsupported on Win +#if defined(_WIN32) umf_const_memspace_handle_t umfMemspaceLowestLatencyGet(void) { // not supported return NULL; } -#else // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#else // !defined(_WIN32) #include "base_alloc_global.h" #include "memspace_internal.h" @@ -115,4 +114,4 @@ umf_const_memspace_handle_t umfMemspaceLowestLatencyGet(void) { return UMF_MEMSPACE_LOWEST_LATENCY; } -#endif // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#endif // !defined(_WIN32) diff --git a/src/memspaces/memspace_numa.c b/src/memspaces/memspace_numa.c index 83e65fc29..6764d8403 100644 --- a/src/memspaces/memspace_numa.c +++ b/src/memspaces/memspace_numa.c @@ -12,9 +12,8 @@ #include #include -// umfMemspaceCreateFromNumaArray requires HWLOC -// Additionally, it is currently unsupported on Win -#if defined(_WIN32) || defined(UMF_NO_HWLOC) +// umfMemspaceCreateFromNumaArray is currently unsupported on Win +#if defined(_WIN32) umf_result_t umfMemspaceCreateFromNumaArray(unsigned *nodeIds, size_t numIds, umf_memspace_handle_t *hMemspace) { (void)nodeIds; @@ -25,7 +24,7 @@ umf_result_t umfMemspaceCreateFromNumaArray(unsigned *nodeIds, size_t numIds, return UMF_RESULT_ERROR_NOT_SUPPORTED; } -#else // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#else // !defined(_WIN32) #include "../memspace_internal.h" #include "../memtargets/memtarget_numa.h" @@ -76,4 +75,4 @@ umf_result_t umfMemspaceCreateFromNumaArray(unsigned *nodeIds, size_t numIds, return ret; } -#endif // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#endif // !defined(_WIN32) diff --git a/src/provider/provider_devdax_memory.c b/src/provider/provider_devdax_memory.c index 50e60cdb7..58286936a 100644 --- a/src/provider/provider_devdax_memory.c +++ b/src/provider/provider_devdax_memory.c @@ -19,7 +19,7 @@ #include "utils_log.h" -#if defined(_WIN32) || defined(UMF_NO_HWLOC) +#if defined(_WIN32) const umf_memory_provider_ops_t *umfDevDaxMemoryProviderOps(void) { // not supported @@ -62,7 +62,7 @@ umf_result_t umfDevDaxMemoryProviderParamsSetProtection( return UMF_RESULT_ERROR_NOT_SUPPORTED; } -#else // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#else // !defined(_WIN32) #include "base_alloc_global.h" #include "coarse.h" @@ -658,4 +658,4 @@ umf_result_t umfDevDaxMemoryProviderParamsSetProtection( return UMF_RESULT_SUCCESS; } -#endif // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#endif // !defined(_WIN32) diff --git a/src/provider/provider_file_memory.c b/src/provider/provider_file_memory.c index 7754078d9..56d74636e 100644 --- a/src/provider/provider_file_memory.c +++ b/src/provider/provider_file_memory.c @@ -20,7 +20,7 @@ #include "utils_log.h" -#if defined(_WIN32) || defined(UMF_NO_HWLOC) +#if defined(_WIN32) const umf_memory_provider_ops_t *umfFileMemoryProviderOps(void) { // not supported @@ -68,7 +68,7 @@ umf_result_t umfFileMemoryProviderParamsSetVisibility( return UMF_RESULT_ERROR_NOT_SUPPORTED; } -#else // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#else // !defined(_WIN32) #include "base_alloc_global.h" #include "coarse.h" @@ -981,4 +981,4 @@ umf_result_t umfFileMemoryProviderParamsSetVisibility( return UMF_RESULT_SUCCESS; } -#endif // !defined(_WIN32) && !defined(UMF_NO_HWLOC) +#endif // !defined(_WIN32) diff --git a/src/provider/provider_os_memory.c b/src/provider/provider_os_memory.c index 744293691..fcd073f87 100644 --- a/src/provider/provider_os_memory.c +++ b/src/provider/provider_os_memory.c @@ -20,84 +20,11 @@ #include #include -#include "utils_assert.h" -// OS Memory Provider requires HWLOC -#if defined(UMF_NO_HWLOC) - -const umf_memory_provider_ops_t *umfOsMemoryProviderOps(void) { return NULL; } - -umf_result_t umfOsMemoryProviderParamsCreate( - umf_os_memory_provider_params_handle_t *hParams) { - (void)hParams; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -umf_result_t umfOsMemoryProviderParamsDestroy( - umf_os_memory_provider_params_handle_t hParams) { - (void)hParams; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -umf_result_t umfOsMemoryProviderParamsSetProtection( - umf_os_memory_provider_params_handle_t hParams, unsigned protection) { - (void)hParams; - (void)protection; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -umf_result_t umfOsMemoryProviderParamsSetVisibility( - umf_os_memory_provider_params_handle_t hParams, - umf_memory_visibility_t visibility) { - (void)hParams; - (void)visibility; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -umf_result_t umfOsMemoryProviderParamsSetShmName( - umf_os_memory_provider_params_handle_t hParams, const char *shm_name) { - (void)hParams; - (void)shm_name; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -umf_result_t umfOsMemoryProviderParamsSetNumaList( - umf_os_memory_provider_params_handle_t hParams, unsigned *numa_list, - unsigned numa_list_len) { - (void)hParams; - (void)numa_list; - (void)numa_list_len; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -umf_result_t umfOsMemoryProviderParamsSetNumaMode( - umf_os_memory_provider_params_handle_t hParams, umf_numa_mode_t numa_mode) { - (void)hParams; - (void)numa_mode; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -umf_result_t umfOsMemoryProviderParamsSetPartSize( - umf_os_memory_provider_params_handle_t hParams, size_t part_size) { - (void)hParams; - (void)part_size; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -umf_result_t umfOsMemoryProviderParamsSetPartitions( - umf_os_memory_provider_params_handle_t hParams, - umf_numa_split_partition_t *partitions, unsigned partitions_len) { - (void)hParams; - (void)partitions; - (void)partitions_len; - return UMF_RESULT_ERROR_NOT_SUPPORTED; -} - -#else // !defined(UMF_NO_HWLOC) - #include "base_alloc_global.h" #include "critnib.h" #include "libumf.h" #include "provider_os_memory_internal.h" +#include "utils_assert.h" #include "utils_common.h" #include "utils_concurrency.h" #include "utils_log.h" @@ -1653,5 +1580,3 @@ umf_result_t umfOsMemoryProviderParamsSetPartitions( return UMF_RESULT_SUCCESS; } - -#endif // !defined(UMF_NO_HWLOC) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index adfbd69e5..d4c965573 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -49,6 +49,7 @@ function(build_umf_test) set(TEST_TARGET_NAME test_${ARG_NAME}) set(LIB_DIRS ${LIB_DIRS} ${LIBHWLOC_LIBRARY_DIRS}) + set(INC_DIRS ${INC_DIRS} ${LIBHWLOC_INCLUDE_DIRS}) if(UMF_BUILD_CUDA_PROVIDER) set(INC_DIRS ${INC_DIRS} ${CUDA_INCLUDE_DIRS}) @@ -59,10 +60,6 @@ function(build_umf_test) set(INC_DIRS ${INC_DIRS} ${LEVEL_ZERO_INCLUDE_DIRS}) endif() - if(NOT UMF_DISABLE_HWLOC) - set(INC_DIRS ${INC_DIRS} ${LIBHWLOC_INCLUDE_DIRS}) - endif() - if(UMF_POOL_JEMALLOC_ENABLED) set(CPL_DEFS ${CPL_DEFS} UMF_POOL_JEMALLOC_ENABLED=1) endif() @@ -250,7 +247,7 @@ add_umf_test( SRCS c_api/disjoint_pool.c ${BA_SOURCES_FOR_TEST} LIBS ${UMF_UTILS_FOR_TEST}) -if(LINUX AND (NOT UMF_DISABLE_HWLOC)) +if(LINUX) # this test uses the file provider add_umf_test( NAME disjoint_pool_file_prov @@ -258,13 +255,11 @@ if(LINUX AND (NOT UMF_DISABLE_HWLOC)) LIBS ${UMF_UTILS_FOR_TEST}) endif() -if(UMF_POOL_JEMALLOC_ENABLED - AND UMF_POOL_SCALABLE_ENABLED - AND (NOT UMF_DISABLE_HWLOC)) +if(UMF_POOL_JEMALLOC_ENABLED AND UMF_POOL_SCALABLE_ENABLED) add_umf_test(NAME c_api_multi_pool SRCS c_api/multi_pool.c) endif() -if(UMF_POOL_JEMALLOC_ENABLED AND (NOT UMF_DISABLE_HWLOC)) +if(UMF_POOL_JEMALLOC_ENABLED) add_umf_test( NAME jemalloc_pool SRCS pools/jemalloc_pool.cpp malloc_compliance_tests.cpp @@ -272,7 +267,7 @@ if(UMF_POOL_JEMALLOC_ENABLED AND (NOT UMF_DISABLE_HWLOC)) LIBS ${UMF_UTILS_FOR_TEST}) endif() -if(UMF_POOL_SCALABLE_ENABLED AND (NOT UMF_DISABLE_HWLOC)) +if(UMF_POOL_SCALABLE_ENABLED) add_umf_test( NAME scalable_pool SRCS pools/scalable_pool.cpp malloc_compliance_tests.cpp @@ -280,8 +275,8 @@ if(UMF_POOL_SCALABLE_ENABLED AND (NOT UMF_DISABLE_HWLOC)) LIBS ${UMF_UTILS_FOR_TEST}) endif() -if(LINUX AND (NOT UMF_DISABLE_HWLOC)) # OS-specific functions are implemented - # only for Linux now +if(LINUX) # OS-specific functions are implemented + # only for Linux now if(PkgConfig_FOUND) pkg_check_modules(LIBNUMA numa) endif() @@ -405,13 +400,6 @@ else() LIBS ${UMF_UTILS_FOR_TEST}) endif() -if(UMF_DISABLE_HWLOC) - add_umf_test( - NAME provider_os_memory_not_impl - SRCS provider_os_memory_not_impl.cpp - LIBS ${UMF_UTILS_FOR_TEST}) -endif() - if(UMF_BUILD_GPU_TESTS AND UMF_BUILD_LEVEL_ZERO_PROVIDER) # we have two test binaries here that use the same sources, but differ in # the way they are linked to the Level Zero (statically or at runtime using @@ -588,7 +576,7 @@ function(add_umf_ipc_test) endfunction() if(LINUX) - if(NOT UMF_DISABLE_HWLOC AND UMF_POOL_SCALABLE_ENABLED) + if(UMF_POOL_SCALABLE_ENABLED) build_umf_test( NAME ipc_os_prov_consumer SRCS ipc_os_prov_consumer.c common/ipc_common.c @@ -667,8 +655,7 @@ endif() if(LINUX AND UMF_BUILD_SHARED_LIBRARY - AND UMF_POOL_SCALABLE_ENABLED - AND NOT UMF_DISABLE_HWLOC) + AND UMF_POOL_SCALABLE_ENABLED) add_umf_test( NAME init_teardown SRCS test_init_teardown.c @@ -760,7 +747,7 @@ if(LINUX ) endif() - if(EXAMPLES AND NOT UMF_DISABLE_HWLOC) + if(EXAMPLES) set(STANDALONE_CMAKE_OPTIONS "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" ) diff --git a/test/provider_os_memory_not_impl.cpp b/test/provider_os_memory_not_impl.cpp deleted file mode 100644 index 127ba32e4..000000000 --- a/test/provider_os_memory_not_impl.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (C) 2024-2025 Intel Corporation -// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#include "base.hpp" - -#include - -using umf_test::test; - -TEST_F(test, os_provider_not_implemented) { - umf_os_memory_provider_params_handle_t params = nullptr; - umf_result_t umf_result = umfOsMemoryProviderParamsCreate(¶ms); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - EXPECT_EQ(params, nullptr); - - umf_result = umfOsMemoryProviderParamsDestroy(params); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - - umf_result = umfOsMemoryProviderParamsSetProtection(params, 0); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - - umf_result = - umfOsMemoryProviderParamsSetVisibility(params, UMF_MEM_MAP_PRIVATE); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - - umf_result = umfOsMemoryProviderParamsSetShmName(params, "shm_name"); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - - umf_result = umfOsMemoryProviderParamsSetNumaList(params, nullptr, 0); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - - umf_result = - umfOsMemoryProviderParamsSetNumaMode(params, UMF_NUMA_MODE_DEFAULT); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - - umf_result = umfOsMemoryProviderParamsSetPartSize(params, 4096); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - - umf_numa_split_partition_t partitions[1]; - umf_result = umfOsMemoryProviderParamsSetPartitions(params, partitions, 1); - EXPECT_EQ(umf_result, UMF_RESULT_ERROR_NOT_SUPPORTED); - - const umf_memory_provider_ops_t *ops = umfOsMemoryProviderOps(); - EXPECT_EQ(ops, nullptr); -}