Skip to content

Commit 85fcd2d

Browse files
authored
Merge pull request #316 from ldorau/Enable_jemalloc_pool_on_Windows
Enable jemalloc pool on Windows
2 parents 7ef522d + bad9617 commit 85fcd2d

File tree

14 files changed

+140
-85
lines changed

14 files changed

+140
-85
lines changed

.github/workflows/basic.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ jobs:
178178
windows-build:
179179
name: Windows
180180
env:
181-
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows"
181+
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows;${{github.workspace}}/build/vcpkg/packages/jemalloc_x64-windows"
182182
strategy:
183183
matrix:
184184
os: ['windows-2019', 'windows-2022']
@@ -238,6 +238,7 @@ jobs:
238238
-DUMF_DEVELOPER_MODE=ON
239239
-DUMF_BUILD_LIBUMF_POOL_DISJOINT=ON
240240
-DUMF_BUILD_LIBUMF_POOL_SCALABLE=ON
241+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
241242
-DUMF_BUILD_OS_MEMORY_PROVIDER=${{matrix.os_provider}}
242243
-DUMF_BUILD_LEVEL_ZERO_PROVIDER=OFF
243244
@@ -273,6 +274,7 @@ jobs:
273274
-DUMF_BUILD_LEVEL_ZERO_PROVIDER=OFF
274275
-DUMF_BUILD_OS_MEMORY_PROVIDER=OFF
275276
-DUMF_BUILD_LIBUMF_POOL_SCALABLE=OFF
277+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=OFF
276278
277279
- name: Build UMF
278280
run: cmake --build ${{env.BUILD_DIR}} -j $(sysctl -n hw.logicalcpu)

.github/workflows/benchmarks.yml

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,10 @@ jobs:
1111
name: Benchmarks
1212
env:
1313
BUILD_DIR : "${{github.workspace}}/build/"
14-
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows"
14+
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows;${{github.workspace}}/build/vcpkg/packages/jemalloc_x64-windows"
1515
strategy:
1616
matrix:
17-
include:
18-
- os: ubuntu-latest
19-
pool_jemalloc: 'ON'
20-
21-
- os: windows-latest
22-
pool_jemalloc: 'OFF'
23-
17+
os: ['ubuntu-latest', 'windows-latest']
2418
runs-on: ${{matrix.os}}
2519

2620
steps:
@@ -60,7 +54,7 @@ jobs:
6054
-DUMF_DEVELOPER_MODE=OFF
6155
-DUMF_BUILD_OS_MEMORY_PROVIDER=ON
6256
-DUMF_BUILD_LIBUMF_POOL_DISJOINT=ON
63-
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=${{matrix.pool_jemalloc}}
57+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
6458
-DUMF_BUILD_LIBUMF_POOL_SCALABLE=ON
6559
-DUMF_ENABLE_POOL_TRACKING=OFF
6660
-DUMF_BUILD_LEVEL_ZERO_PROVIDER=OFF

.github/workflows/codeql.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
permissions:
2121
security-events: write
2222
env:
23-
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows"
23+
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows;${{github.workspace}}/build/vcpkg/packages/jemalloc_x64-windows"
2424
strategy:
2525
fail-fast: false
2626
matrix:
@@ -73,6 +73,7 @@ jobs:
7373
-DUMF_DEVELOPER_MODE=ON
7474
-DUMF_ENABLE_POOL_TRACKING=ON
7575
-DUMF_BUILD_LIBUMF_POOL_SCALABLE=ON
76+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
7677
-DUMF_BUILD_LEVEL_ZERO_PROVIDER=OFF
7778
7879
- name: Build

