Skip to content

Commit f3a60a6

Browse files
igchorbratpiorka
authored andcommitted
Add option to disable hwloc
1 parent 4e31669 commit f3a60a6

File tree

6 files changed

+105
-52
lines changed

6 files changed

+105
-52
lines changed

.github/workflows/basic.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ jobs:
2323
shared_library: ['OFF']
2424
level_zero_provider: ['ON']
2525
install_tbb: ['ON']
26+
disable_hwloc: ['OFF']
2627
include:
2728
- os: 'ubuntu-20.04'
2829
build_type: Release
@@ -69,6 +70,13 @@ jobs:
6970
shared_library: 'ON'
7071
level_zero_provider: 'ON'
7172
install_tbb: 'OFF'
73+
- os: 'ubuntu-22.04'
74+
build_type: Release
75+
compiler: {c: gcc, cxx: g++}
76+
shared_library: 'ON'
77+
level_zero_provider: 'ON'
78+
install_tbb: 'ON'
79+
disable_hwloc: 'ON'
7280
runs-on: ${{matrix.os}}
7381

7482
steps:
@@ -122,6 +130,7 @@ jobs:
122130
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
123131
-DUMF_BUILD_LIBUMF_POOL_DISJOINT=ON
124132
-DUMF_TESTS_FAIL_ON_SKIP=ON
133+
-DUMF_DISABLE_HWLOC=${{matrix.disable_hwloc}}
125134
126135
- name: Build UMF
127136
run: cmake --build ${{env.BUILD_DIR}} -j $(nproc)
@@ -144,7 +153,7 @@ jobs:
144153
--build-type ${{matrix.build_type}}
145154
--disjoint-pool
146155
--jemalloc-pool
147-
${{ matrix.install_tbb == 'ON' && '--proxy' || '' }}
156+
${{ matrix.install_tbb == 'ON' && matrix.disable_hwloc != 'ON' && '--proxy' || '' }}
148157
--umf-version ${{env.UMF_VERSION}}
149158
${{ matrix.shared_library == 'ON' && '--shared-library' || '' }}
150159

CMakeLists.txt

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ option(USE_TSAN "Enable ThreadSanitizer checks" OFF)
6161
option(USE_MSAN "Enable MemorySanitizer checks" OFF)
6262
option(USE_VALGRIND "Enable Valgrind instrumentation" OFF)
6363
option(USE_GCOV "Enable gcov support" OFF)
64+
option(
65+
UMF_DISABLE_HWLOC
66+
"Disable features that requires hwloc (OS provider, memory targets, topolgy discovery)"
67+
OFF)
6468

6569
# set UMF_PROXY_LIB_BASED_ON_POOL to one of: SCALABLE or JEMALLOC
6670
set(KNOWN_PROXY_LIB_POOLS SCALABLE JEMALLOC)
@@ -95,14 +99,17 @@ else()
9599
endif()
96100

97101
if(NOT UMF_LINK_HWLOC_STATICALLY)
98-
pkg_check_modules(LIBHWLOC hwloc>=2.3.0)
99-
if(NOT LIBHWLOC_FOUND)
100-
find_package(LIBHWLOC 2.3.0 REQUIRED hwloc)
102+
if(NOT UMF_DISABLE_HWLOC)
103+
pkg_check_modules(LIBHWLOC hwloc>=2.3.0)
104+
if(NOT LIBHWLOC_FOUND)
105+
find_package(LIBHWLOC 2.3.0 REQUIRED hwloc)
106+
endif()
107+
108+
# add PATH to DLL on Windows
109+
set(DLL_PATH_LIST
110+
"${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}/../bin"
111+
)
101112
endif()
102-
# add PATH to DLL on Windows
103-
set(DLL_PATH_LIST
104-
"${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}/../bin"
105-
)
106113
else()
107114
if(NOT WINDOWS)
108115
message(FATAL_ERROR "hwloc can be statically linked only on Windows")
@@ -329,7 +336,11 @@ if(UMF_BUILD_BENCHMARKS)
329336
endif()
330337

