GH-25025: [C++] Move non core compute kernels into separate shared library - #46261

Merged
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2
Jun 13, 2025
Merged

GH-25025: [C++] Move non core compute kernels into separate shared library#46261
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2

Conversation

@raulcd

@raulcdraulcd commented Apr 29, 2025

Copy link
Copy Markdown
Member

Rationale for this change

Arrow is quite a heavy dependency and some users don't need all the tools we provide bundled with libarrow. Moving Arrow Compute to its own shared library allows users installations that better suit their needs having smaller memory footprint if necessary.
It might also help some users adding new kernels into an existing Arrow without recompiling it.

What changes are included in this PR?

  • Move all the Arrow Compute kernel functions to a new ArrowCompute shared library (libarrow_compute.so).
  • Create a new API to Initialize arrow compute registering the existing Kernels into the FunctionRegistry
  • Update Python/R/CGLib bindings to automatically register the Compute kernels transparently to the user.
  • Update Linux Packaging to provide the new arrow-compute library.
  • Update documentation with new requirements to call arrow::compute::Initialize()

Are these changes tested?

Yes on all CI jobs.

Are there any user-facing changes?

Yes. The Arrow compute functions will be provided as a different library. Any user using Arrow Compute from C++ directly will require a call to arrow::compute::Initialize() in order for the functions and kernels to be registered

This PR includes breaking changes to public APIs.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

This comment was marked as outdated.

@raulcd
raulcdforce-pushed the GH-25025-2 branch 2 times, most recently from e8fc17f to f21df32CompareApril 30, 2025 08:10
@raulcd

Copy link
Copy Markdown
MemberAuthor

It seems I am down to one job failure to the Windows R release job (CGLib Ruby is failing due to an existing issue):
I am unsure why I am getting missing symbols on dataset and acero when building statically. I've tried several things, around our *.pc.in and configure.win files to try and fix linking to the new arrow_compute but I am unsure where the problem is exactly coming.
@kou@nealrichardson@assignUser any idea if what can I try?

$ g++ -shared -s -static-libgcc -o arrow.dll tmp.def RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o config.o csv.o dataset.o datatype.o expression.o extension-impl.o feather.o field.o filesystem.o io.o json.o memorypool.o message.o parquet.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o safe-call-into-r-impl.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-20.0.0.9000/lib-14.2.0/x64 -L../windows/arrow-20.0.0.9000/lib/x64-ucrt -larrow_dataset -larrow_acero -lparquet -larrow_compute -larrow -larrow_bundled_dependencies -lutf8proc -lsnappy -lz -lzstd -llz4 -lbz2 -lbrotlienc -lbrotlidec -lbrotlicommon -lole32 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -luserenv -lversion -lws2_32 -lbcrypt -lwininet -lwinhttp -lsecur32 -lshlwapi -lncrypt -lcurl -lnormaliz -lssh2 -lgdi32 -lssl -lcrypto -lcrypt32 -lwldap32 -lz -lws2_32 -lnghttp2 -ldbghelp -LC:/rtools45/x86_64-w64-mingw32
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7d9a): undefined reference to `__imp__ZN5arrow7compute7Grouper4MakeERKSt6vectorINS_10TypeHolderESaIS3_EEPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7f16): undefined reference to `__imp__ZN5arrow7compute7Grouper13MakeGroupingsERKNS_12NumericArrayINS_10UInt32TypeEEEjPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1f2e): undefined reference to `__imp__ZN5arrow4util15TempVectorStack5allocEjPPhPi'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1fb5): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x20b5): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x2256): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c05): undefined reference to `__imp__ZN5arrow4util15TempVectorStack4InitEPNS_10MemoryPoolEx'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c6f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero12HashJoinNodeD1Ev[_ZN5arrow5acero12HashJoinNodeD1Ev]+0x2f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE[_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE]+0x64f): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'

Still other improvements to be done but I wanted to have a clean CI PR to move to the cleaning and improvement stage.

@kou

kou commented May 1, 2025

Copy link
Copy Markdown
Member

Acero and Dataset static libraries weren't built with -DARROW_COMPUTE_STATIC:

https://github.com/apache/arrow/actions/runs/14751558013/job/41410004318?pr=46261#step:7:14525

 [ 92%] Building CXX object src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj
cd /D/a/arrow/arrow/src/build-x86_64-cpp/src/arrow/acero && /C/rtools40/ucrt64/bin/ccache.exe /C/rtools40/ucrt64/bin/c++.exe -DARROW_ACERO_EXPORTING -DARROW_ACERO_STATIC -DARROW_FLIGHT_SQL_STATIC -DARROW_FLIGHT_STATIC -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC -DARROW_WITH_TIMING_TESTS -DBOOST_ALL_NO_LIB -DUTF8PROC_STATIC -D_CRT_SECURE_NO_WARNINGS @CMakeFiles/arrow_acero_static.dir/includes_CXX.rsp -Wno-noexcept-type -DCURL_STATICLIB -fdiagnostics-color=always -Wa,-mbig-obj -Wall -fno-semantic-interposition -mxsave -msse4.2 -DUTF8PROC_STATIC -O3 -DNDEBUG -O2 -ftree-vectorize -std=c++17 -MD -MT src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -MF CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj.d -o CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -c /D/a/arrow/arrow/cpp/src/arrow/acero/groupby_aggregate_node.cc

Could you add the following

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_compute_staticPUBLICARROW_COMPUTE_STATIC)
endif()

like we did for Flight?

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_flight_staticPUBLICARROW_FLIGHT_STATIC)
endif()

Comment threadc_glib/arrow-glib/compute.cpp Outdated
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels May 1, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels May 2, 2025
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels May 5, 2025
@amoebaamoeba mentioned this pull request Jun 6, 2025
* Revert manual edit of arrowExports.cpp
* Re-do R initialization change
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 9001ec2

Submitted crossbow builds: ursacomputing/crossbow @ actions-74be4cb1e9

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-alpine-linux-cppGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-conda-cppGitHub Actions
test-conda-cpp-valgrindGitHub Actions
test-cuda-cpp-ubuntu-22.04-cuda-11.7.1GitHub Actions
test-debian-12-cpp-amd64GitHub Actions
test-debian-12-cpp-i386GitHub Actions
test-fedora-39-cppGitHub Actions
test-ubuntu-22.04-cppGitHub Actions
test-ubuntu-22.04-cpp-20GitHub Actions
test-ubuntu-22.04-cpp-bundledGitHub Actions
test-ubuntu-22.04-cpp-emscriptenGitHub Actions
test-ubuntu-22.04-cpp-no-threadingGitHub Actions
test-ubuntu-24.04-cppGitHub Actions
test-ubuntu-24.04-cpp-bundled-offlineGitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundledGitHub Actions
test-ubuntu-24.04-cpp-gcc-14GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formatsGitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizerGitHub Actions

Comment threadcpp/src/arrow/c/bridge_test.cc
Comment threadcpp/src/arrow/compute/initialize.h
Comment threadr/data-raw/codegen.R Outdated

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, I posted two small suggestions.

amoebaand others added 2 commits June 9, 2025 08:49
Co-authored-by: Rossi Sun <zanmato1984@gmail.com>

@zanmato1984zanmato1984 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1.

Excellent work @raulcd !

rok
rok approved these changes Jun 10, 2025

@rokrok left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was only able to do a quick pass. Looks great, love the ARROW_COMPUTE_EXPORT macro.

@jonkeanejonkeane left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all of this, it's been a long journey!

Comment threadr/src/compute.cpp Outdated
@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone for taking the time to review. If no more concerns are raised, it has already been approved by 4 committers, I plan to merge in a couple days.

@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone, I am merging!

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 0 benchmarking runs that have been run so far on merge-commit 6a5db61.

None of the specified runs were found on the Conbench server.

The full Conbench report has more details.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@raulcd@kou@zanmato1984@assignUser@pitrou@amoeba@rok@jonkeane@bkietz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

GH-25025: [C++] Move non core compute kernels into separate shared library - #46261

Merged
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2
Jun 13, 2025
Merged

GH-25025: [C++] Move non core compute kernels into separate shared library#46261
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2

Conversation

@raulcd

@raulcdraulcd commented Apr 29, 2025

