-
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
base: main
Are you sure you want to change the base?
Conversation
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.
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) |
Rationale for this change
This change enables building Arrow C++ for Windows ARM64 with MSVC when setting
ARROW_SIMD_LEVEL
toNONE
. This is useful to be able to build Arrow withvcpkg
and use it as a dependency.Setting
ARROW_SIMD_LEVEL
toNONE
is 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
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 withvcpkg
).Are there any user-facing changes?
Not really, unless you consider adding the ability to build Arrow on Windows ARM64 user-facing?