331338
if(UMF_BUILD_EXAMPLES)
332-
add_subdirectory(examples)
339+
if(NOT UMF_DISABLE_HWLOC)
340+
add_subdirectory(examples)
341+
else()
342+
message(WARNING "Examples cannot be build - hwloc disabled")
343+
endif()
333344
endif()
334345

335346
# Conditional configuration for Level Zero provider

examples/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ set(EXAMPLE_NAME umf_example_basic)
1818
add_umf_executable(
1919
NAME ${EXAMPLE_NAME}
2020
SRCS basic/basic.c
21-
LIBS umf hwloc)
21+
LIBS umf ${LIBHWLOC_LIBRARIES})
2222

2323
target_include_directories(
2424
${EXAMPLE_NAME} PRIVATE ${UMF_CMAKE_SOURCE_DIR}/src/utils

src/CMakeLists.txt

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ set(BA_SOURCES
6161
${BA_SOURCES}
6262
PARENT_SCOPE)
6363

64+
set(HWLOC_DEPENDENT_SOURCES topology.c)
65+
6466
set(UMF_SOURCES
6567
${BA_SOURCES}
6668
libumf.c
@@ -74,8 +76,11 @@ set(UMF_SOURCES
7476
provider/provider_tracking.c
7577
critnib/critnib.c
7678
pool/pool_proxy.c
77-
pool/pool_scalable.c
78-
topology.c)
79+
pool/pool_scalable.c)
80+
81+
if(NOT UMF_DISABLE_HWLOC)
82+
set(UMF_SOURCES ${UMF_SOURCES} ${HWLOC_DEPENDENT_SOURCES})
83+
endif()
7984

8085
set(UMF_SOURCES_LINUX libumf_linux.c)
8186

@@ -93,16 +98,22 @@ set(UMF_SOURCES_COMMON_LINUX_MACOSX
9398
memspaces/memspace_highest_bandwidth.c
9499
memspaces/memspace_lowest_latency.c)
95100

96-
set(UMF_SOURCES_LINUX ${UMF_SOURCES_LINUX} ${UMF_SOURCES_COMMON_LINUX_MACOSX}
97-
provider/provider_os_memory_linux.c)
101+
if(NOT UMF_DISABLE_HWLOC)
102+
set(UMF_SOURCES_LINUX
103+
${UMF_SOURCES_LINUX} ${UMF_SOURCES_COMMON_LINUX_MACOSX}
104+
provider/provider_os_memory_linux.c)
98105

99-
set(UMF_SOURCES_MACOSX ${UMF_SOURCES_MACOSX} ${UMF_SOURCES_COMMON_LINUX_MACOSX}
100-
provider/provider_os_memory_macosx.c)
106+
set(UMF_SOURCES_MACOSX
107+
${UMF_SOURCES_MACOSX} ${UMF_SOURCES_COMMON_LINUX_MACOSX}
108+
provider/provider_os_memory_macosx.c)
101109

102-
set(UMF_SOURCES_WINDOWS ${UMF_SOURCES_WINDOWS} provider/provider_os_memory.c
103-
provider/provider_os_memory_windows.c)
110+
set(UMF_SOURCES_WINDOWS
111+
${UMF_SOURCES_WINDOWS} provider/provider_os_memory.c
112+
provider/provider_os_memory_windows.c)
113+
114+
set(UMF_LIBS ${UMF_LIBS} ${LIBHWLOC_LIBRARIES})
115+
endif()
104116

105-
set(UMF_LIBS ${UMF_LIBS} ${LIBHWLOC_LIBRARIES})
106117
set(UMF_PRIVATE_LIBRARY_DIRS ${UMF_PRIVATE_LIBRARY_DIRS}
107118
${LIBHWLOC_LIBRARY_DIRS})
108119

@@ -121,11 +132,14 @@ elseif(MACOSX)
121132
endif()
122133

123134
if(UMF_BUILD_SHARED_LIBRARY)
135+
if(NOT UMF_DISABLE_HWLOC)
136+
set(HWLOC_LIB hwloc)
137+
endif()
124138
add_umf_library(
125139
NAME umf
126140
TYPE SHARED
127141
SRCS ${UMF_SOURCES}
128-
LIBS ${UMF_LIBS} hwloc
142+
LIBS ${UMF_LIBS} ${HWLOC_LIB}
129143
LINUX_MAP_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libumf.map
130144
WINDOWS_DEF_FILE ${CMAKE_CURRENT_BINARY_DIR}/libumf.def)
131145
set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS}
@@ -143,6 +157,11 @@ else()
143157
LIBS ${UMF_LIBS})
144158
endif()
145159