Copy link
Copy Markdown
Member

Rationale for this change

Arrow is quite a heavy dependency and some users don't need all the tools we provide bundled with libarrow. Moving Arrow Compute to its own shared library allows users installations that better suit their needs having smaller memory footprint if necessary.
It might also help some users adding new kernels into an existing Arrow without recompiling it.

What changes are included in this PR?

  • Move all the Arrow Compute kernel functions to a new ArrowCompute shared library (libarrow_compute.so).
  • Create a new API to Initialize arrow compute registering the existing Kernels into the FunctionRegistry
  • Update Python/R/CGLib bindings to automatically register the Compute kernels transparently to the user.
  • Update Linux Packaging to provide the new arrow-compute library.
  • Update documentation with new requirements to call arrow::compute::Initialize()

Are these changes tested?

Yes on all CI jobs.

Are there any user-facing changes?

Yes. The Arrow compute functions will be provided as a different library. Any user using Arrow Compute from C++ directly will require a call to arrow::compute::Initialize() in order for the functions and kernels to be registered

This PR includes breaking changes to public APIs.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

This comment was marked as outdated.

@raulcd
raulcdforce-pushed the GH-25025-2 branch 2 times, most recently from e8fc17f to f21df32CompareApril 30, 2025 08:10
@raulcd

Copy link
Copy Markdown
MemberAuthor

It seems I am down to one job failure to the Windows R release job (CGLib Ruby is failing due to an existing issue):
I am unsure why I am getting missing symbols on dataset and acero when building statically. I've tried several things, around our *.pc.in and configure.win files to try and fix linking to the new arrow_compute but I am unsure where the problem is exactly coming.
@kou@nealrichardson@assignUser any idea if what can I try?

$ g++ -shared -s -static-libgcc -o arrow.dll tmp.def RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o config.o csv.o dataset.o datatype.o expression.o extension-impl.o feather.o field.o filesystem.o io.o json.o memorypool.o message.o parquet.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o safe-call-into-r-impl.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-20.0.0.9000/lib-14.2.0/x64 -L../windows/arrow-20.0.0.9000/lib/x64-ucrt -larrow_dataset -larrow_acero -lparquet -larrow_compute -larrow -larrow_bundled_dependencies -lutf8proc -lsnappy -lz -lzstd -llz4 -lbz2 -lbrotlienc -lbrotlidec -lbrotlicommon -lole32 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -luserenv -lversion -lws2_32 -lbcrypt -lwininet -lwinhttp -lsecur32 -lshlwapi -lncrypt -lcurl -lnormaliz -lssh2 -lgdi32 -lssl -lcrypto -lcrypt32 -lwldap32 -lz -lws2_32 -lnghttp2 -ldbghelp -LC:/rtools45/x86_64-w64-mingw32
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7d9a): undefined reference to `__imp__ZN5arrow7compute7Grouper4MakeERKSt6vectorINS_10TypeHolderESaIS3_EEPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7f16): undefined reference to `__imp__ZN5arrow7compute7Grouper13MakeGroupingsERKNS_12NumericArrayINS_10UInt32TypeEEEjPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1f2e): undefined reference to `__imp__ZN5arrow4util15TempVectorStack5allocEjPPhPi'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1fb5): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x20b5): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x2256): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c05): undefined reference to `__imp__ZN5arrow4util15TempVectorStack4InitEPNS_10MemoryPoolEx'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c6f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero12HashJoinNodeD1Ev[_ZN5arrow5acero12HashJoinNodeD1Ev]+0x2f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE[_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE]+0x64f): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'

Still other improvements to be done but I wanted to have a clean CI PR to move to the cleaning and improvement stage.

@kou

kou commented May 1, 2025

Copy link
Copy Markdown
Member

Acero and Dataset static libraries weren't built with -DARROW_COMPUTE_STATIC:

https://github.com/apache/arrow/actions/runs/14751558013/job/41410004318?pr=46261#step:7:14525

 [ 92%] Building CXX object src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj
cd /D/a/arrow/arrow/src/build-x86_64-cpp/src/arrow/acero && /C/rtools40/ucrt64/bin/ccache.exe /C/rtools40/ucrt64/bin/c++.exe -DARROW_ACERO_EXPORTING -DARROW_ACERO_STATIC -DARROW_FLIGHT_SQL_STATIC -DARROW_FLIGHT_STATIC -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC -DARROW_WITH_TIMING_TESTS -DBOOST_ALL_NO_LIB -DUTF8PROC_STATIC -D_CRT_SECURE_NO_WARNINGS @CMakeFiles/arrow_acero_static.dir/includes_CXX.rsp -Wno-noexcept-type -DCURL_STATICLIB -fdiagnostics-color=always -Wa,-mbig-obj -Wall -fno-semantic-interposition -mxsave -msse4.2 -DUTF8PROC_STATIC -O3 -DNDEBUG -O2 -ftree-vectorize -std=c++17 -MD -MT src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -MF CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj.d -o CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -c /D/a/arrow/arrow/cpp/src/arrow/acero/groupby_aggregate_node.cc

Could you add the following

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_compute_staticPUBLICARROW_COMPUTE_STATIC)
endif()

like we did for Flight?

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_flight_staticPUBLICARROW_FLIGHT_STATIC)
endif()

Comment threadc_glib/arrow-glib/compute.cpp Outdated
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels May 1, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels May 2, 2025
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels May 5, 2025
@amoebaamoeba mentioned this pull request Jun 6, 2025
* Revert manual edit of arrowExports.cpp
* Re-do R initialization change
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 9001ec2

Submitted crossbow builds: ursacomputing/crossbow @ actions-74be4cb1e9

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-alpine-linux-cppGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-conda-cppGitHub Actions
test-conda-cpp-valgrindGitHub Actions
test-cuda-cpp-ubuntu-22.04-cuda-11.7.1GitHub Actions
test-debian-12-cpp-amd64GitHub Actions
test-debian-12-cpp-i386GitHub Actions
test-fedora-39-cppGitHub Actions
test-ubuntu-22.04-cppGitHub Actions
test-ubuntu-22.04-cpp-20GitHub Actions
test-ubuntu-22.04-cpp-bundledGitHub Actions
test-ubuntu-22.04-cpp-emscriptenGitHub Actions
test-ubuntu-22.04-cpp-no-threadingGitHub Actions
test-ubuntu-24.04-cppGitHub Actions
test-ubuntu-24.04-cpp-bundled-offlineGitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundledGitHub Actions
test-ubuntu-24.04-cpp-gcc-14GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formatsGitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizerGitHub Actions

Comment threadcpp/src/arrow/c/bridge_test.cc
Comment threadcpp/src/arrow/compute/initialize.h
Comment threadr/data-raw/codegen.R Outdated

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, I posted two small suggestions.

amoebaand others added 2 commits June 9, 2025 08:49
Co-authored-by: Rossi Sun <zanmato1984@gmail.com>

@zanmato1984zanmato1984 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1.

Excellent work @raulcd !

rok
rok approved these changes Jun 10, 2025

@rokrok left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was only able to do a quick pass. Looks great, love the ARROW_COMPUTE_EXPORT macro.

@jonkeanejonkeane left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all of this, it's been a long journey!

Comment threadr/src/compute.cpp Outdated
@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone for taking the time to review. If no more concerns are raised, it has already been approved by 4 committers, I plan to merge in a couple days.

@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone, I am merging!

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 0 benchmarking runs that have been run so far on merge-commit 6a5db61.

None of the specified runs were found on the Conbench server.

The full Conbench report has more details.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@raulcd@kou@zanmato1984@assignUser@pitrou@amoeba@rok@jonkeane@bkietz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-25025: [C++] Move non core compute kernels into separate shared library - #46261

Merged
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2
Jun 13, 2025
Merged

GH-25025: [C++] Move non core compute kernels into separate shared library#46261
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2

Conversation

@raulcd

@raulcdraulcd commented Apr 29, 2025

Copy link
Copy Markdown
Member

Rationale for this change

Arrow is quite a heavy dependency and some users don't need all the tools we provide bundled with libarrow. Moving Arrow Compute to its own shared library allows users installations that better suit their needs having smaller memory footprint if necessary.
It might also help some users adding new kernels into an existing Arrow without recompiling it.