.github/workflows/pr_push.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,24 @@ jobs:
1414
FastBuild:
1515
name: Fast build
1616
env:
17-
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows"
17+
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows;${{github.workspace}}/build/vcpkg/packages/jemalloc_x64-windows"
1818
strategy:
1919
matrix:
2020
include:
2121
- os: windows-latest
2222
disjoint: 'OFF'
23-
jemalloc: 'OFF'
2423
# pure C build (Windows)
2524
- os: windows-latest
2625
disjoint: 'OFF'
27-
jemalloc: 'OFF'
2826
# Tests' building is off for a pure C build
2927
extra_build_options: '-DUMF_BUILD_TESTS=OFF'
3028
- os: ubuntu-latest
3129
disjoint: 'ON'
32-
jemalloc: 'ON'
3330
# Windows doesn't recognize 'CMAKE_BUILD_TYPE', it uses '--config' param in build command
3431
extra_build_options: '-DCMAKE_BUILD_TYPE=Release -DUMF_BUILD_BENCHMARKS=ON -DUMF_BUILD_BENCHMARKS_MT=ON'
3532
# pure C build (Linux)
3633
- os: ubuntu-latest
3734
disjoint: 'OFF'
38-
jemalloc: 'ON'
3935
# Windows doesn't recognize 'CMAKE_BUILD_TYPE', it uses '--config' param in build command
4036
# Tests' building is off for a pure C build
4137
extra_build_options: '-DCMAKE_BUILD_TYPE=Release -DUMF_BUILD_BENCHMARKS=ON -DUMF_BUILD_TESTS=OFF'
@@ -74,7 +70,7 @@ jobs:
7470
-DUMF_ENABLE_POOL_TRACKING=ON
7571
-DUMF_BUILD_LIBUMF_POOL_SCALABLE=ON
7672
-DUMF_BUILD_LIBUMF_POOL_DISJOINT=${{matrix.disjoint}}
77-
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=${{matrix.jemalloc}}
73+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=ON
7874
-DUMF_BUILD_TESTS=ON
7975
-DUMF_BUILD_EXAMPLES=ON
8076
-DUMF_BUILD_LEVEL_ZERO_PROVIDER=OFF
@@ -109,6 +105,7 @@ jobs:
109105
-DUMF_BUILD_TESTS=OFF
110106
-DUMF_BUILD_LEVEL_ZERO_PROVIDER=OFF
111107
-DUMF_BUILD_LIBUMF_POOL_SCALABLE=OFF
108+
-DUMF_BUILD_LIBUMF_POOL_JEMALLOC=OFF
112109
113110
- name: Check clang-format
114111
run: cmake --build build --target clang-format-check

.github/workflows/sanitizers.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ jobs:
111111
windows-build:
112112
name: cl and clang-cl on Windows
113113
env:
114-
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows"
114+
VCPKG_PATH: "${{github.workspace}}/build/vcpkg/packages/hwloc_x64-windows;${{github.workspace}}/build/vcpkg/packages/tbb_x64-windows;${{github.workspace}}/build/vcpkg/packages/jemalloc_x64-windows"
115115
strategy:
116116
matrix:
117117
compiler: [{c: cl, cxx: cl}, {c: clang-cl, cxx: clang-cl}]

CMakeLists.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,18 +113,36 @@ install(
113113
TARGETS umf_headers
114114
EXPORT ${PROJECT_NAME}-targets)
115115

116+
if(WINDOWS)
117+
# set PATH to DLLs on Windows
118+
set(DLL_PATH_LIST "PATH=path_list_append:../bin/$<CONFIG>")
119+
endif()
120+
116121
if(UMF_BUILD_OS_MEMORY_PROVIDER AND (LINUX OR WINDOWS))
117122
pkg_check_modules(LIBHWLOC hwloc)
118123
if(NOT LIBHWLOC_FOUND)
119124
find_package(LIBHWLOC REQUIRED hwloc)
120125
endif()
126+
# add PATH to DLL on Windows
127+
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}/../bin")
121128
endif()
122129

123130
if(UMF_BUILD_LIBUMF_POOL_SCALABLE AND (LINUX OR WINDOWS))
124131
pkg_check_modules(TBB tbb)
125132
if(NOT TBB_FOUND)
126133
find_package(TBB REQUIRED tbb)
127134
endif()
135+
# add PATH to DLL on Windows
136+
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${TBB_LIBRARY_DIRS}/../bin")
137+
endif()
138+
139+
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC AND (LINUX OR WINDOWS))
140+
pkg_check_modules(JEMALLOC jemalloc)
141+
if(NOT JEMALLOC_FOUND)
142+
find_package(JEMALLOC REQUIRED jemalloc)
143+
endif()
144+
# add PATH to DLL on Windows
145+
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${JEMALLOC_LIBRARY_DIRS}/../bin")
128146
endif()
129147

