Uh oh!
There was an error while loading. Please reload this page.
GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779
Conversation
Thanks for opening a pull request! If this is not a minor PR. Could you open an issue for this pull request on GitHub? https://github.com/apache/arrow/issues/new/choose Opening GitHub issues ahead of time contributes to the Openness of the Apache Arrow project. Then could you also rename the pull request title in the following format? or See also: |
kou
commented
Oct 11, 2025
Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained... Do we have alternative implementation...? https://github.com/imneme/pcg-cpp was vendored by #8879. @pitrou Do you have any opinion? |
pitrou
commented
Oct 11, 2025
@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC? |
pitrou
commented
Oct 11, 2025
What does this patch have to do with xsimd? Am I missing something? |
Sorry @pitrou, my description wasn't clear. This patch has nothing to do with |
jgiannuzzi
commented
Oct 12, 2025
I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612. |
pitrou
commented
Oct 12, 2025
There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork |
brt-v
commented
Oct 12, 2025
I made that fork because of the lack of maintenance of the original implementation, with mostly quality of life improvements. The logic and tests are identical to the original, excepts for some small fixes to get all tests working on Windows. Note that I'm not an rng researcher and have no intention in further developing the algorithm, I just wanted to provide an easy to use library. I understand to you may not want to rely on such a small/unknown repo, but I'm happy to address your concerns and make further improvements where needed. |
Yes it could, but I cannot give a deadline for that. For the record, an issue for tracking this feature request has already been opened. |
pitrou
commented
Oct 13, 2025
Well, I think we could at some point. For now, we still support C++11 so we'll have to patch our vendored copy instead. |
kou
commented
Oct 13, 2025
Really? I think that we require C++17: arrow/cpp/cmake_modules/SetupCxxFlags.cmake Lines 142 to 147 in 81ef967 |
Wow. I even did the change myself. Clearly I haven't drunk enough tea this morning... (I was thinking of C++20 for some reason) |
pitrou
commented
Oct 15, 2025
@github-actions crossbow submit -g cpp win |
Revision: d6c980c Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37 |
jgiannuzzi
commented
Oct 15, 2025
Uh oh!
There was an error while loading. Please reload this page.
This enables building Arrow C++ for Windows ARM64 with MSVC when setting ARROW_SIMD_LEVEL to NONE (to disable xsimd usage, which does not support msvc arm64 intrinsics, and is non-trivial to fix). This patch is based on imneme/pcg-cpp#99. The upstream pcg library has not been updated in the past 3 years, so this may never get merged.
pitrou
commented
Oct 15, 2025
CI failures are unrelated, I'll merge. Thank you @jgiannuzzi ! |
jgiannuzzi
commented
Oct 15, 2025
Thanks @pitrou! |
After merging your PR, Conbench analyzed the 3 benchmarking runs that have been run so far on merge-commit 541cba8. There were no benchmark performance regressions. 🎉 The full Conbench report has more details. It also includes information about 1 possible false positive for unstable benchmarks that are known to sometimes produce them. |
… intrinsics (apache#47779) ### Rationale for this change This change enables building Arrow C++ for Windows ARM64 with MSVC when setting `ARROW_SIMD_LEVEL` to `NONE`. This is useful to be able to build Arrow with `vcpkg` and use it as a dependency. Setting `ARROW_SIMD_LEVEL` to `NONE` is done to disable the use of `xsimd`, which does not yet support msvc arm64 intrinsics, and is non-trivial to fix. ### What changes are included in this PR? A patch to the vendored `pcg` library, based on imneme/pcg-cpp#99. The upstream pcg library has not been updated in the past 3 years, so this may never get merged. ### Are these changes tested? Yes, the changes have been tested in microsoft/vcpkg#47750 (the same patch for `vcpkg`, which this change would alleviate) and in https://github.com/jgiannuzzi/ParquetSharp/actions/runs/18354286294 (a full run of the ParquetSharp CI, using this patch to build Arrow with `vcpkg`). ### Are there any user-facing changes? Not really, unless you consider adding the ability to build Arrow on Windows ARM64 user-facing? * GitHub Issue: apache#47784 Authored-by: Jonathan Giannuzzi <jonathan@giannuzzi.me> Signed-off-by: Antoine Pitrou <antoine@python.org>
… intrinsics (apache#47779) ### Rationale for this change This change enables building Arrow C++ for Windows ARM64 with MSVC when setting `ARROW_SIMD_LEVEL` to `NONE`. This is useful to be able to build Arrow with `vcpkg` and use it as a dependency. Setting `ARROW_SIMD_LEVEL` to `NONE` is done to disable the use of `xsimd`, which does not yet support msvc arm64 intrinsics, and is non-trivial to fix. ### What changes are included in this PR? A patch to the vendored `pcg` library, based on imneme/pcg-cpp#99. The upstream pcg library has not been updated in the past 3 years, so this may never get merged. ### Are these changes tested? Yes, the changes have been tested in microsoft/vcpkg#47750 (the same patch for `vcpkg`, which this change would alleviate) and in https://github.com/jgiannuzzi/ParquetSharp/actions/runs/18354286294 (a full run of the ParquetSharp CI, using this patch to build Arrow with `vcpkg`). ### Are there any user-facing changes? Not really, unless you consider adding the ability to build Arrow on Windows ARM64 user-facing? * GitHub Issue: apache#47784 Authored-by: Jonathan Giannuzzi <jonathan@giannuzzi.me> Signed-off-by: Antoine Pitrou <antoine@python.org>
Rationale for this change
This change enables building Arrow C++ for Windows ARM64 with MSVC when setting
ARROW_SIMD_LEVELtoNONE. This is useful to be able to build Arrow withvcpkgand use it as a dependency.Setting
ARROW_SIMD_LEVELtoNONEis done to disable the use ofxsimd, which does not yet support msvc arm64 intrinsics, and is non-trivial to fix.What changes are included in this PR?
A patch to the vendored
pcglibrary, based on imneme/pcg-cpp#99. The upstream pcg library has not been updated in the past 3 years, so this may never get merged.Are these changes tested?
Yes, the changes have been tested in microsoft/vcpkg#47750 (the same patch for
vcpkg, which this change would alleviate) and in https://github.com/jgiannuzzi/ParquetSharp/actions/runs/18354286294 (a full run of the ParquetSharp CI, using this patch to build Arrow withvcpkg).Are there any user-facing changes?
Not really, unless you consider adding the ability to build Arrow on Windows ARM64 user-facing?