What changes are included in this PR?

  • Move all the Arrow Compute kernel functions to a new ArrowCompute shared library (libarrow_compute.so).
  • Create a new API to Initialize arrow compute registering the existing Kernels into the FunctionRegistry
  • Update Python/R/CGLib bindings to automatically register the Compute kernels transparently to the user.
  • Update Linux Packaging to provide the new arrow-compute library.
  • Update documentation with new requirements to call arrow::compute::Initialize()

Are these changes tested?

Yes on all CI jobs.

Are there any user-facing changes?

Yes. The Arrow compute functions will be provided as a different library. Any user using Arrow Compute from C++ directly will require a call to arrow::compute::Initialize() in order for the functions and kernels to be registered

This PR includes breaking changes to public APIs.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

This comment was marked as outdated.

@raulcd
raulcdforce-pushed the GH-25025-2 branch 2 times, most recently from e8fc17f to f21df32CompareApril 30, 2025 08:10
@raulcd

Copy link
Copy Markdown
MemberAuthor

It seems I am down to one job failure to the Windows R release job (CGLib Ruby is failing due to an existing issue):
I am unsure why I am getting missing symbols on dataset and acero when building statically. I've tried several things, around our *.pc.in and configure.win files to try and fix linking to the new arrow_compute but I am unsure where the problem is exactly coming.
@kou@nealrichardson@assignUser any idea if what can I try?

$ g++ -shared -s -static-libgcc -o arrow.dll tmp.def RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o config.o csv.o dataset.o datatype.o expression.o extension-impl.o feather.o field.o filesystem.o io.o json.o memorypool.o message.o parquet.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o safe-call-into-r-impl.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-20.0.0.9000/lib-14.2.0/x64 -L../windows/arrow-20.0.0.9000/lib/x64-ucrt -larrow_dataset -larrow_acero -lparquet -larrow_compute -larrow -larrow_bundled_dependencies -lutf8proc -lsnappy -lz -lzstd -llz4 -lbz2 -lbrotlienc -lbrotlidec -lbrotlicommon -lole32 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -luserenv -lversion -lws2_32 -lbcrypt -lwininet -lwinhttp -lsecur32 -lshlwapi -lncrypt -lcurl -lnormaliz -lssh2 -lgdi32 -lssl -lcrypto -lcrypt32 -lwldap32 -lz -lws2_32 -lnghttp2 -ldbghelp -LC:/rtools45/x86_64-w64-mingw32
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7d9a): undefined reference to `__imp__ZN5arrow7compute7Grouper4MakeERKSt6vectorINS_10TypeHolderESaIS3_EEPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7f16): undefined reference to `__imp__ZN5arrow7compute7Grouper13MakeGroupingsERKNS_12NumericArrayINS_10UInt32TypeEEEjPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1f2e): undefined reference to `__imp__ZN5arrow4util15TempVectorStack5allocEjPPhPi'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1fb5): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x20b5): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x2256): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c05): undefined reference to `__imp__ZN5arrow4util15TempVectorStack4InitEPNS_10MemoryPoolEx'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c6f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero12HashJoinNodeD1Ev[_ZN5arrow5acero12HashJoinNodeD1Ev]+0x2f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE[_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE]+0x64f): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'

Still other improvements to be done but I wanted to have a clean CI PR to move to the cleaning and improvement stage.

@kou

kou commented May 1, 2025

Copy link
Copy Markdown
Member

Acero and Dataset static libraries weren't built with -DARROW_COMPUTE_STATIC:

https://github.com/apache/arrow/actions/runs/14751558013/job/41410004318?pr=46261#step:7:14525

 [ 92%] Building CXX object src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj
cd /D/a/arrow/arrow/src/build-x86_64-cpp/src/arrow/acero && /C/rtools40/ucrt64/bin/ccache.exe /C/rtools40/ucrt64/bin/c++.exe -DARROW_ACERO_EXPORTING -DARROW_ACERO_STATIC -DARROW_FLIGHT_SQL_STATIC -DARROW_FLIGHT_STATIC -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC -DARROW_WITH_TIMING_TESTS -DBOOST_ALL_NO_LIB -DUTF8PROC_STATIC -D_CRT_SECURE_NO_WARNINGS @CMakeFiles/arrow_acero_static.dir/includes_CXX.rsp -Wno-noexcept-type -DCURL_STATICLIB -fdiagnostics-color=always -Wa,-mbig-obj -Wall -fno-semantic-interposition -mxsave -msse4.2 -DUTF8PROC_STATIC -O3 -DNDEBUG -O2 -ftree-vectorize -std=c++17 -MD -MT src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -MF CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj.d -o CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -c /D/a/arrow/arrow/cpp/src/arrow/acero/groupby_aggregate_node.cc

Could you add the following

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_compute_staticPUBLICARROW_COMPUTE_STATIC)
endif()

like we did for Flight?

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_flight_staticPUBLICARROW_FLIGHT_STATIC)
endif()

Comment threadc_glib/arrow-glib/compute.cpp Outdated
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels May 1, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels May 2, 2025
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels May 5, 2025
@amoebaamoeba mentioned this pull request Jun 6, 2025
* Revert manual edit of arrowExports.cpp
* Re-do R initialization change
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 9001ec2

Submitted crossbow builds: ursacomputing/crossbow @ actions-74be4cb1e9

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-alpine-linux-cppGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-conda-cppGitHub Actions
test-conda-cpp-valgrindGitHub Actions
test-cuda-cpp-ubuntu-22.04-cuda-11.7.1GitHub Actions
test-debian-12-cpp-amd64GitHub Actions
test-debian-12-cpp-i386GitHub Actions
test-fedora-39-cppGitHub Actions
test-ubuntu-22.04-cppGitHub Actions
test-ubuntu-22.04-cpp-20GitHub Actions
test-ubuntu-22.04-cpp-bundledGitHub Actions
test-ubuntu-22.04-cpp-emscriptenGitHub Actions
test-ubuntu-22.04-cpp-no-threadingGitHub Actions
test-ubuntu-24.04-cppGitHub Actions
test-ubuntu-24.04-cpp-bundled-offlineGitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundledGitHub Actions
test-ubuntu-24.04-cpp-gcc-14GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formatsGitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizerGitHub Actions

Comment threadcpp/src/arrow/c/bridge_test.cc
Comment threadcpp/src/arrow/compute/initialize.h
Comment threadr/data-raw/codegen.R Outdated

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, I posted two small suggestions.

amoebaand others added 2 commits June 9, 2025 08:49
Co-authored-by: Rossi Sun <zanmato1984@gmail.com>

@zanmato1984zanmato1984 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1.

Excellent work @raulcd !

rok
rok approved these changes Jun 10, 2025

@rokrok left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was only able to do a quick pass. Looks great, love the ARROW_COMPUTE_EXPORT macro.

@jonkeanejonkeane left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all of this, it's been a long journey!

Comment threadr/src/compute.cpp Outdated
@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone for taking the time to review. If no more concerns are raised, it has already been approved by 4 committers, I plan to merge in a couple days.

@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone, I am merging!

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 0 benchmarking runs that have been run so far on merge-commit 6a5db61.

None of the specified runs were found on the Conbench server.

The full Conbench report has more details.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@raulcd@kou@zanmato1984@assignUser@pitrou@amoeba@rok@jonkeane@bkietz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-25025: [C++] Move non core compute kernels into separate shared library - #46261

Merged
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2
Jun 13, 2025
Merged

GH-25025: [C++] Move non core compute kernels into separate shared library#46261
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2

Conversation

@raulcd

@raulcdraulcd commented Apr 29, 2025

Copy link
Copy Markdown
Member

Rationale for this change

Arrow is quite a heavy dependency and some users don't need all the tools we provide bundled with libarrow. Moving Arrow Compute to its own shared library allows users installations that better suit their needs having smaller memory footprint if necessary.
It might also help some users adding new kernels into an existing Arrow without recompiling it.

