From ba470d1d9eab7ad35b056edb981f31d714249e4d Mon Sep 17 00:00:00 2001 From: Patryk Kaminski Date: Mon, 31 Mar 2025 12:00:26 +0200 Subject: [PATCH] Remove UMF_DISABLE_HWLOC option --- .github/workflows/reusable_basic.yml | 34 +--- .github/workflows/reusable_docs_build.yml | 3 +- CMakeLists.txt | 200 +++++++++------------ README.md | 1 - src/CMakeLists.txt | 20 +-- src/libumf.c | 6 +- src/memspaces/memspace_highest_bandwidth.c | 9 +- src/memspaces/memspace_highest_capacity.c | 9 +- src/memspaces/memspace_host_all.c | 10 +- src/memspaces/memspace_lowest_latency.c | 9 +- src/memspaces/memspace_numa.c | 9 +- src/provider/provider_devdax_memory.c | 6 +- src/provider/provider_file_memory.c | 6 +- src/provider/provider_os_memory.c | 79 +------- test/CMakeLists.txt | 33 ++-- test/provider_os_memory_not_impl.cpp | 46 ----- 16 files changed, 137 insertions(+), 343 deletions(-) delete mode 100644 test/provider_os_memory_not_impl.cpp diff --git a/.github/workflows/reusable_basic.yml b/.github/workflows/reusable_basic.yml index 81ca53f10..614280e0f 100644 --- a/.github/workflows/reusable_basic.yml +++ b/.github/workflows/reusable_basic.yml @@ -30,7 +30,6 @@ jobs: level_zero_provider: ['ON'] cuda_provider: ['ON'] install_tbb: ['ON'] - disable_hwloc: ['OFF'] link_hwloc_statically: ['OFF'] cmake_ver: ['default'] include: @@ -41,7 +40,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' # check minimum supported cmake version cmake_ver: '3.14.0' @@ -52,7 +50,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' cmake_ver: '3.28.0' - os: ubuntu-24.04 @@ -62,7 +59,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' cmake_ver: 'default' # test level_zero_provider='OFF' and cuda_provider='OFF' @@ -73,7 +69,6 @@ jobs: level_zero_provider: 'OFF' cuda_provider: 'OFF' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' cmake_ver: 'default' # test icx compiler @@ -84,7 +79,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'OFF' cmake_ver: 'default' # test lld linker @@ -95,7 +89,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"' cmake_ver: 'default' @@ -107,17 +100,6 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'OFF' - disable_hwloc: 'OFF' - link_hwloc_statically: 'OFF' - cmake_ver: 'default' - - 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' cmake_ver: 'default' - os: ubuntu-22.04 @@ -127,10 +109,9 @@ jobs: level_zero_provider: 'ON' cuda_provider: 'ON' install_tbb: 'ON' - disable_hwloc: 'OFF' link_hwloc_statically: 'ON' cmake_ver: 'default' - name: Basic (${{matrix.os}}, build_type=${{matrix.build_type}}, compilers=${{matrix.compiler.c}}/${{matrix.compiler.cxx}}, shared_library=${{matrix.shared_library}}, level_zero_provider=${{matrix.level_zero_provider}}, cuda_provider=${{matrix.cuda_provider}}, install_tbb=${{matrix.install_tbb}}, disable_hwloc=${{matrix.disable_hwloc}}, link_hwloc_statically=${{matrix.link_hwloc_statically}}, cmake_ver=${{matrix.cmake_ver}}) + name: Basic (${{matrix.os}}, build_type=${{matrix.build_type}}, compilers=${{matrix.compiler.c}}/${{matrix.compiler.cxx}}, shared_library=${{matrix.shared_library}}, level_zero_provider=${{matrix.level_zero_provider}}, cuda_provider=${{matrix.cuda_provider}}, install_tbb=${{matrix.install_tbb}}, link_hwloc_statically=${{matrix.link_hwloc_statically}}, cmake_ver=${{matrix.cmake_ver}}) steps: - name: Checkout @@ -146,12 +127,6 @@ jobs: chmod +x cmake-${{matrix.cmake_ver}}-Linux-x86_64.sh echo ${USERPASS} | sudo -Sk ./cmake-${{matrix.cmake_ver}}-Linux-x86_64.sh --skip-license --prefix=/usr/local - - name: Uninstall hwloc - if: matrix.disable_hwloc == 'ON' - run: | - echo ${USERPASS} | sudo -Sk apt-get remove --purge -y '*hwloc*' - echo ${USERPASS} | sudo -Sk apt-get autoremove -y - - name: Uninstall TBB apt package if: matrix.install_tbb == 'OFF' run: | @@ -185,7 +160,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 || '' }} @@ -205,7 +179,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}} @@ -214,7 +188,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 @@ -226,7 +200,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 d7480be2d..a5bb90eb0 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 59c4c5305..0250fe2f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,10 +75,6 @@ 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 (supported only on Linux with Clang)" 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)" @@ -119,13 +115,6 @@ set_property(CACHE UMF_PROXY_LIB_BASED_ON_POOL PROPERTY STRINGS ${KNOWN_PROXY_LIB_POOLS}) list(APPEND UMF_OPTIONS_LIST UMF_PROXY_LIB_BASED_ON_POOL) -if(UMF_DISABLE_HWLOC) - message( - WARNING - "UMF_DISABLE_HWLOC option is now deprecated and will be removed in v0.12.0 UMF release!" - ) -endif() - # --------------------------------------------------------------------------- # # Setup required variables, definitions; fetch dependencies; include # sub_directories based on build options; set flags; etc. @@ -260,7 +249,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) @@ -275,110 +264,95 @@ 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) - set(LIBHWLOC_FOUND TRUE) - 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) - set(LIBHWLOC_FOUND TRUE) - 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) + set(LIBHWLOC_FOUND TRUE) + 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) + set(LIBHWLOC_FOUND TRUE) 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) @@ -533,7 +507,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 @@ -756,9 +730,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 @@ -803,7 +775,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 02d59538a..cff0a9612 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,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 d11e04c4f..990a75dc2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -34,9 +34,7 @@ add_subdirectory(utils) add_subdirectory(base_alloc) add_subdirectory(coarse) -set(UMF_LIBS umf_utils umf_ba umf_coarse) - -set(HWLOC_DEPENDENT_SOURCES topology.c) +set(UMF_LIBS umf_utils umf_ba umf_coarse $) set(UMF_SOURCES ctl/ctl.c @@ -47,6 +45,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 @@ -66,7 +65,8 @@ set(UMF_SOURCES pool/pool_disjoint.c pool/pool_jemalloc.c pool/pool_proxy.c - pool/pool_scalable.c) + pool/pool_scalable.c + topology.c) if(UMF_POOL_JEMALLOC_ENABLED) set(UMF_LIBS ${UMF_LIBS} ${JEMALLOC_LIBRARIES}) @@ -78,16 +78,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) diff --git a/src/libumf.c b/src/libumf.c index e9b78d489..2b036ddb4 100644 --- a/src/libumf.c +++ b/src/libumf.c @@ -18,12 +18,10 @@ #include "provider_cuda_internal.h" #include "provider_level_zero_internal.h" #include "provider_tracking.h" +#include "topology.h" #include "utils_common.h" #include "utils_concurrency.h" #include "utils_log.h" -#if !defined(UMF_NO_HWLOC) -#include "topology.h" -#endif umf_memory_tracker_handle_t TRACKER = NULL; @@ -86,7 +84,7 @@ umf_result_t umfTearDown(void) { } if (--umfRefCount == 0) { -#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 0790c406d..7bdc6f938 100644 --- a/src/memspaces/memspace_highest_bandwidth.c +++ b/src/memspaces/memspace_highest_bandwidth.c @@ -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" @@ -119,4 +118,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 36ef01b1c..31d4ced51 100644 --- a/src/memspaces/memspace_highest_capacity.c +++ b/src/memspaces/memspace_highest_capacity.c @@ -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 efcfa7ef4..b83d3a0f1 100644 --- a/src/memspaces/memspace_host_all.c +++ b/src/memspaces/memspace_host_all.c @@ -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 8fc33ae41..6e1780f2a 100644 --- a/src/memspaces/memspace_lowest_latency.c +++ b/src/memspaces/memspace_lowest_latency.c @@ -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" @@ -119,4 +118,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 4ac420ff7..421d50faf 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 995f50cf5..1f886693d 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" @@ -667,4 +667,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 78cfb2cc2..3304c45ee 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" @@ -992,4 +992,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 bc6ba5241..141a21d4a 100644 --- a/src/provider/provider_os_memory.c +++ b/src/provider/provider_os_memory.c @@ -19,85 +19,12 @@ #include #include -#include "ctl/ctl_internal.h" -#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 "ctl/ctl_internal.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" @@ -1656,5 +1583,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 bda44ea04..f18cf5345 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -50,6 +50,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_CUDA_ENABLED) set(INC_DIRS ${INC_DIRS} ${CUDA_INCLUDE_DIRS}) @@ -61,10 +62,6 @@ function(build_umf_test) set(LIB_DIRS ${LIB_DIRS} ${ZE_LOADER_LIBRARY_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() @@ -243,7 +240,7 @@ add_umf_test( SRCS c_api/disjoint_pool.c 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 @@ -251,28 +248,26 @@ if(LINUX AND (NOT UMF_DISABLE_HWLOC)) LIBS ${UMF_UTILS_FOR_TEST} ${UMF_BA_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 LIBS ${UMF_UTILS_FOR_TEST} ${UMF_BA_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 LIBS ${UMF_UTILS_FOR_TEST} ${UMF_BA_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() @@ -397,13 +392,6 @@ else() LIBS ${UMF_UTILS_FOR_TEST} ${UMF_BA_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} ${UMF_BA_FOR_TEST}) -endif() - if(UMF_BUILD_GPU_TESTS AND UMF_LEVEL_ZERO_ENABLED) # 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 @@ -565,7 +553,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 @@ -644,8 +632,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 @@ -735,7 +722,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); -}