130148
add_subdirectory(src)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ TODO: Add a description
159159

160160
To enable this feature, the `UMF_BUILD_LIBUMF_POOL_DISJOINT` option needs to be turned `ON`.
161161

162-
#### libumf_pool_jemalloc (Linux-only)
162+
#### libumf_pool_jemalloc
163163

164164
libumf_pool_jemalloc is a [jemalloc](https://github.com/jemalloc/jemalloc)-based memory pool manager built as a separate static library.
165165
The `UMF_BUILD_LIBUMF_POOL_JEMALLOC` option has to be turned `ON` to build this library.
@@ -168,7 +168,7 @@ The `UMF_BUILD_LIBUMF_POOL_JEMALLOC` option has to be turned `ON` to build this
168168

169169
1) The `UMF_BUILD_LIBUMF_POOL_JEMALLOC` option turned `ON`
170170
2) Required packages:
171-
- libjemalloc-dev
171+
- libjemalloc-dev (Linux) or jemalloc (Windows)
172172

173173
#### libumf_pool_scalable
174174

benchmark/CMakeLists.txt

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,6 @@ function(add_umf_benchmark)
4444

4545
if(WINDOWS)
4646
# append PATH to DLLs
47-
set(DLL_PATH_LIST "PATH=path_list_append:../bin/$<CONFIG>")
48-
if(LIBHWLOC_LIBRARY_DIRS)
49-
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}/../bin")
50-
endif()
51-
if(TBB_LIBRARY_DIRS)
52-
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${TBB_LIBRARY_DIRS}/../bin")
53-
endif()
5447
set_property(TEST ${BENCH_NAME} PROPERTY ENVIRONMENT_MODIFICATION "${DLL_PATH_LIST}")
5548
endif()
5649

@@ -70,16 +63,17 @@ endfunction()
7063

7164
# optional libraries
7265
if(UMF_BUILD_LIBUMF_POOL_DISJOINT)
73-
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} disjoint_pool)
66+
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} disjoint_pool)
7467
endif()
7568
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
76-
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} jemalloc_pool)
69+
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} jemalloc_pool ${JEMALLOC_LIBRARIES})
70+
set(LIB_DIRS_OPTIONAL ${LIB_DIRS_OPTIONAL} ${JEMALLOC_LIBRARY_DIRS})
7771
endif()
7872
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
79-
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} scalable_pool)
73+
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} scalable_pool)
8074
endif()
8175
if(LINUX)
82-
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} m)
76+
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} m)
8377
endif()
8478
if(UMF_BUILD_OS_MEMORY_PROVIDER)
8579
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} ${LIBHWLOC_LIBRARIES})