What changes are included in this PR?

  • Move all the Arrow Compute kernel functions to a new ArrowCompute shared library (libarrow_compute.so).
  • Create a new API to Initialize arrow compute registering the existing Kernels into the FunctionRegistry
  • Update Python/R/CGLib bindings to automatically register the Compute kernels transparently to the user.
  • Update Linux Packaging to provide the new arrow-compute library.
  • Update documentation with new requirements to call arrow::compute::Initialize()

Are these changes tested?

Yes on all CI jobs.

Are there any user-facing changes?

Yes. The Arrow compute functions will be provided as a different library. Any user using Arrow Compute from C++ directly will require a call to arrow::compute::Initialize() in order for the functions and kernels to be registered

This PR includes breaking changes to public APIs.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

This comment was marked as outdated.

@raulcd
raulcdforce-pushed the GH-25025-2 branch 2 times, most recently from e8fc17f to f21df32CompareApril 30, 2025 08:10
@raulcd

Copy link
Copy Markdown
MemberAuthor

It seems I am down to one job failure to the Windows R release job (CGLib Ruby is failing due to an existing issue):
I am unsure why I am getting missing symbols on dataset and acero when building statically. I've tried several things, around our *.pc.in and configure.win files to try and fix linking to the new arrow_compute but I am unsure where the problem is exactly coming.
@kou@nealrichardson@assignUser any idea if what can I try?

$ g++ -shared -s -static-libgcc -o arrow.dll tmp.def RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o config.o csv.o dataset.o datatype.o expression.o extension-impl.o feather.o field.o filesystem.o io.o json.o memorypool.o message.o parquet.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o safe-call-into-r-impl.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-20.0.0.9000/lib-14.2.0/x64 -L../windows/arrow-20.0.0.9000/lib/x64-ucrt -larrow_dataset -larrow_acero -lparquet -larrow_compute -larrow -larrow_bundled_dependencies -lutf8proc -lsnappy -lz -lzstd -llz4 -lbz2 -lbrotlienc -lbrotlidec -lbrotlicommon -lole32 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -luserenv -lversion -lws2_32 -lbcrypt -lwininet -lwinhttp -lsecur32 -lshlwapi -lncrypt -lcurl -lnormaliz -lssh2 -lgdi32 -lssl -lcrypto -lcrypt32 -lwldap32 -lz -lws2_32 -lnghttp2 -ldbghelp -LC:/rtools45/x86_64-w64-mingw32
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7d9a): undefined reference to `__imp__ZN5arrow7compute7Grouper4MakeERKSt6vectorINS_10TypeHolderESaIS3_EEPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7f16): undefined reference to `__imp__ZN5arrow7compute7Grouper13MakeGroupingsERKNS_12NumericArrayINS_10UInt32TypeEEEjPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1f2e): undefined reference to `__imp__ZN5arrow4util15TempVectorStack5allocEjPPhPi'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1fb5): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x20b5): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x2256): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c05): undefined reference to `__imp__ZN5arrow4util15TempVectorStack4InitEPNS_10MemoryPoolEx'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c6f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero12HashJoinNodeD1Ev[_ZN5arrow5acero12HashJoinNodeD1Ev]+0x2f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE[_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE]+0x64f): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'

Still other improvements to be done but I wanted to have a clean CI PR to move to the cleaning and improvement stage.

@kou

kou commented May 1, 2025

Copy link
Copy Markdown
Member

Acero and Dataset static libraries weren't built with -DARROW_COMPUTE_STATIC:

https://github.com/apache/arrow/actions/runs/14751558013/job/41410004318?pr=46261#step:7:14525

 [ 92%] Building CXX object src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj
cd /D/a/arrow/arrow/src/build-x86_64-cpp/src/arrow/acero && /C/rtools40/ucrt64/bin/ccache.exe /C/rtools40/ucrt64/bin/c++.exe -DARROW_ACERO_EXPORTING -DARROW_ACERO_STATIC -DARROW_FLIGHT_SQL_STATIC -DARROW_FLIGHT_STATIC -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC -DARROW_WITH_TIMING_TESTS -DBOOST_ALL_NO_LIB -DUTF8PROC_STATIC -D_CRT_SECURE_NO_WARNINGS @CMakeFiles/arrow_acero_static.dir/includes_CXX.rsp -Wno-noexcept-type -DCURL_STATICLIB -fdiagnostics-color=always -Wa,-mbig-obj -Wall -fno-semantic-interposition -mxsave -msse4.2 -DUTF8PROC_STATIC -O3 -DNDEBUG -O2 -ftree-vectorize -std=c++17 -MD -MT src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -MF CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj.d -o CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -c /D/a/arrow/arrow/cpp/src/arrow/acero/groupby_aggregate_node.cc

Could you add the following

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_compute_staticPUBLICARROW_COMPUTE_STATIC)
endif()

like we did for Flight?

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_flight_staticPUBLICARROW_FLIGHT_STATIC)
endif()

Comment threadc_glib/arrow-glib/compute.cpp Outdated
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels May 1, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels May 2, 2025
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels May 5, 2025
@amoebaamoeba mentioned this pull request Jun 6, 2025
* Revert manual edit of arrowExports.cpp
* Re-do R initialization change
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 9001ec2

Submitted crossbow builds: ursacomputing/crossbow @ actions-74be4cb1e9

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-alpine-linux-cppGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-conda-cppGitHub Actions
test-conda-cpp-valgrindGitHub Actions
test-cuda-cpp-ubuntu-22.04-cuda-11.7.1GitHub Actions
test-debian-12-cpp-amd64GitHub Actions
test-debian-12-cpp-i386GitHub Actions
test-fedora-39-cppGitHub Actions
test-ubuntu-22.04-cppGitHub Actions
test-ubuntu-22.04-cpp-20GitHub Actions
test-ubuntu-22.04-cpp-bundledGitHub Actions
test-ubuntu-22.04-cpp-emscriptenGitHub Actions
test-ubuntu-22.04-cpp-no-threadingGitHub Actions
test-ubuntu-24.04-cppGitHub Actions
test-ubuntu-24.04-cpp-bundled-offlineGitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundledGitHub Actions
test-ubuntu-24.04-cpp-gcc-14GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formatsGitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizerGitHub Actions

Comment threadcpp/src/arrow/c/bridge_test.cc
Comment threadcpp/src/arrow/compute/initialize.h
Comment threadr/data-raw/codegen.R Outdated

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, I posted two small suggestions.

amoebaand others added 2 commits June 9, 2025 08:49
Co-authored-by: Rossi Sun <zanmato1984@gmail.com>

@zanmato1984zanmato1984 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1.

Excellent work @raulcd !

rok
rok approved these changes Jun 10, 2025

@rokrok left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was only able to do a quick pass. Looks great, love the ARROW_COMPUTE_EXPORT macro.

@jonkeanejonkeane left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all of this, it's been a long journey!

Comment threadr/src/compute.cpp Outdated
@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone for taking the time to review. If no more concerns are raised, it has already been approved by 4 committers, I plan to merge in a couple days.

@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone, I am merging!

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 0 benchmarking runs that have been run so far on merge-commit 6a5db61.

None of the specified runs were found on the Conbench server.

The full Conbench report has more details.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@raulcd@kou@zanmato1984@assignUser@pitrou@amoeba@rok@jonkeane@bkietz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

GH-25025: [C++] Move non core compute kernels into separate shared library - #46261

Merged
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2
Jun 13, 2025
Merged

GH-25025: [C++] Move non core compute kernels into separate shared library#46261
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2

Conversation

@raulcd

@raulcdraulcd commented Apr 29, 2025

Copy link
Copy Markdown
Member

Rationale for this change

Arrow is quite a heavy dependency and some users don't need all the tools we provide bundled with libarrow. Moving Arrow Compute to its own shared library allows users installations that better suit their needs having smaller memory footprint if necessary.
It might also help some users adding new kernels into an existing Arrow without recompiling it.

What changes are included in this PR?

  • Move all the Arrow Compute kernel functions to a new ArrowCompute shared library (libarrow_compute.so).
  • Create a new API to Initialize arrow compute registering the existing Kernels into the FunctionRegistry
  • Update Python/R/CGLib bindings to automatically register the Compute kernels transparently to the user.
  • Update Linux Packaging to provide the new arrow-compute library.
  • Update documentation with new requirements to call arrow::compute::Initialize()

