-
Notifications
You must be signed in to change notification settings - Fork 3.9k
GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics #47779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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: |
|
|
|
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? |
@JohanMabille @AntoinePrv @serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC? |
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 |
I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612. |
There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork |
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. |
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. |
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) |
2826ea3 to
89f3e89
Compare
89f3e89 to
d6c980c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please update the README to include the patch that was applied, otherwise LGTM.
|
@github-actions crossbow submit -g cpp win |
|
Revision: d6c980c Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37 |
d6c980c to
2317af2
Compare
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.
2317af2 to
84b86b9
Compare
|
CI failures are unrelated, I'll merge. Thank you @jgiannuzzi ! |
|
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 <[email protected]> Signed-off-by: Antoine Pitrou <[email protected]>
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?