160+
if(UMF_DISABLE_HWLOC)
161+
set(UMF_COMMON_COMPILE_DEFINITIONS ${UMF_COMMON_COMPILE_DEFINITIONS}
162+
UMF_NO_HWLOC=1)
163+
endif()
164+
146165
if(UMF_LINK_HWLOC_STATICALLY)
147166
add_dependencies(umf hwloc)
148167
endif()
@@ -190,6 +209,8 @@ install(TARGETS umf EXPORT ${PROJECT_NAME}-targets)
190209

191210
add_subdirectory(pool)
192211

193-
if(UMF_PROXY_LIB_ENABLED AND NOT UMF_LINK_HWLOC_STATICALLY)
212+
if(UMF_PROXY_LIB_ENABLED
213+
AND NOT UMF_LINK_HWLOC_STATICALLY
214+
AND NOT UMF_DISABLE_HWLOC)
194215
add_subdirectory(proxy_lib)
195216
endif()

src/libumf.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
#include "base_alloc_global.h"
1313
#include "memspace_internal.h"
1414
#include "provider_tracking.h"
15-
#include "topology.h"
1615
#include "utils_log.h"
16+
#if !defined(UMF_NO_HWLOC)
17+
#include "topology.h"
18+
#endif
1719

1820
umf_memory_tracker_handle_t TRACKER = NULL;
1921