Are these changes tested?

Yes on all CI jobs.

Are there any user-facing changes?

Yes. The Arrow compute functions will be provided as a different library. Any user using Arrow Compute from C++ directly will require a call to arrow::compute::Initialize() in order for the functions and kernels to be registered

This PR includes breaking changes to public APIs.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

This comment was marked as outdated.

@raulcd
raulcdforce-pushed the GH-25025-2 branch 2 times, most recently from e8fc17f to f21df32CompareApril 30, 2025 08:10
@raulcd

Copy link
Copy Markdown
MemberAuthor

It seems I am down to one job failure to the Windows R release job (CGLib Ruby is failing due to an existing issue):
I am unsure why I am getting missing symbols on dataset and acero when building statically. I've tried several things, around our *.pc.in and configure.win files to try and fix linking to the new arrow_compute but I am unsure where the problem is exactly coming.
@kou@nealrichardson@assignUser any idea if what can I try?

$ g++ -shared -s -static-libgcc -o arrow.dll tmp.def RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o config.o csv.o dataset.o datatype.o expression.o extension-impl.o feather.o field.o filesystem.o io.o json.o memorypool.o message.o parquet.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o safe-call-into-r-impl.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-20.0.0.9000/lib-14.2.0/x64 -L../windows/arrow-20.0.0.9000/lib/x64-ucrt -larrow_dataset -larrow_acero -lparquet -larrow_compute -larrow -larrow_bundled_dependencies -lutf8proc -lsnappy -lz -lzstd -llz4 -lbz2 -lbrotlienc -lbrotlidec -lbrotlicommon -lole32 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -luserenv -lversion -lws2_32 -lbcrypt -lwininet -lwinhttp -lsecur32 -lshlwapi -lncrypt -lcurl -lnormaliz -lssh2 -lgdi32 -lssl -lcrypto -lcrypt32 -lwldap32 -lz -lws2_32 -lnghttp2 -ldbghelp -LC:/rtools45/x86_64-w64-mingw32
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7d9a): undefined reference to `__imp__ZN5arrow7compute7Grouper4MakeERKSt6vectorINS_10TypeHolderESaIS3_EEPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7f16): undefined reference to `__imp__ZN5arrow7compute7Grouper13MakeGroupingsERKNS_12NumericArrayINS_10UInt32TypeEEEjPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1f2e): undefined reference to `__imp__ZN5arrow4util15TempVectorStack5allocEjPPhPi'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1fb5): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x20b5): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x2256): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c05): undefined reference to `__imp__ZN5arrow4util15TempVectorStack4InitEPNS_10MemoryPoolEx'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c6f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero12HashJoinNodeD1Ev[_ZN5arrow5acero12HashJoinNodeD1Ev]+0x2f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE[_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE]+0x64f): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'

Still other improvements to be done but I wanted to have a clean CI PR to move to the cleaning and improvement stage.

@kou

kou commented May 1, 2025

Copy link
Copy Markdown
Member

Acero and Dataset static libraries weren't built with -DARROW_COMPUTE_STATIC:

https://github.com/apache/arrow/actions/runs/14751558013/job/41410004318?pr=46261#step:7:14525

 [ 92%] Building CXX object src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj
cd /D/a/arrow/arrow/src/build-x86_64-cpp/src/arrow/acero && /C/rtools40/ucrt64/bin/ccache.exe /C/rtools40/ucrt64/bin/c++.exe -DARROW_ACERO_EXPORTING -DARROW_ACERO_STATIC -DARROW_FLIGHT_SQL_STATIC -DARROW_FLIGHT_STATIC -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC -DARROW_WITH_TIMING_TESTS -DBOOST_ALL_NO_LIB -DUTF8PROC_STATIC -D_CRT_SECURE_NO_WARNINGS @CMakeFiles/arrow_acero_static.dir/includes_CXX.rsp -Wno-noexcept-type -DCURL_STATICLIB -fdiagnostics-color=always -Wa,-mbig-obj -Wall -fno-semantic-interposition -mxsave -msse4.2 -DUTF8PROC_STATIC -O3 -DNDEBUG -O2 -ftree-vectorize -std=c++17 -MD -MT src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -MF CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj.d -o CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -c /D/a/arrow/arrow/cpp/src/arrow/acero/groupby_aggregate_node.cc

Could you add the following

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_compute_staticPUBLICARROW_COMPUTE_STATIC)
endif()

like we did for Flight?

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_flight_staticPUBLICARROW_FLIGHT_STATIC)
endif()

Comment threadc_glib/arrow-glib/compute.cpp Outdated
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels May 1, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels May 2, 2025
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels May 5, 2025
@amoebaamoeba mentioned this pull request Jun 6, 2025
* Revert manual edit of arrowExports.cpp
* Re-do R initialization change
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 9001ec2

Submitted crossbow builds: ursacomputing/crossbow @ actions-74be4cb1e9

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-alpine-linux-cppGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-conda-cppGitHub Actions
test-conda-cpp-valgrindGitHub Actions
test-cuda-cpp-ubuntu-22.04-cuda-11.7.1GitHub Actions
test-debian-12-cpp-amd64GitHub Actions
test-debian-12-cpp-i386GitHub Actions
test-fedora-39-cppGitHub Actions
test-ubuntu-22.04-cppGitHub Actions
test-ubuntu-22.04-cpp-20GitHub Actions
test-ubuntu-22.04-cpp-bundledGitHub Actions
test-ubuntu-22.04-cpp-emscriptenGitHub Actions
test-ubuntu-22.04-cpp-no-threadingGitHub Actions
test-ubuntu-24.04-cppGitHub Actions
test-ubuntu-24.04-cpp-bundled-offlineGitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundledGitHub Actions
test-ubuntu-24.04-cpp-gcc-14GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formatsGitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizerGitHub Actions

Comment threadcpp/src/arrow/c/bridge_test.cc
Comment threadcpp/src/arrow/compute/initialize.h
Comment threadr/data-raw/codegen.R Outdated

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, I posted two small suggestions.

amoebaand others added 2 commits June 9, 2025 08:49
Co-authored-by: Rossi Sun <zanmato1984@gmail.com>

@zanmato1984zanmato1984 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1.

Excellent work @raulcd !

rok
rok approved these changes Jun 10, 2025

@rokrok left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was only able to do a quick pass. Looks great, love the ARROW_COMPUTE_EXPORT macro.

@jonkeanejonkeane left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all of this, it's been a long journey!

Comment threadr/src/compute.cpp Outdated
@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone for taking the time to review. If no more concerns are raised, it has already been approved by 4 committers, I plan to merge in a couple days.

@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone, I am merging!

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 0 benchmarking runs that have been run so far on merge-commit 6a5db61.

None of the specified runs were found on the Conbench server.

The full Conbench report has more details.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@raulcd@kou@zanmato1984@assignUser@pitrou@amoeba@rok@jonkeane@bkietz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-25025: [C++] Move non core compute kernels into separate shared library - #46261

Merged
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2
Jun 13, 2025
Merged

GH-25025: [C++] Move non core compute kernels into separate shared library#46261
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2

Conversation

@raulcd

@raulcdraulcd commented Apr 29, 2025

Copy link
Copy Markdown
Member

Rationale for this change

Arrow is quite a heavy dependency and some users don't need all the tools we provide bundled with libarrow. Moving Arrow Compute to its own shared library allows users installations that better suit their needs having smaller memory footprint if necessary.
It might also help some users adding new kernels into an existing Arrow without recompiling it.

What changes are included in this PR?

  • Move all the Arrow Compute kernel functions to a new ArrowCompute shared library (libarrow_compute.so).
  • Create a new API to Initialize arrow compute registering the existing Kernels into the FunctionRegistry
  • Update Python/R/CGLib bindings to automatically register the Compute kernels transparently to the user.
  • Update Linux Packaging to provide the new arrow-compute library.
  • Update documentation with new requirements to call arrow::compute::Initialize()

Are these changes tested?

Yes on all CI jobs.

Are there any user-facing changes?

Yes. The Arrow compute functions will be provided as a different library. Any user using Arrow Compute from C++ directly will require a call to arrow::compute::Initialize() in order for the functions and kernels to be registered

