Skip to content

Commit ca47cd1

Browse files
authored
GH-45331: [C++] Use xsimd for CPU feature detection (#49940)
### Rationale for this change Use xsimd cpu feature instead of maitaining them here. Stacked on GH-49922. Should also handle issue from GH-30368. ### What changes are included in this PR? - Use xsimd for CPu feature detection, cache sizes are still using the same implementation - We are loosing CPU model name (which was unused) - Simplify CpuInfo (remove Pimpl pattern) ### Are these changes tested? in CI ### Are there any user-facing changes? No * GitHub Issue: #45331 Authored-by: AntoinePrv <AntoinePrv@users.noreply.github.com> Signed-off-by: Antoine Pitrou <antoine@python.org>
1 parent 4e25461 commit ca47cd1

7 files changed

Lines changed: 181 additions & 408 deletions

File tree

cpp/cmake_modules/ThirdpartyToolchain.cmake

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2844,28 +2844,20 @@ macro(build_xsimd)
28442844
set(XSIMD_VENDORED TRUE)
28452845
endmacro()
28462846

2847-
if((NOT ARROW_SIMD_LEVEL STREQUAL "NONE") OR (NOT ARROW_RUNTIME_SIMD_LEVEL STREQUAL "NONE"
2848-
))
2849-
set(ARROW_USE_XSIMD TRUE)
2847+
# Xsimd is mandatory as its CPU feature detection is the basis for Arrow CpuInfo
2848+
resolve_dependency(xsimd
2849+
FORCE_ANY_NEWER_VERSION
2850+
TRUE
2851+
IS_RUNTIME_DEPENDENCY
2852+
FALSE
2853+
REQUIRED_VERSION
2854+
"14.2.0")
2855+
2856+
if(xsimd_SOURCE STREQUAL "BUNDLED")
2857+
set(ARROW_XSIMD arrow::xsimd)
28502858
else()
2851-
set(ARROW_USE_XSIMD FALSE)
2852-
endif()
2853-
2854-
if(ARROW_USE_XSIMD)
2855-
resolve_dependency(xsimd
2856-
FORCE_ANY_NEWER_VERSION
2857-
TRUE
2858-
IS_RUNTIME_DEPENDENCY
2859-
FALSE
2860-
REQUIRED_VERSION
2861-
"14.2.0")
2862-
2863-
if(xsimd_SOURCE STREQUAL "BUNDLED")
2864-
set(ARROW_XSIMD arrow::xsimd)
2865-
else()
2866-
message(STATUS "xsimd found. Headers: ${xsimd_INCLUDE_DIRS}")
2867-
set(ARROW_XSIMD xsimd)
2868-
endif()
2859+
message(STATUS "xsimd found. Headers: ${xsimd_INCLUDE_DIRS}")
2860+
set(ARROW_XSIMD xsimd)
28692861
endif()
28702862

28712863
macro(build_zlib)

cpp/src/arrow/CMakeLists.txt

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,9 @@ arrow_add_object_library(ARROW_UTIL ${ARROW_UTIL_SRCS})
601601
foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS})
602602
target_compile_definitions(${ARROW_UTIL_TARGET} PRIVATE URI_STATIC_BUILD)
603603
endforeach()
604+
foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS})
605+
target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${ARROW_XSIMD})
606+
endforeach()
604607

605608
if(ARROW_USE_BOOST)
606609
foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS})
@@ -617,11 +620,6 @@ if(ARROW_USE_OPENSSL)
617620
target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${ARROW_OPENSSL_LIBS})
618621
endforeach()
619622
endif()
620-
if(ARROW_USE_XSIMD)
621-
foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS})
622-
target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${ARROW_XSIMD})
623-
endforeach()
624-
endif()
625623
if(ARROW_WITH_BROTLI)
626624
foreach(ARROW_UTIL_TARGET ${ARROW_UTIL_TARGETS})
627625
target_link_libraries(${ARROW_UTIL_TARGET} PRIVATE ${ARROW_BROTLI_LIBS})
@@ -734,11 +732,9 @@ if(ARROW_CSV)
734732
csv/parser.cc
735733
csv/reader.cc
736734
csv/writer.cc)
737-
if(ARROW_USE_XSIMD)
738-
foreach(ARROW_CSV_TARGET ${ARROW_CSV_TARGETS})
739-
target_link_libraries(${ARROW_CSV_TARGET} PRIVATE ${ARROW_XSIMD})
740-
endforeach()
741-
endif()
735+
foreach(ARROW_CSV_TARGET ${ARROW_CSV_TARGETS})
736+
target_link_libraries(${ARROW_CSV_TARGET} PRIVATE ${ARROW_XSIMD})
737+
endforeach()
742738