@@ -30,7 +32,7 @@ int umfInit(void) {
3032

3133
void umfTearDown(void) {
3234
if (util_fetch_and_add64(&umfRefCount, -1) == 1) {
33-
#ifndef _WIN32
35+
#if !defined(_WIN32) && !defined(UMF_NO_HWLOC)
3436
umfMemspaceHostAllDestroy();
3537
umfMemspaceHighestCapacityDestroy();
3638
umfMemspaceHighestBandwidthDestroy();

test/CMakeLists.txt

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -152,26 +152,29 @@ endif()
152152

153153
if(UMF_BUILD_LIBUMF_POOL_DISJOINT
154154
AND UMF_BUILD_LIBUMF_POOL_JEMALLOC
155-
AND UMF_POOL_SCALABLE_ENABLED)
155+
AND UMF_POOL_SCALABLE_ENABLED
156+
AND (NOT UMF_DISABLE_HWLOC))
156157
add_umf_test(
157158
NAME c_api_multi_pool
158159
SRCS c_api/multi_pool.c
159160
LIBS disjoint_pool jemalloc_pool ${JEMALLOC_LIBRARIES})
160161
endif()
161162

162-
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
163+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC AND (NOT UMF_DISABLE_HWLOC))
163164
add_umf_test(
164165
NAME jemalloc_pool
165166
SRCS pools/jemalloc_pool.cpp malloc_compliance_tests.cpp
166167
LIBS jemalloc_pool)
167168
endif()
168169

169-
if(UMF_POOL_SCALABLE_ENABLED)
170+
if(UMF_POOL_SCALABLE_ENABLED AND (NOT UMF_DISABLE_HWLOC))
170171
add_umf_test(NAME scalable_pool SRCS pools/scalable_pool.cpp
171172
malloc_compliance_tests.cpp)
172173
endif()
173174

174-
if(LINUX) # OS-specific functions are implemented only for Linux now
175+
if(LINUX AND (NOT UMF_DISABLE_HWLOC)) # OS-specific functions are implemented
176+
# only for
177+
# Linux now
175178
if(PkgConfig_FOUND)
176179
pkg_check_modules(LIBNUMA numa)
177180
endif()
@@ -262,7 +265,9 @@ add_umf_test(
262265
LIBS ${UMF_UTILS_FOR_TEST})
263266

264267
# tests for the proxy library
265-
if(UMF_PROXY_LIB_ENABLED AND UMF_BUILD_SHARED_LIBRARY)
268+
if(UMF_PROXY_LIB_ENABLED
269+
AND UMF_BUILD_SHARED_LIBRARY
270+
AND NOT UMF_DISABLE_HWLOC)
266271
add_umf_test(
267272
NAME proxy_lib_basic
268273
SRCS ${BA_SOURCES_FOR_TEST} test_proxy_lib.cpp
@@ -313,22 +318,24 @@ function(add_umf_ipc_test)
313318
endfunction()
314319

315320
if(LINUX)
316-
build_umf_test(
317-
NAME
318-
ipc_os_prov_consumer
319-
SRCS
320-
ipc_os_prov_consumer.c
321-
common/ipc_common.c
322-
common/ipc_os_prov_common.c)
323-
build_umf_test(
324-
NAME
325-
ipc_os_prov_producer
326-
SRCS
327-
ipc_os_prov_producer.c
328-
common/ipc_common.c
329-
common/ipc_os_prov_common.c)
330-
add_umf_ipc_test(TEST ipc_os_prov_anon_fd)
331-
add_umf_ipc_test(TEST ipc_os_prov_shm)
321+
if(NOT UMF_DISABLE_HWLOC)
322+
build_umf_test(
323+
NAME
324+
ipc_os_prov_consumer
325+
SRCS
326+
ipc_os_prov_consumer.c
327+
common/ipc_common.c
328+
common/ipc_os_prov_common.c)
329+
build_umf_test(
330+
NAME
331+
ipc_os_prov_producer
332+
SRCS
333+
ipc_os_prov_producer.c
334+
common/ipc_common.c
335+
common/ipc_os_prov_common.c)
336+
add_umf_ipc_test(TEST ipc_os_prov_anon_fd)
337+
add_umf_ipc_test(TEST ipc_os_prov_shm)
338+
endif()
332339
if(UMF_BUILD_GPU_TESTS AND UMF_BUILD_LEVEL_ZERO_PROVIDER)
333340
build_umf_test(
334341
NAME
@@ -364,7 +371,8 @@ endif()
364371

365372
if(LINUX
366373
AND UMF_BUILD_SHARED_LIBRARY
367-
AND UMF_POOL_SCALABLE_ENABLED)
374+
AND UMF_POOL_SCALABLE_ENABLED
375+
AND NOT UMF_DISABLE_HWLOC)
368376
add_umf_test(
369377
NAME init_teardown
370378
SRCS test_init_teardown.c
@@ -427,11 +435,13 @@ if(LINUX
427435
)
428436
endif()
429437

430-
add_test(
431-
NAME umf_standalone_examples
432-
COMMAND
433-
${UMF_CMAKE_SOURCE_DIR}/test/test_examples.sh
434-
${UMF_CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_INSTALL_PREFIX}
435-
${EXAMPLES}
436-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
438+
if(NOT UMF_DISABLE_HWLOC)
439+
add_test(
440+
NAME umf_standalone_examples
441+
COMMAND
442+
${UMF_CMAKE_SOURCE_DIR}/test/test_examples.sh
443+
${UMF_CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}
444+
${CMAKE_INSTALL_PREFIX} ${EXAMPLES}
445+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
446+
endif()
437447
endif()

0 commit comments

Comments
 (0)