cmake/FindJEMALLOC.cmake

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
3+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4+
5+
message(STATUS "Checking for module 'jemalloc' using find_library()")
6+
7+
find_library(JEMALLOC_LIBRARY NAMES libjemalloc jemalloc)
8+
set(JEMALLOC_LIBRARIES ${JEMALLOC_LIBRARY})
9+
10+
get_filename_component(JEMALLOC_LIB_DIR ${JEMALLOC_LIBRARIES} DIRECTORY)
11+
set(JEMALLOC_LIBRARY_DIRS ${JEMALLOC_LIB_DIR})
12+
13+
find_file(JEMALLOC_HEADER NAMES "jemalloc/jemalloc.h")
14+
if(JEMALLOC_HEADER)
15+
get_filename_component(JEMALLOC_INCLUDE_DIR_TBB ${JEMALLOC_HEADER} DIRECTORY)
16+
get_filename_component(JEMALLOC_INCLUDE_DIR ${JEMALLOC_INCLUDE_DIR_TBB} DIRECTORY)
17+
set(JEMALLOC_INCLUDE_DIRS ${JEMALLOC_INCLUDE_DIR})
18+
else()
19+
set(MSG_NOT_FOUND "<jemalloc/jemalloc.h> header NOT found (set CMAKE_PREFIX_PATH to point the location)")
20+
if(JEMALLOC_FIND_REQUIRED)
21+
message(FATAL_ERROR ${MSG_NOT_FOUND})
22+
else()
23+
message(WARNING ${MSG_NOT_FOUND})
24+
endif()
25+
endif()
26+
27+
if(WINDOWS)
28+
find_file(JEMALLOC_DLL NAMES "bin/jemalloc.dll")
29+
get_filename_component(JEMALLOC_DLL_DIR ${JEMALLOC_DLL} DIRECTORY)
30+
set(JEMALLOC_DLL_DIRS ${JEMALLOC_DLL_DIR})
31+
endif()
32+
33+
if(JEMALLOC_LIBRARY)
34+
message(STATUS " Found jemalloc using find_library()")
35+
message(STATUS " JEMALLOC_LIBRARIES = ${JEMALLOC_LIBRARIES}")
36+
message(STATUS " JEMALLOC_INCLUDE_DIRS = ${JEMALLOC_INCLUDE_DIRS}")
37+
message(STATUS " JEMALLOC_LIBRARY_DIRS = ${JEMALLOC_LIBRARY_DIRS}")
38+
if(WINDOWS)
39+
message(STATUS " JEMALLOC_DLL_DIRS = ${JEMALLOC_DLL_DIRS}")
40+
endif()
41+
else()
42+
set(MSG_NOT_FOUND "jemalloc NOT found (set CMAKE_PREFIX_PATH to point the location)")
43+
if(JEMALLOC_FIND_REQUIRED)
44+
message(FATAL_ERROR ${MSG_NOT_FOUND})
45+
else()
46+
message(WARNING ${MSG_NOT_FOUND})
47+
endif()
48+
endif()

examples/CMakeLists.txt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,6 @@ if(UMF_BUILD_OS_MEMORY_PROVIDER AND UMF_BUILD_LIBUMF_POOL_SCALABLE AND UMF_ENABL
2525

2626
if(WINDOWS)
2727
# append PATH to DLLs
28-
set(DLL_PATH_LIST "PATH=path_list_append:../bin/$<CONFIG>")
29-
if(LIBHWLOC_LIBRARY_DIRS)
30-
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_LIBRARY_DIRS}/../bin")
31-
endif()
32-
if(TBB_LIBRARY_DIRS)
33-
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${TBB_LIBRARY_DIRS}/../bin")
34-
endif()
3528
set_property(TEST ${EXAMPLE_NAME} PROPERTY ENVIRONMENT_MODIFICATION "${DLL_PATH_LIST}")
3629
endif()
3730

src/pool/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,19 @@ endif()
3535

3636
# libumf_pool_jemalloc
3737
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
38-
if(LINUX)
38+
if(LINUX OR WINDOWS)
3939
add_umf_library(NAME jemalloc_pool
4040
TYPE STATIC
4141
SRCS pool_jemalloc.c ${POOL_EXTRA_SRCS}
4242
LIBS jemalloc umf_utils)
43+
target_include_directories(jemalloc_pool PRIVATE ${JEMALLOC_INCLUDE_DIRS})
4344
target_compile_definitions(jemalloc_pool PUBLIC ${POOL_COMPILE_DEFINITIONS})
4445
add_library(${PROJECT_NAME}::jemalloc_pool ALIAS jemalloc_pool)
4546
install(TARGETS jemalloc_pool
4647
EXPORT ${PROJECT_NAME}-targets
4748
)
4849
else()
49-
message(FATAL_ERROR "libumf_pool_jemalloc is supported on Linux only")
50+
message(FATAL_ERROR "libumf_pool_jemalloc is supported on Linux and Windows only")
5051
endif()
5152
endif()
5253

0 commit comments

Comments
 (0)