Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
option(BUILD_UCM_STORE "build ucm store module." ON)
option(BUILD_UCM_SPARSE "build ucm sparse module." ON)
option(BUILD_UNIT_TESTS "build all unit test suits." OFF)
option(BUILD_NUMA "build numactl library" OFF)
set(RUNTIME_ENVIRONMENT "simu" CACHE STRING "runtime: simu, ascend, musa or cuda.")

execute_process(COMMAND git rev-parse HEAD OUTPUT_VARIABLE UCM_COMMIT_ID OUTPUT_STRIP_TRAILING_WHITESPACE)
Expand Down
78 changes: 43 additions & 35 deletions ucm/sparse/esa/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,42 +1,50 @@
set(NUMA_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/numa_install)
FetchContent_Declare(
numactl
URL https://github.com/numactl/numactl/releases/download/v2.0.16/numactl-2.0.16.tar.gz
TLS_VERIFY OFF
)
FetchContent_MakeAvailable(numactl)
if(NOT EXISTS "${NUMA_INSTALL_DIR}/lib/libnuma.so")
message(STATUS "Configuring numactl...")
execute_process(
COMMAND ./configure --prefix=${NUMA_INSTALL_DIR}
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_configure_result
OUTPUT_VARIABLE numa_configure_output
ERROR_VARIABLE numa_configure_error
)
if(NOT numa_configure_result EQUAL 0)
message(FATAL_ERROR "Failed to configure numactl. \n"
"Result: ${numa_configure_result}\n"
"STDOUT: ${numa_configure_output}\n"
"STDERR: ${numa_configure_error}\n")
endif()
if(BUILD_NUMA)
message(STATUS "Building numactl library...")