743739
list(APPEND ARROW_TESTING_SRCS csv/test_common.cc)
744740
else()
@@ -855,15 +851,13 @@ if(ARROW_COMPUTE)
855851
list(APPEND ARROW_COMPUTE_SHARED_INSTALL_INTERFACE_LIBS Arrow::arrow_shared)
856852
list(APPEND ARROW_COMPUTE_STATIC_LINK_LIBS arrow_static)
857853
list(APPEND ARROW_COMPUTE_SHARED_LINK_LIBS arrow_shared)
854+
list(APPEND ARROW_COMPUTE_STATIC_LINK_LIBS ${ARROW_XSIMD})
855+
list(APPEND ARROW_COMPUTE_SHARED_PRIVATE_LINK_LIBS ${ARROW_XSIMD})
858856

859857
if(ARROW_USE_BOOST)
860858
list(APPEND ARROW_COMPUTE_STATIC_LINK_LIBS Boost::headers)
861859
list(APPEND ARROW_COMPUTE_SHARED_PRIVATE_LINK_LIBS Boost::headers)
862860
endif()
863-
if(ARROW_USE_XSIMD)
864-
list(APPEND ARROW_COMPUTE_STATIC_LINK_LIBS ${ARROW_XSIMD})
865-
list(APPEND ARROW_COMPUTE_SHARED_PRIVATE_LINK_LIBS ${ARROW_XSIMD})
866-
endif()
867861
if(ARROW_WITH_OPENTELEMETRY)
868862
list(APPEND ARROW_COMPUTE_STATIC_LINK_LIBS ${ARROW_OPENTELEMETRY_LIBS})
869863
list(APPEND ARROW_COMPUTE_SHARED_PRIVATE_LINK_LIBS ${ARROW_OPENTELEMETRY_LIBS})
@@ -910,11 +904,9 @@ endif()
910904

911905
arrow_add_object_library(ARROW_COMPUTE_CORE ${ARROW_COMPUTE_SRCS})
912906

913-
if(ARROW_USE_XSIMD)
914-
foreach(ARROW_COMPUTE_CORE_TARGET ${ARROW_COMPUTE_CORE_TARGETS})
915-
target_link_libraries(${ARROW_COMPUTE_CORE_TARGET} PRIVATE ${ARROW_XSIMD})
916-
endforeach()
917-
endif()
907+
foreach(ARROW_COMPUTE_CORE_TARGET ${ARROW_COMPUTE_CORE_TARGETS})
908+
target_link_libraries(${ARROW_COMPUTE_CORE_TARGET} PRIVATE ${ARROW_XSIMD})
909+
endforeach()
918910
if(ARROW_WITH_OPENTELEMETRY)
919911
foreach(ARROW_COMPUTE_CORE_TARGET ${ARROW_COMPUTE_CORE_TARGETS})
920912
target_link_libraries(${ARROW_COMPUTE_CORE_TARGET}

cpp/src/arrow/util/CMakeLists.txt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ else()
3939
endif()
4040

4141
set(ARROW_UTILITY_TEST_LINK_LIBS Boost::headers)
42-
if(ARROW_USE_XSIMD)
43-
list(APPEND ARROW_UTILITY_TEST_LINK_LIBS ${ARROW_XSIMD})
44-
endif()
42+
list(APPEND ARROW_UTILITY_TEST_LINK_LIBS ${ARROW_XSIMD})
4543
if(ARROW_WITH_OPENTELEMETRY)
4644
list(APPEND ARROW_UTILITY_TEST_LINK_LIBS ${ARROW_OPENTELEMETRY_LIBS})
4745
endif()
@@ -135,9 +133,7 @@ add_arrow_benchmark(tdigest_benchmark)
135133
add_arrow_benchmark(thread_pool_benchmark)
136134
add_arrow_benchmark(trie_benchmark)
137135
set(ARROW_BENCHMARK_UTF8_UTIL_LINK_LIBS)
138-
if(ARROW_USE_XSIMD)
139-
list(APPEND ARROW_BENCHMARK_UTF8_UTIL_LINK_LIBS ${ARROW_XSIMD})
140-
endif()
136+
list(APPEND ARROW_BENCHMARK_UTF8_UTIL_LINK_LIBS ${ARROW_XSIMD})
141137
add_arrow_benchmark(utf8_util_benchmark EXTRA_LINK_LIBS
142138
${ARROW_BENCHMARK_UTF8_UTIL_LINK_LIBS})
143139
add_arrow_benchmark(value_parsing_benchmark)

0 commit comments

Comments
 (0)