This PR includes breaking changes to public APIs.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

This comment was marked as outdated.

@raulcd
raulcdforce-pushed the GH-25025-2 branch 2 times, most recently from e8fc17f to f21df32CompareApril 30, 2025 08:10
@raulcd

Copy link
Copy Markdown
MemberAuthor

It seems I am down to one job failure to the Windows R release job (CGLib Ruby is failing due to an existing issue):
I am unsure why I am getting missing symbols on dataset and acero when building statically. I've tried several things, around our *.pc.in and configure.win files to try and fix linking to the new arrow_compute but I am unsure where the problem is exactly coming.
@kou@nealrichardson@assignUser any idea if what can I try?

$ g++ -shared -s -static-libgcc -o arrow.dll tmp.def RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o config.o csv.o dataset.o datatype.o expression.o extension-impl.o feather.o field.o filesystem.o io.o json.o memorypool.o message.o parquet.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o safe-call-into-r-impl.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-20.0.0.9000/lib-14.2.0/x64 -L../windows/arrow-20.0.0.9000/lib/x64-ucrt -larrow_dataset -larrow_acero -lparquet -larrow_compute -larrow -larrow_bundled_dependencies -lutf8proc -lsnappy -lz -lzstd -llz4 -lbz2 -lbrotlienc -lbrotlidec -lbrotlicommon -lole32 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -luserenv -lversion -lws2_32 -lbcrypt -lwininet -lwinhttp -lsecur32 -lshlwapi -lncrypt -lcurl -lnormaliz -lssh2 -lgdi32 -lssl -lcrypto -lcrypt32 -lwldap32 -lz -lws2_32 -lnghttp2 -ldbghelp -LC:/rtools45/x86_64-w64-mingw32
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7d9a): undefined reference to `__imp__ZN5arrow7compute7Grouper4MakeERKSt6vectorINS_10TypeHolderESaIS3_EEPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7f16): undefined reference to `__imp__ZN5arrow7compute7Grouper13MakeGroupingsERKNS_12NumericArrayINS_10UInt32TypeEEEjPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1f2e): undefined reference to `__imp__ZN5arrow4util15TempVectorStack5allocEjPPhPi'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1fb5): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x20b5): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x2256): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c05): undefined reference to `__imp__ZN5arrow4util15TempVectorStack4InitEPNS_10MemoryPoolEx'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c6f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero12HashJoinNodeD1Ev[_ZN5arrow5acero12HashJoinNodeD1Ev]+0x2f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE[_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE]+0x64f): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'

Still other improvements to be done but I wanted to have a clean CI PR to move to the cleaning and improvement stage.

@kou

kou commented May 1, 2025

Copy link
Copy Markdown
Member

Acero and Dataset static libraries weren't built with -DARROW_COMPUTE_STATIC:

https://github.com/apache/arrow/actions/runs/14751558013/job/41410004318?pr=46261#step:7:14525

 [ 92%] Building CXX object src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj
cd /D/a/arrow/arrow/src/build-x86_64-cpp/src/arrow/acero && /C/rtools40/ucrt64/bin/ccache.exe /C/rtools40/ucrt64/bin/c++.exe -DARROW_ACERO_EXPORTING -DARROW_ACERO_STATIC -DARROW_FLIGHT_SQL_STATIC -DARROW_FLIGHT_STATIC -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC -DARROW_WITH_TIMING_TESTS -DBOOST_ALL_NO_LIB -DUTF8PROC_STATIC -D_CRT_SECURE_NO_WARNINGS @CMakeFiles/arrow_acero_static.dir/includes_CXX.rsp -Wno-noexcept-type -DCURL_STATICLIB -fdiagnostics-color=always -Wa,-mbig-obj -Wall -fno-semantic-interposition -mxsave -msse4.2 -DUTF8PROC_STATIC -O3 -DNDEBUG -O2 -ftree-vectorize -std=c++17 -MD -MT src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -MF CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj.d -o CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -c /D/a/arrow/arrow/cpp/src/arrow/acero/groupby_aggregate_node.cc

Could you add the following

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_compute_staticPUBLICARROW_COMPUTE_STATIC)
endif()

like we did for Flight?

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_flight_staticPUBLICARROW_FLIGHT_STATIC)
endif()

Comment threadc_glib/arrow-glib/compute.cpp Outdated
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels May 1, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels May 2, 2025
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels May 5, 2025
@amoebaamoeba mentioned this pull request Jun 6, 2025
* Revert manual edit of arrowExports.cpp
* Re-do R initialization change
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 9001ec2

Submitted crossbow builds: ursacomputing/crossbow @ actions-74be4cb1e9

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-alpine-linux-cppGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-conda-cppGitHub Actions
test-conda-cpp-valgrindGitHub Actions
test-cuda-cpp-ubuntu-22.04-cuda-11.7.1GitHub Actions
test-debian-12-cpp-amd64GitHub Actions
test-debian-12-cpp-i386GitHub Actions
test-fedora-39-cppGitHub Actions
test-ubuntu-22.04-cppGitHub Actions
test-ubuntu-22.04-cpp-20GitHub Actions
test-ubuntu-22.04-cpp-bundledGitHub Actions
test-ubuntu-22.04-cpp-emscriptenGitHub Actions
test-ubuntu-22.04-cpp-no-threadingGitHub Actions
test-ubuntu-24.04-cppGitHub Actions
test-ubuntu-24.04-cpp-bundled-offlineGitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundledGitHub Actions
test-ubuntu-24.04-cpp-gcc-14GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formatsGitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizerGitHub Actions

Comment threadcpp/src/arrow/c/bridge_test.cc
Comment threadcpp/src/arrow/compute/initialize.h
Comment threadr/data-raw/codegen.R Outdated

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, I posted two small suggestions.

amoebaand others added 2 commits June 9, 2025 08:49
Co-authored-by: Rossi Sun <zanmato1984@gmail.com>

@zanmato1984zanmato1984 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1.

Excellent work @raulcd !

rok
rok approved these changes Jun 10, 2025

@rokrok left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was only able to do a quick pass. Looks great, love the ARROW_COMPUTE_EXPORT macro.

@jonkeanejonkeane left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all of this, it's been a long journey!

Comment threadr/src/compute.cpp Outdated
@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone for taking the time to review. If no more concerns are raised, it has already been approved by 4 committers, I plan to merge in a couple days.

@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone, I am merging!

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 0 benchmarking runs that have been run so far on merge-commit 6a5db61.

None of the specified runs were found on the Conbench server.

The full Conbench report has more details.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@raulcd@kou@zanmato1984@assignUser@pitrou@amoeba@rok@jonkeane@bkietz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-25025: [C++] Move non core compute kernels into separate shared library - #46261

Merged
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2
Jun 13, 2025
Merged

GH-25025: [C++] Move non core compute kernels into separate shared library#46261
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2

Conversation

@raulcd

@raulcdraulcd commented Apr 29, 2025

Copy link
Copy Markdown
Member

Rationale for this change

Arrow is quite a heavy dependency and some users don't need all the tools we provide bundled with libarrow. Moving Arrow Compute to its own shared library allows users installations that better suit their needs having smaller memory footprint if necessary.
It might also help some users adding new kernels into an existing Arrow without recompiling it.

What changes are included in this PR?

  • Move all the Arrow Compute kernel functions to a new ArrowCompute shared library (libarrow_compute.so).
  • Create a new API to Initialize arrow compute registering the existing Kernels into the FunctionRegistry
  • Update Python/R/CGLib bindings to automatically register the Compute kernels transparently to the user.
  • Update Linux Packaging to provide the new arrow-compute library.
  • Update documentation with new requirements to call arrow::compute::Initialize()

Are these changes tested?

Yes on all CI jobs.

Are there any user-facing changes?

Yes. The Arrow compute functions will be provided as a different library. Any user using Arrow Compute from C++ directly will require a call to arrow::compute::Initialize() in order for the functions and kernels to be registered

This PR includes breaking changes to public APIs.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

This comment was marked as outdated.

@raulcd
raulcdforce-pushed the GH-25025-2 branch 2 times, most recently from e8fc17f to f21df32CompareApril 30, 2025 08:10
@raulcd

Copy link
Copy Markdown
MemberAuthor