message(STATUS "Building and installing numactl...")
execute_process(
COMMAND make install -j8
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_install_result
OUTPUT_VARIABLE numa_install_output
ERROR_VARIABLE numa_install_error
set(NUMA_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/numa_install)
FetchContent_Declare(
numactl
URL https://github.com/numactl/numactl/releases/download/v2.0.16/numactl-2.0.16.tar.gz
TLS_VERIFY OFF
)
if(NOT numa_install_result EQUAL 0)
message(FATAL_ERROR "Failed to build and install numactl. \n"
"Result: ${numa_install_result}\n"
"STDOUT: ${numa_install_output}\n"
"STDERR: ${numa_install_error}\n")
FetchContent_MakeAvailable(numactl)
if(NOT EXISTS "${NUMA_INSTALL_DIR}/lib/libnuma.so")
message(STATUS "Configuring numactl...")
execute_process(
COMMAND ./configure --prefix=${NUMA_INSTALL_DIR}
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_configure_result
OUTPUT_VARIABLE numa_configure_output
ERROR_VARIABLE numa_configure_error
)
if(NOT numa_configure_result EQUAL 0)
message(FATAL_ERROR "Failed to configure numactl. \n"
"Result: ${numa_configure_result}\n"
"STDOUT: ${numa_configure_output}\n"
"STDERR: ${numa_configure_error}\n")
endif()

message(STATUS "Building and installing numactl...")
execute_process(
COMMAND make install -j8
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_install_result
OUTPUT_VARIABLE numa_install_output
ERROR_VARIABLE numa_install_error
)
if(NOT numa_install_result EQUAL 0)
message(FATAL_ERROR "Failed to build and install numactl. \n"
"Result: ${numa_install_result}\n"
"STDOUT: ${numa_install_output}\n"
"STDERR: ${numa_install_error}\n")
endif()
else()
message(STATUS "Found already built libnuma. Skipping build.")
endif()

add_definitions(-DNUMA_ENABLED)
else()
message(STATUS "Found already built libnuma. Skipping build.")
message(STATUS "Skipping numactl build...")
endif()

add_subdirectory(retrieval)
2 changes: 1 addition & 1 deletion ucm/sparse/esa/retrieval/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ target_include_directories(retrieval_backend PUBLIC

# 链接所需的库
target_link_libraries(retrieval_backend PUBLIC
${NUMA_INSTALL_DIR}/lib/libnuma.so
$<$<BOOL:${BUILD_NUMA}>:${NUMA_INSTALL_DIR}/lib/libnuma.so>
${Torch_LIBRARIES}
)
8 changes: 7 additions & 1 deletion ucm/sparse/esa/retrieval/cpy/retrieval_backend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
#include <vector>
#include <algorithm>
#include <random>
#ifdef NUMA_ENABLED
#include <numaif.h>
#endif
#include <iostream>

namespace py = pybind11;
Expand All @@ -29,7 +31,6 @@ class RetrievalWorkerBackend {

// Start worker threads
for (auto cpu_idx : cpu_idx_tbl) {
int numaId = cpu_idx.first.cast<int>();
py::list core_ids = cpu_idx.second.cast<py::list>();

for (size_t i = 0; i < core_ids.size(); ++i) {
Expand All @@ -49,12 +50,17 @@ class RetrievalWorkerBackend {
std::cerr << "Error binding thread " << i << " to CPU core " << core_id << std::endl;
}

#ifdef NUMA_ENABLED
int numaId = cpu_idx.first.cast<int>();
// 设置内存亲和性
unsigned long nodeMask = 1UL << numaId;
rc = set_mempolicy(MPOL_BIND, &nodeMask, sizeof(nodeMask) * 8);
if (rc != 0) {
std::cerr << "Error binding memory to NUMA node " << numaId << std::endl;
}
#else
std::cerr << "NUMA support is disabled." << std::endl;
#endif
}

}
Expand Down
78 changes: 43 additions & 35 deletions ucm/sparse/kvcomp/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,42 +1,50 @@
set(NUMA_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/numa_install)
FetchContent_Declare(
numactl
URL https://github.com/numactl/numactl/releases/download/v2.0.16/numactl-2.0.16.tar.gz
TLS_VERIFY OFF
)
FetchContent_MakeAvailable(numactl)
if(NOT EXISTS "${NUMA_INSTALL_DIR}/lib/libnuma.so")
message(STATUS "Configuring numactl...")
execute_process(
COMMAND ./configure --prefix=${NUMA_INSTALL_DIR}
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_configure_result
OUTPUT_VARIABLE numa_configure_output
ERROR_VARIABLE numa_configure_error
)
if(NOT numa_configure_result EQUAL 0)
message(FATAL_ERROR "Failed to configure numactl. \n"
"Result: ${numa_configure_result}\n"
"STDOUT: ${numa_configure_output}\n"
"STDERR: ${numa_configure_error}\n")
endif()
if(BUILD_NUMA)
message(STATUS "Building numactl library...")

message(STATUS "Building and installing numactl...")
execute_process(
COMMAND make install -j8
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_install_result
OUTPUT_VARIABLE numa_install_output
ERROR_VARIABLE numa_install_error
set(NUMA_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/numa_install)
FetchContent_Declare(
numactl
URL https://github.com/numactl/numactl/releases/download/v2.0.16/numactl-2.0.16.tar.gz
TLS_VERIFY OFF
)
if(NOT numa_install_result EQUAL 0)
message(FATAL_ERROR "Failed to build and install numactl. \n"
"Result: ${numa_install_result}\n"
"STDOUT: ${numa_install_output}\n"
"STDERR: ${numa_install_error}\n")
FetchContent_MakeAvailable(numactl)
if(NOT EXISTS "${NUMA_INSTALL_DIR}/lib/libnuma.so")
message(STATUS "Configuring numactl...")
execute_process(
COMMAND ./configure --prefix=${NUMA_INSTALL_DIR}
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_configure_result
OUTPUT_VARIABLE numa_configure_output
ERROR_VARIABLE numa_configure_error
)
if(NOT numa_configure_result EQUAL 0)
message(FATAL_ERROR "Failed to configure numactl. \n"
"Result: ${numa_configure_result}\n"
"STDOUT: ${numa_configure_output}\n"
"STDERR: ${numa_configure_error}\n")
endif()

message(STATUS "Building and installing numactl...")
execute_process(
COMMAND make install -j8
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_install_result
OUTPUT_VARIABLE numa_install_output
ERROR_VARIABLE numa_install_error
)
if(NOT numa_install_result EQUAL 0)
message(FATAL_ERROR "Failed to build and install numactl. \n"
"Result: ${numa_install_result}\n"
"STDOUT: ${numa_install_output}\n"
"STDERR: ${numa_install_error}\n")
endif()
else()
message(STATUS "Found already built libnuma. Skipping build.")
endif()

add_definitions(-DNUMA_ENABLED)
else()
message(STATUS "Found already built libnuma. Skipping build.")
message(STATUS "Skipping numactl build...")
endif()

add_subdirectory(hash_retrieval)
2 changes: 1 addition & 1 deletion ucm/sparse/kvcomp/hash_retrieval/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ target_include_directories(hash_retrieval_backend PUBLIC

# 链接所需的库
target_link_libraries(hash_retrieval_backend PUBLIC
${NUMA_INSTALL_DIR}/lib/libnuma.so
$<$<BOOL:${BUILD_NUMA}>:${NUMA_INSTALL_DIR}/lib/libnuma.so>
${Torch_LIBRARIES}
)
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
#include <random>
#include <climits> // 用于UINT16_MAX
#include <omp.h>
#ifdef NUMA_ENABLED
#include <numaif.h>
#endif
#ifdef __ARM_NEON
#include <arm_neon.h> // ARM NEON SIMD 指令集头文件
#elif defined(__x86_64__) || defined(_M_X64)
Expand All @@ -43,7 +45,6 @@ class HashRetrievalWorkerBackend {

// Start worker threads
for (auto cpu_idx : cpu_idx_tbl) {
int numaId = cpu_idx.first.cast<int>();
py::list core_ids = cpu_idx.second.cast<py::list>();

for (size_t i = 0; i < core_ids.size(); ++i) {
Expand All @@ -63,12 +64,18 @@ class HashRetrievalWorkerBackend {
std::cerr << "Error binding thread " << i << " to CPU core " << core_id << std::endl;
}

#ifdef NUMA_ENABLED
int numaId = cpu_idx.first.cast<int>();
// 设置内存亲和性
unsigned long nodeMask = 1UL << numaId;
rc = set_mempolicy(MPOL_BIND, &nodeMask, sizeof(nodeMask) * 8);
if (rc != 0) {
std::cerr << "Error binding memory to NUMA node " << numaId << std::endl;
}
#else
std::cerr << "NUMA support is disabled." << std::endl;
#endif

}

}
Expand Down
78 changes: 43 additions & 35 deletions ucm/sparse/kvstar/retrieve/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,45 +54,53 @@ set(Torch_DIR ${PYTORCH_PATH}/share/cmake/Torch/)
find_package(Torch REQUIRED)
include_directories(${TORCH_INCLUDE_DIRS})

set(NUMA_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/numa_install)
FetchContent_Declare(
numactl
URL https://github.com/numactl/numactl/releases/download/v2.0.16/numactl-2.0.16.tar.gz
TLS_VERIFY OFF
)
FetchContent_MakeAvailable(numactl)
if(NOT EXISTS "${NUMA_INSTALL_DIR}/lib/libnuma.so")
message(STATUS "Configuring numactl...")
execute_process(
COMMAND ./configure --prefix=${NUMA_INSTALL_DIR}
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_configure_result
OUTPUT_VARIABLE numa_configure_output
ERROR_VARIABLE numa_configure_error
)
if(NOT numa_configure_result EQUAL 0)
message(FATAL_ERROR "Failed to configure numactl. \n"
"Result: ${numa_configure_result}\n"
"STDOUT: ${numa_configure_output}\n"
"STDERR: ${numa_configure_error}\n")
endif()
if(BUILD_NUMA)
message(STATUS "Building numactl library...")

message(STATUS "Building and installing numactl...")
execute_process(
COMMAND make install -j8
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_install_result
OUTPUT_VARIABLE numa_install_output
ERROR_VARIABLE numa_install_error
set(NUMA_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/numa_install)
FetchContent_Declare(
numactl
URL https://github.com/numactl/numactl/releases/download/v2.0.16/numactl-2.0.16.tar.gz
TLS_VERIFY OFF
)
if(NOT numa_install_result EQUAL 0)
message(FATAL_ERROR "Failed to build and install numactl. \n"
"Result: ${numa_install_result}\n"
"STDOUT: ${numa_install_output}\n"
"STDERR: ${numa_install_error}\n")
FetchContent_MakeAvailable(numactl)
if(NOT EXISTS "${NUMA_INSTALL_DIR}/lib/libnuma.so")
message(STATUS "Configuring numactl...")
execute_process(
COMMAND ./configure --prefix=${NUMA_INSTALL_DIR}
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_configure_result
OUTPUT_VARIABLE numa_configure_output
ERROR_VARIABLE numa_configure_error
)
if(NOT numa_configure_result EQUAL 0)
message(FATAL_ERROR "Failed to configure numactl. \n"
"Result: ${numa_configure_result}\n"
"STDOUT: ${numa_configure_output}\n"
"STDERR: ${numa_configure_error}\n")
endif()

message(STATUS "Building and installing numactl...")
execute_process(
COMMAND make install -j8
WORKING_DIRECTORY ${numactl_SOURCE_DIR}
RESULT_VARIABLE numa_install_result
OUTPUT_VARIABLE numa_install_output
ERROR_VARIABLE numa_install_error
)
if(NOT numa_install_result EQUAL 0)
message(FATAL_ERROR "Failed to build and install numactl. \n"
"Result: ${numa_install_result}\n"
"STDOUT: ${numa_install_output}\n"
"STDERR: ${numa_install_error}\n")
endif()
else()
message(STATUS "Found already built libnuma. Skipping build.")
endif()

add_definitions(-DNUMA_ENABLED)
else()
message(STATUS "Found already built libnuma. Skipping build.")
message(STATUS "Skipping numactl build...")
endif()

add_subdirectory(core)
Expand Down
2 changes: 1 addition & 1 deletion ucm/sparse/kvstar/retrieve/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ target_include_directories(kvstar_retrieve.core PUBLIC
target_link_libraries(kvstar_retrieve.core PUBLIC
spdlog::spdlog
fmt::fmt
${NUMA_INSTALL_DIR}/lib/libnuma.so
$<$<BOOL:${BUILD_NUMA}>:${NUMA_INSTALL_DIR}/lib/libnuma.so>
${Torch_LIBRARIES}
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#ifdef NUMA_ENABLED
#include <numaif.h>
#endif
#include "retrieve_task_queue.h"
#include "retrieve_task_runner.h"

Expand Down Expand Up @@ -27,13 +29,17 @@ void RetrieveTaskQueue::Worker(const int numaId, const int bindCoreId, std::prom
return;
}

#ifdef NUMA_ENABLED
unsigned long nodemask = 1UL << numaId;
rc = set_mempolicy(MPOL_BIND, &nodemask, sizeof(nodemask) * 8);
if (rc != 0) {
perror("set_mempolicy");
started.set_value(Status::OsApiError());
return;
}
#else
KVSTAR_DEBUG("NUMA support is disabled.");
#endif

KVSTAR_DEBUG("Bind current thread {} to numa {} core {} and set memory affinity success.", thread, numaId, bindCoreId);
RetrieveTaskRunner runner;
Expand Down