It seems I am down to one job failure to the Windows R release job (CGLib Ruby is failing due to an existing issue):
I am unsure why I am getting missing symbols on dataset and acero when building statically. I've tried several things, around our *.pc.in and configure.win files to try and fix linking to the new arrow_compute but I am unsure where the problem is exactly coming.
@kou@nealrichardson@assignUser any idea if what can I try?

$ g++ -shared -s -static-libgcc -o arrow.dll tmp.def RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o config.o csv.o dataset.o datatype.o expression.o extension-impl.o feather.o field.o filesystem.o io.o json.o memorypool.o message.o parquet.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o safe-call-into-r-impl.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-20.0.0.9000/lib-14.2.0/x64 -L../windows/arrow-20.0.0.9000/lib/x64-ucrt -larrow_dataset -larrow_acero -lparquet -larrow_compute -larrow -larrow_bundled_dependencies -lutf8proc -lsnappy -lz -lzstd -llz4 -lbz2 -lbrotlienc -lbrotlidec -lbrotlicommon -lole32 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -luserenv -lversion -lws2_32 -lbcrypt -lwininet -lwinhttp -lsecur32 -lshlwapi -lncrypt -lcurl -lnormaliz -lssh2 -lgdi32 -lssl -lcrypto -lcrypt32 -lwldap32 -lz -lws2_32 -lnghttp2 -ldbghelp -LC:/rtools45/x86_64-w64-mingw32
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7d9a): undefined reference to `__imp__ZN5arrow7compute7Grouper4MakeERKSt6vectorINS_10TypeHolderESaIS3_EEPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7f16): undefined reference to `__imp__ZN5arrow7compute7Grouper13MakeGroupingsERKNS_12NumericArrayINS_10UInt32TypeEEEjPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1f2e): undefined reference to `__imp__ZN5arrow4util15TempVectorStack5allocEjPPhPi'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1fb5): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x20b5): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x2256): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c05): undefined reference to `__imp__ZN5arrow4util15TempVectorStack4InitEPNS_10MemoryPoolEx'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c6f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero12HashJoinNodeD1Ev[_ZN5arrow5acero12HashJoinNodeD1Ev]+0x2f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE[_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE]+0x64f): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'

Still other improvements to be done but I wanted to have a clean CI PR to move to the cleaning and improvement stage.

@kou

kou commented May 1, 2025

Copy link
Copy Markdown
Member

Acero and Dataset static libraries weren't built with -DARROW_COMPUTE_STATIC:

https://github.com/apache/arrow/actions/runs/14751558013/job/41410004318?pr=46261#step:7:14525

 [ 92%] Building CXX object src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj
cd /D/a/arrow/arrow/src/build-x86_64-cpp/src/arrow/acero && /C/rtools40/ucrt64/bin/ccache.exe /C/rtools40/ucrt64/bin/c++.exe -DARROW_ACERO_EXPORTING -DARROW_ACERO_STATIC -DARROW_FLIGHT_SQL_STATIC -DARROW_FLIGHT_STATIC -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC -DARROW_WITH_TIMING_TESTS -DBOOST_ALL_NO_LIB -DUTF8PROC_STATIC -D_CRT_SECURE_NO_WARNINGS @CMakeFiles/arrow_acero_static.dir/includes_CXX.rsp -Wno-noexcept-type -DCURL_STATICLIB -fdiagnostics-color=always -Wa,-mbig-obj -Wall -fno-semantic-interposition -mxsave -msse4.2 -DUTF8PROC_STATIC -O3 -DNDEBUG -O2 -ftree-vectorize -std=c++17 -MD -MT src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -MF CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj.d -o CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -c /D/a/arrow/arrow/cpp/src/arrow/acero/groupby_aggregate_node.cc

Could you add the following

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_compute_staticPUBLICARROW_COMPUTE_STATIC)
endif()

like we did for Flight?

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_flight_staticPUBLICARROW_FLIGHT_STATIC)
endif()

Comment threadc_glib/arrow-glib/compute.cpp Outdated
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels May 1, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels May 2, 2025
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels May 5, 2025
@amoebaamoeba mentioned this pull request Jun 6, 2025
* Revert manual edit of arrowExports.cpp
* Re-do R initialization change
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 9001ec2

Submitted crossbow builds: ursacomputing/crossbow @ actions-74be4cb1e9

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-alpine-linux-cppGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-conda-cppGitHub Actions
test-conda-cpp-valgrindGitHub Actions
test-cuda-cpp-ubuntu-22.04-cuda-11.7.1GitHub Actions
test-debian-12-cpp-amd64GitHub Actions
test-debian-12-cpp-i386GitHub Actions
test-fedora-39-cppGitHub Actions
test-ubuntu-22.04-cppGitHub Actions
test-ubuntu-22.04-cpp-20GitHub Actions
test-ubuntu-22.04-cpp-bundledGitHub Actions
test-ubuntu-22.04-cpp-emscriptenGitHub Actions
test-ubuntu-22.04-cpp-no-threadingGitHub Actions
test-ubuntu-24.04-cppGitHub Actions
test-ubuntu-24.04-cpp-bundled-offlineGitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundledGitHub Actions
test-ubuntu-24.04-cpp-gcc-14GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formatsGitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizerGitHub Actions

Comment threadcpp/src/arrow/c/bridge_test.cc
Comment threadcpp/src/arrow/compute/initialize.h
Comment threadr/data-raw/codegen.R Outdated

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, I posted two small suggestions.

amoebaand others added 2 commits June 9, 2025 08:49
Co-authored-by: Rossi Sun <zanmato1984@gmail.com>

@zanmato1984zanmato1984 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1.

Excellent work @raulcd !

rok
rok approved these changes Jun 10, 2025

@rokrok left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was only able to do a quick pass. Looks great, love the ARROW_COMPUTE_EXPORT macro.

@jonkeanejonkeane left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all of this, it's been a long journey!

Comment threadr/src/compute.cpp Outdated
@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone for taking the time to review. If no more concerns are raised, it has already been approved by 4 committers, I plan to merge in a couple days.

@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone, I am merging!

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 0 benchmarking runs that have been run so far on merge-commit 6a5db61.

None of the specified runs were found on the Conbench server.

The full Conbench report has more details.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@raulcd@kou@zanmato1984@assignUser@pitrou@amoeba@rok@jonkeane@bkietz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

GH-25025: [C++] Move non core compute kernels into separate shared library - #46261

Merged
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2
Jun 13, 2025
Merged

GH-25025: [C++] Move non core compute kernels into separate shared library#46261
raulcd merged 53 commits into
apache:mainfrom
raulcd:GH-25025-2

Conversation

@raulcd

@raulcdraulcd commented Apr 29, 2025

Copy link
Copy Markdown
Member

Rationale for this change

Arrow is quite a heavy dependency and some users don't need all the tools we provide bundled with libarrow. Moving Arrow Compute to its own shared library allows users installations that better suit their needs having smaller memory footprint if necessary.
It might also help some users adding new kernels into an existing Arrow without recompiling it.

What changes are included in this PR?

  • Move all the Arrow Compute kernel functions to a new ArrowCompute shared library (libarrow_compute.so).
  • Create a new API to Initialize arrow compute registering the existing Kernels into the FunctionRegistry
  • Update Python/R/CGLib bindings to automatically register the Compute kernels transparently to the user.
  • Update Linux Packaging to provide the new arrow-compute library.
  • Update documentation with new requirements to call arrow::compute::Initialize()

Are these changes tested?

Yes on all CI jobs.

Are there any user-facing changes?

Yes. The Arrow compute functions will be provided as a different library. Any user using Arrow Compute from C++ directly will require a call to arrow::compute::Initialize() in order for the functions and kernels to be registered

This PR includes breaking changes to public APIs.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

This comment was marked as outdated.

@raulcd
raulcdforce-pushed the GH-25025-2 branch 2 times, most recently from e8fc17f to f21df32CompareApril 30, 2025 08:10
@raulcd

Copy link
Copy Markdown
MemberAuthor

It seems I am down to one job failure to the Windows R release job (CGLib Ruby is failing due to an existing issue):
I am unsure why I am getting missing symbols on dataset and acero when building statically. I've tried several things, around our *.pc.in and configure.win files to try and fix linking to the new arrow_compute but I am unsure where the problem is exactly coming.
@kou@nealrichardson@assignUser any idea if what can I try?

$ g++ -shared -s -static-libgcc -o arrow.dll tmp.def RTasks.o altrep.o array.o array_to_vector.o arraydata.o arrowExports.o bridge.o buffer.o chunkedarray.o compression.o compute-exec.o compute.o config.o csv.o dataset.o datatype.o expression.o extension-impl.o feather.o field.o filesystem.o io.o json.o memorypool.o message.o parquet.o r_to_arrow.o recordbatch.o recordbatchreader.o recordbatchwriter.o safe-call-into-r-impl.o scalar.o schema.o symbols.o table.o threadpool.o type_infer.o -L../windows/arrow-20.0.0.9000/lib-14.2.0/x64 -L../windows/arrow-20.0.0.9000/lib/x64-ucrt -larrow_dataset -larrow_acero -lparquet -larrow_compute -larrow -larrow_bundled_dependencies -lutf8proc -lsnappy -lz -lzstd -llz4 -lbz2 -lbrotlienc -lbrotlidec -lbrotlicommon -lole32 -lbcrypt -lpsapi -lcrypto -lcrypt32 -lre2 -luserenv -lversion -lws2_32 -lbcrypt -lwininet -lwinhttp -lsecur32 -lshlwapi -lncrypt -lcurl -lnormaliz -lssh2 -lgdi32 -lssl -lcrypto -lcrypt32 -lwldap32 -lz -lws2_32 -lnghttp2 -ldbghelp -LC:/rtools45/x86_64-w64-mingw32
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7d9a): undefined reference to `__imp__ZN5arrow7compute7Grouper4MakeERKSt6vectorINS_10TypeHolderESaIS3_EEPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_dataset.a(partition.cc.obj):(.text+0x7f16): undefined reference to `__imp__ZN5arrow7compute7Grouper13MakeGroupingsERKNS_12NumericArrayINS_10UInt32TypeEEEjPNS0_11ExecContextE'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1f2e): undefined reference to `__imp__ZN5arrow4util15TempVectorStack5allocEjPPhPi'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x1fb5): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x20b5): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x2256): undefined reference to `__imp__ZN5arrow4util15TempVectorStack7releaseEij'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c05): undefined reference to `__imp__ZN5arrow4util15TempVectorStack4InitEPNS_10MemoryPoolEx'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text+0x7c6f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'
C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero12HashJoinNodeD1Ev[_ZN5arrow5acero12HashJoinNodeD1Ev]+0x2f): undefined reference to `__imp__ZN5arrow4util15TempVectorStackD1Ev'C:\rtools45\x86_64-w64-mingw32.static.posix\bin/ld.exe: ../windows/arrow-20.0.0.9000/lib/x64-ucrt/libarrow_acero.a(hash_join_node.cc.obj):(.text$_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE[_ZN5arrow5acero26BloomFilterPushdownContext17FilterSingleBatchEyPNS_7compute9ExecBatchE]+0x64f): undefined reference to `__imp__ZN5arrow7compute9Hashing329HashBatchERKNS0_9ExecBatchEPjRSt6vectorINS0_14KeyColumnArrayESaIS7_EExPNS_4util15TempVectorStackExx'

Still other improvements to be done but I wanted to have a clean CI PR to move to the cleaning and improvement stage.

@kou

kou commented May 1, 2025

Copy link
Copy Markdown
Member

Acero and Dataset static libraries weren't built with -DARROW_COMPUTE_STATIC:

https://github.com/apache/arrow/actions/runs/14751558013/job/41410004318?pr=46261#step:7:14525

 [ 92%] Building CXX object src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj
cd /D/a/arrow/arrow/src/build-x86_64-cpp/src/arrow/acero && /C/rtools40/ucrt64/bin/ccache.exe /C/rtools40/ucrt64/bin/c++.exe -DARROW_ACERO_EXPORTING -DARROW_ACERO_STATIC -DARROW_FLIGHT_SQL_STATIC -DARROW_FLIGHT_STATIC -DARROW_HAVE_RUNTIME_AVX2 -DARROW_HAVE_RUNTIME_BMI2 -DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC -DARROW_WITH_TIMING_TESTS -DBOOST_ALL_NO_LIB -DUTF8PROC_STATIC -D_CRT_SECURE_NO_WARNINGS @CMakeFiles/arrow_acero_static.dir/includes_CXX.rsp -Wno-noexcept-type -DCURL_STATICLIB -fdiagnostics-color=always -Wa,-mbig-obj -Wall -fno-semantic-interposition -mxsave -msse4.2 -DUTF8PROC_STATIC -O3 -DNDEBUG -O2 -ftree-vectorize -std=c++17 -MD -MT src/arrow/acero/CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -MF CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj.d -o CMakeFiles/arrow_acero_static.dir/groupby_aggregate_node.cc.obj -c /D/a/arrow/arrow/cpp/src/arrow/acero/groupby_aggregate_node.cc

Could you add the following

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_compute_staticPUBLICARROW_COMPUTE_STATIC)
endif()

like we did for Flight?

if(ARROW_BUILD_STATIC ANDWIN32)
target_compile_definitions(arrow_flight_staticPUBLICARROW_FLIGHT_STATIC)
endif()

Comment threadc_glib/arrow-glib/compute.cpp Outdated
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels May 1, 2025
@github-actionsgithub-actionsBot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels May 2, 2025
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g nightly-tests

@github-actions

This comment was marked as outdated.

@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels May 5, 2025
@amoebaamoeba mentioned this pull request Jun 6, 2025
* Revert manual edit of arrowExports.cpp
* Re-do R initialization change
@raulcd

Copy link
Copy Markdown
MemberAuthor

@github-actions crossbow submit -g cpp

@github-actions

Copy link
Copy Markdown

Revision: 9001ec2

Submitted crossbow builds: ursacomputing/crossbow @ actions-74be4cb1e9

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-alpine-linux-cppGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-conda-cppGitHub Actions
test-conda-cpp-valgrindGitHub Actions
test-cuda-cpp-ubuntu-22.04-cuda-11.7.1GitHub Actions
test-debian-12-cpp-amd64GitHub Actions
test-debian-12-cpp-i386GitHub Actions
test-fedora-39-cppGitHub Actions
test-ubuntu-22.04-cppGitHub Actions
test-ubuntu-22.04-cpp-20GitHub Actions
test-ubuntu-22.04-cpp-bundledGitHub Actions
test-ubuntu-22.04-cpp-emscriptenGitHub Actions
test-ubuntu-22.04-cpp-no-threadingGitHub Actions
test-ubuntu-24.04-cppGitHub Actions
test-ubuntu-24.04-cpp-bundled-offlineGitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundledGitHub Actions
test-ubuntu-24.04-cpp-gcc-14GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formatsGitHub Actions
test-ubuntu-24.04-cpp-thread-sanitizerGitHub Actions

Comment threadcpp/src/arrow/c/bridge_test.cc
Comment threadcpp/src/arrow/compute/initialize.h
Comment threadr/data-raw/codegen.R Outdated

@pitroupitrou left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM in general, I posted two small suggestions.

amoebaand others added 2 commits June 9, 2025 08:49
Co-authored-by: Rossi Sun <zanmato1984@gmail.com>

@zanmato1984zanmato1984 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1.

Excellent work @raulcd !

rok
rok approved these changes Jun 10, 2025

@rokrok left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was only able to do a quick pass. Looks great, love the ARROW_COMPUTE_EXPORT macro.

@jonkeanejonkeane left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for all of this, it's been a long journey!

Comment threadr/src/compute.cpp Outdated
@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone for taking the time to review. If no more concerns are raised, it has already been approved by 4 committers, I plan to merge in a couple days.

@raulcd

Copy link
Copy Markdown
MemberAuthor

Thanks everyone, I am merging!

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 0 benchmarking runs that have been run so far on merge-commit 6a5db61.

None of the specified runs were found on the Conbench server.

The full Conbench report has more details.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants

@raulcd@kou@zanmato1984@assignUser@pitrou@amoeba@rok@jonkeane@bkietz