GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779

Merged
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp
Oct 15, 2025
Merged

GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics#47779
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp

Conversation

@jgiannuzzi

@jgiannuzzijgiannuzzi commented Oct 10, 2025

Copy link
Copy Markdown
Contributor

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-actions

Copy link
Copy Markdown

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?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

See also:

@jgiannuzzijgiannuzzi changed the title [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsGH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsOct 10, 2025
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47784has been automatically assigned in GitHub to PR creator.

@jgiannuzzi
jgiannuzzi marked this pull request as ready for review October 10, 2025 17:35
@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
Member

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

Copy link
Copy Markdown
Member

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

@pitrou

Copy link
Copy Markdown
Member

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.

What does this patch have to do with xsimd? Am I missing something?

@jgiannuzzi

jgiannuzzi commented Oct 11, 2025

Copy link
Copy Markdown
ContributorAuthor

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 xsimd. I just meant to say that this pcg patch is not enough to build arrow with msvc on arm64 - you also need to set ARROW_SIMD_LEVEL to NONE to switch off ARROW_HAVE_NEON, which in turn will disable the use of xsimd, as it doesn't build with msvc for arm64.

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612.

@pitrou

Copy link
Copy Markdown
Member

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...

Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork
I'm not sure how reasonable it is to rely on it, though.

@brt-v

Copy link
Copy Markdown

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...
Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork I'm not sure how reasonable it is to rely on it, though.

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.

@JohanMabille

JohanMabille commented Oct 13, 2025

Copy link
Copy Markdown
Contributor

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

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

Copy link
Copy Markdown
Member

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.

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

kou commented Oct 13, 2025

Copy link
Copy Markdown
Member

we still support C++11

Really? I think that we require C++17:

# This ensures that things like c++17 get passed correctly
if(NOTDEFINEDCMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
elseif(${CMAKE_CXX_STANDARD}VERSION_LESS 17)
message(FATAL_ERROR"Cannot set a CMAKE_CXX_STANDARD smaller than 17")
endif()

@pitrou

pitrou commented Oct 13, 2025

Copy link
Copy Markdown
Member

Really? I think that we require C++17:

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)

@jgiannuzzi

jgiannuzzi commented Oct 15, 2025

Copy link
Copy Markdown
ContributorAuthor

#47811 adds a CI job to build the C++ library with msvc arm64. I left it as draft as it depends on this current PR to be merged first. @pitrou what are your latest thoughts on it?

@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.

Please update the README to include the patch that was applied, otherwise LGTM.

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 15, 2025
@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp win

@pitroupitrou added the CI: Extra: C++ Run extra C++ CI label Oct 15, 2025
@github-actions

Copy link
Copy Markdown

Revision: d6c980c

Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-build-vcpkg-winGitHub 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-42-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
verify-rc-source-windowsGitHub Actions
wheel-windows-cp310-cp310-amd64GitHub Actions
wheel-windows-cp311-cp311-amd64GitHub Actions
wheel-windows-cp312-cp312-amd64GitHub Actions
wheel-windows-cp313-cp313-amd64GitHub Actions
wheel-windows-cp313-cp313t-amd64GitHub Actions
wheel-windows-cp314-cp314-amd64GitHub Actions
wheel-windows-cp314-cp314t-amd64GitHub Actions

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Please update the README to include the patch that was applied, otherwise LGTM.

Done! Could you please review again @pitrou?

Comment threadcpp/src/arrow/vendored/pcg/README.md Outdated
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
pitrou self-requested a review October 15, 2025 14:22
@pitrou

Copy link
Copy Markdown
Member

CI failures are unrelated, I'll merge. Thank you @jgiannuzzi !

@pitrou
pitrou merged commit 541cba8 into apache:mainOct 15, 2025
48 checks passed
@pitroupitrou removed the awaiting committer review Awaiting committer review label Oct 15, 2025
@jgiannuzzi
jgiannuzzi deleted the windows-arm64-cpp branch October 15, 2025 15:19
@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pitrou!

@conbench-apache-arrow

Copy link
Copy Markdown

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.

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Nov 5, 2025
… 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>
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
… 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>
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.

5 participants

@jgiannuzzi@kou@pitrou@brt-v@JohanMabille
, '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-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779

Merged
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp
Oct 15, 2025
Merged

GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics#47779
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp

Conversation

@jgiannuzzi

@jgiannuzzijgiannuzzi commented Oct 10, 2025

Copy link
Copy Markdown
Contributor

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-actions

Copy link
Copy Markdown

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?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

See also:

@jgiannuzzijgiannuzzi changed the title [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsGH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsOct 10, 2025
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47784has been automatically assigned in GitHub to PR creator.

@jgiannuzzi
jgiannuzzi marked this pull request as ready for review October 10, 2025 17:35
@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
Member

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

Copy link
Copy Markdown
Member

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

@pitrou

Copy link
Copy Markdown
Member

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.

What does this patch have to do with xsimd? Am I missing something?

@jgiannuzzi

jgiannuzzi commented Oct 11, 2025

Copy link
Copy Markdown
ContributorAuthor

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 xsimd. I just meant to say that this pcg patch is not enough to build arrow with msvc on arm64 - you also need to set ARROW_SIMD_LEVEL to NONE to switch off ARROW_HAVE_NEON, which in turn will disable the use of xsimd, as it doesn't build with msvc for arm64.

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612.

@pitrou

Copy link
Copy Markdown
Member

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...

Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork
I'm not sure how reasonable it is to rely on it, though.

@brt-v

Copy link
Copy Markdown

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...
Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork I'm not sure how reasonable it is to rely on it, though.

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.

@JohanMabille

JohanMabille commented Oct 13, 2025

Copy link
Copy Markdown
Contributor

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

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

Copy link
Copy Markdown
Member

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.

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

kou commented Oct 13, 2025

Copy link
Copy Markdown
Member

we still support C++11

Really? I think that we require C++17:

# This ensures that things like c++17 get passed correctly
if(NOTDEFINEDCMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
elseif(${CMAKE_CXX_STANDARD}VERSION_LESS 17)
message(FATAL_ERROR"Cannot set a CMAKE_CXX_STANDARD smaller than 17")
endif()

@pitrou

pitrou commented Oct 13, 2025

Copy link
Copy Markdown
Member

Really? I think that we require C++17:

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)

@jgiannuzzi

jgiannuzzi commented Oct 15, 2025

Copy link
Copy Markdown
ContributorAuthor

#47811 adds a CI job to build the C++ library with msvc arm64. I left it as draft as it depends on this current PR to be merged first. @pitrou what are your latest thoughts on it?

@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.

Please update the README to include the patch that was applied, otherwise LGTM.

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 15, 2025
@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp win

@pitroupitrou added the CI: Extra: C++ Run extra C++ CI label Oct 15, 2025
@github-actions

Copy link
Copy Markdown

Revision: d6c980c

Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-build-vcpkg-winGitHub 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-42-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
verify-rc-source-windowsGitHub Actions
wheel-windows-cp310-cp310-amd64GitHub Actions
wheel-windows-cp311-cp311-amd64GitHub Actions
wheel-windows-cp312-cp312-amd64GitHub Actions
wheel-windows-cp313-cp313-amd64GitHub Actions
wheel-windows-cp313-cp313t-amd64GitHub Actions
wheel-windows-cp314-cp314-amd64GitHub Actions
wheel-windows-cp314-cp314t-amd64GitHub Actions

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Please update the README to include the patch that was applied, otherwise LGTM.

Done! Could you please review again @pitrou?

Comment threadcpp/src/arrow/vendored/pcg/README.md Outdated
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
pitrou self-requested a review October 15, 2025 14:22
@pitrou

Copy link
Copy Markdown
Member

CI failures are unrelated, I'll merge. Thank you @jgiannuzzi !

@pitrou
pitrou merged commit 541cba8 into apache:mainOct 15, 2025
48 checks passed
@pitroupitrou removed the awaiting committer review Awaiting committer review label Oct 15, 2025
@jgiannuzzi
jgiannuzzi deleted the windows-arm64-cpp branch October 15, 2025 15:19
@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pitrou!

@conbench-apache-arrow

Copy link
Copy Markdown

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.

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Nov 5, 2025
… 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>
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
… 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>
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.

5 participants

@jgiannuzzi@kou@pitrou@brt-v@JohanMabille
, '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-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779

Merged
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp
Oct 15, 2025
Merged

GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics#47779
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp

Conversation

@jgiannuzzi

@jgiannuzzijgiannuzzi commented Oct 10, 2025

Copy link
Copy Markdown
Contributor

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-actions

Copy link
Copy Markdown

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?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

See also:

@jgiannuzzijgiannuzzi changed the title [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsGH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsOct 10, 2025
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47784has been automatically assigned in GitHub to PR creator.

@jgiannuzzi
jgiannuzzi marked this pull request as ready for review October 10, 2025 17:35
@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
Member

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

Copy link
Copy Markdown
Member

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

@pitrou

Copy link
Copy Markdown
Member

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.

What does this patch have to do with xsimd? Am I missing something?

@jgiannuzzi

jgiannuzzi commented Oct 11, 2025

Copy link
Copy Markdown
ContributorAuthor

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 xsimd. I just meant to say that this pcg patch is not enough to build arrow with msvc on arm64 - you also need to set ARROW_SIMD_LEVEL to NONE to switch off ARROW_HAVE_NEON, which in turn will disable the use of xsimd, as it doesn't build with msvc for arm64.

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612.

@pitrou

Copy link
Copy Markdown
Member

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...

Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork
I'm not sure how reasonable it is to rely on it, though.

@brt-v

Copy link
Copy Markdown

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...
Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork I'm not sure how reasonable it is to rely on it, though.

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.

@JohanMabille

JohanMabille commented Oct 13, 2025

Copy link
Copy Markdown
Contributor

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

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

Copy link
Copy Markdown
Member

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.

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

kou commented Oct 13, 2025

Copy link
Copy Markdown
Member

we still support C++11

Really? I think that we require C++17:

# This ensures that things like c++17 get passed correctly
if(NOTDEFINEDCMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
elseif(${CMAKE_CXX_STANDARD}VERSION_LESS 17)
message(FATAL_ERROR"Cannot set a CMAKE_CXX_STANDARD smaller than 17")
endif()

@pitrou

pitrou commented Oct 13, 2025

Copy link
Copy Markdown
Member

Really? I think that we require C++17:

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)

@jgiannuzzi

jgiannuzzi commented Oct 15, 2025

Copy link
Copy Markdown
ContributorAuthor

#47811 adds a CI job to build the C++ library with msvc arm64. I left it as draft as it depends on this current PR to be merged first. @pitrou what are your latest thoughts on it?

@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.

Please update the README to include the patch that was applied, otherwise LGTM.

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 15, 2025
@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp win

@pitroupitrou added the CI: Extra: C++ Run extra C++ CI label Oct 15, 2025
@github-actions

Copy link
Copy Markdown

Revision: d6c980c

Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-build-vcpkg-winGitHub 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-42-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
verify-rc-source-windowsGitHub Actions
wheel-windows-cp310-cp310-amd64GitHub Actions
wheel-windows-cp311-cp311-amd64GitHub Actions
wheel-windows-cp312-cp312-amd64GitHub Actions
wheel-windows-cp313-cp313-amd64GitHub Actions
wheel-windows-cp313-cp313t-amd64GitHub Actions
wheel-windows-cp314-cp314-amd64GitHub Actions
wheel-windows-cp314-cp314t-amd64GitHub Actions

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Please update the README to include the patch that was applied, otherwise LGTM.

Done! Could you please review again @pitrou?

Comment threadcpp/src/arrow/vendored/pcg/README.md Outdated
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
pitrou self-requested a review October 15, 2025 14:22
@pitrou

Copy link
Copy Markdown
Member

CI failures are unrelated, I'll merge. Thank you @jgiannuzzi !

@pitrou
pitrou merged commit 541cba8 into apache:mainOct 15, 2025
48 checks passed
@pitroupitrou removed the awaiting committer review Awaiting committer review label Oct 15, 2025
@jgiannuzzi
jgiannuzzi deleted the windows-arm64-cpp branch October 15, 2025 15:19
@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pitrou!

@conbench-apache-arrow

Copy link
Copy Markdown

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.

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Nov 5, 2025
… 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>
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
… 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>
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.

5 participants

@jgiannuzzi@kou@pitrou@brt-v@JohanMabille
, '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-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779

Merged
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp
Oct 15, 2025
Merged

GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics#47779
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp

Conversation

@jgiannuzzi

@jgiannuzzijgiannuzzi commented Oct 10, 2025

Copy link
Copy Markdown
Contributor

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-actions

Copy link
Copy Markdown

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?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

See also:

@jgiannuzzijgiannuzzi changed the title [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsGH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsOct 10, 2025
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47784has been automatically assigned in GitHub to PR creator.

@jgiannuzzi
jgiannuzzi marked this pull request as ready for review October 10, 2025 17:35
@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
Member

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

Copy link
Copy Markdown
Member

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

@pitrou

Copy link
Copy Markdown
Member

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.

What does this patch have to do with xsimd? Am I missing something?

@jgiannuzzi

jgiannuzzi commented Oct 11, 2025

Copy link
Copy Markdown
ContributorAuthor

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 xsimd. I just meant to say that this pcg patch is not enough to build arrow with msvc on arm64 - you also need to set ARROW_SIMD_LEVEL to NONE to switch off ARROW_HAVE_NEON, which in turn will disable the use of xsimd, as it doesn't build with msvc for arm64.

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612.

@pitrou

Copy link
Copy Markdown
Member

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...

Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork
I'm not sure how reasonable it is to rely on it, though.

@brt-v

Copy link
Copy Markdown

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...
Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork I'm not sure how reasonable it is to rely on it, though.

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.

@JohanMabille

JohanMabille commented Oct 13, 2025

Copy link
Copy Markdown
Contributor

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

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

Copy link
Copy Markdown
Member

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.

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

kou commented Oct 13, 2025

Copy link
Copy Markdown
Member

we still support C++11

Really? I think that we require C++17:

# This ensures that things like c++17 get passed correctly
if(NOTDEFINEDCMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
elseif(${CMAKE_CXX_STANDARD}VERSION_LESS 17)
message(FATAL_ERROR"Cannot set a CMAKE_CXX_STANDARD smaller than 17")
endif()

@pitrou

pitrou commented Oct 13, 2025

Copy link
Copy Markdown
Member

Really? I think that we require C++17:

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)

@jgiannuzzi

jgiannuzzi commented Oct 15, 2025

Copy link
Copy Markdown
ContributorAuthor

#47811 adds a CI job to build the C++ library with msvc arm64. I left it as draft as it depends on this current PR to be merged first. @pitrou what are your latest thoughts on it?

@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.

Please update the README to include the patch that was applied, otherwise LGTM.

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 15, 2025
@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp win

@pitroupitrou added the CI: Extra: C++ Run extra C++ CI label Oct 15, 2025
@github-actions

Copy link
Copy Markdown

Revision: d6c980c

Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-build-vcpkg-winGitHub 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-42-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
verify-rc-source-windowsGitHub Actions
wheel-windows-cp310-cp310-amd64GitHub Actions
wheel-windows-cp311-cp311-amd64GitHub Actions
wheel-windows-cp312-cp312-amd64GitHub Actions
wheel-windows-cp313-cp313-amd64GitHub Actions
wheel-windows-cp313-cp313t-amd64GitHub Actions
wheel-windows-cp314-cp314-amd64GitHub Actions
wheel-windows-cp314-cp314t-amd64GitHub Actions

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Please update the README to include the patch that was applied, otherwise LGTM.

Done! Could you please review again @pitrou?

Comment threadcpp/src/arrow/vendored/pcg/README.md Outdated
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
pitrou self-requested a review October 15, 2025 14:22
@pitrou

Copy link
Copy Markdown
Member

CI failures are unrelated, I'll merge. Thank you @jgiannuzzi !

@pitrou
pitrou merged commit 541cba8 into apache:mainOct 15, 2025
48 checks passed
@pitroupitrou removed the awaiting committer review Awaiting committer review label Oct 15, 2025
@jgiannuzzi
jgiannuzzi deleted the windows-arm64-cpp branch October 15, 2025 15:19
@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pitrou!

@conbench-apache-arrow

Copy link
Copy Markdown

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.

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Nov 5, 2025
… 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>
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
… 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>
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.

5 participants

@jgiannuzzi@kou@pitrou@brt-v@JohanMabille
, '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-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779

Merged
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp
Oct 15, 2025
Merged

GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics#47779
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp

Conversation

@jgiannuzzi

@jgiannuzzijgiannuzzi commented Oct 10, 2025

Copy link
Copy Markdown
Contributor

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-actions

Copy link
Copy Markdown

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?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

See also:

@jgiannuzzijgiannuzzi changed the title [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsGH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsOct 10, 2025
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47784has been automatically assigned in GitHub to PR creator.

@jgiannuzzi
jgiannuzzi marked this pull request as ready for review October 10, 2025 17:35
@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
Member

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

Copy link
Copy Markdown
Member

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

@pitrou

Copy link
Copy Markdown
Member

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.

What does this patch have to do with xsimd? Am I missing something?

@jgiannuzzi

jgiannuzzi commented Oct 11, 2025

Copy link
Copy Markdown
ContributorAuthor

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 xsimd. I just meant to say that this pcg patch is not enough to build arrow with msvc on arm64 - you also need to set ARROW_SIMD_LEVEL to NONE to switch off ARROW_HAVE_NEON, which in turn will disable the use of xsimd, as it doesn't build with msvc for arm64.

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612.

@pitrou

Copy link
Copy Markdown
Member

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...

Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork
I'm not sure how reasonable it is to rely on it, though.

@brt-v

Copy link
Copy Markdown

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...
Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork I'm not sure how reasonable it is to rely on it, though.

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.

@JohanMabille

JohanMabille commented Oct 13, 2025

Copy link
Copy Markdown
Contributor

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

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

Copy link
Copy Markdown
Member

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.

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

kou commented Oct 13, 2025

Copy link
Copy Markdown
Member

we still support C++11

Really? I think that we require C++17:

# This ensures that things like c++17 get passed correctly
if(NOTDEFINEDCMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
elseif(${CMAKE_CXX_STANDARD}VERSION_LESS 17)
message(FATAL_ERROR"Cannot set a CMAKE_CXX_STANDARD smaller than 17")
endif()

@pitrou

pitrou commented Oct 13, 2025

Copy link
Copy Markdown
Member

Really? I think that we require C++17:

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)

@jgiannuzzi

jgiannuzzi commented Oct 15, 2025

Copy link
Copy Markdown
ContributorAuthor

#47811 adds a CI job to build the C++ library with msvc arm64. I left it as draft as it depends on this current PR to be merged first. @pitrou what are your latest thoughts on it?

@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.

Please update the README to include the patch that was applied, otherwise LGTM.

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 15, 2025
@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp win

@pitroupitrou added the CI: Extra: C++ Run extra C++ CI label Oct 15, 2025
@github-actions

Copy link
Copy Markdown

Revision: d6c980c

Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-build-vcpkg-winGitHub 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-42-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
verify-rc-source-windowsGitHub Actions
wheel-windows-cp310-cp310-amd64GitHub Actions
wheel-windows-cp311-cp311-amd64GitHub Actions
wheel-windows-cp312-cp312-amd64GitHub Actions
wheel-windows-cp313-cp313-amd64GitHub Actions
wheel-windows-cp313-cp313t-amd64GitHub Actions
wheel-windows-cp314-cp314-amd64GitHub Actions
wheel-windows-cp314-cp314t-amd64GitHub Actions

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Please update the README to include the patch that was applied, otherwise LGTM.

Done! Could you please review again @pitrou?

Comment threadcpp/src/arrow/vendored/pcg/README.md Outdated
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
pitrou self-requested a review October 15, 2025 14:22
@pitrou

Copy link
Copy Markdown
Member

CI failures are unrelated, I'll merge. Thank you @jgiannuzzi !

@pitrou
pitrou merged commit 541cba8 into apache:mainOct 15, 2025
48 checks passed
@pitroupitrou removed the awaiting committer review Awaiting committer review label Oct 15, 2025
@jgiannuzzi
jgiannuzzi deleted the windows-arm64-cpp branch October 15, 2025 15:19
@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pitrou!

@conbench-apache-arrow

Copy link
Copy Markdown

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.

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Nov 5, 2025
… 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>
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
… 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>
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.

5 participants

@jgiannuzzi@kou@pitrou@brt-v@JohanMabille
, '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-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779

Merged
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp
Oct 15, 2025
Merged

GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics#47779
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp

Conversation

@jgiannuzzi

@jgiannuzzijgiannuzzi commented Oct 10, 2025

Copy link
Copy Markdown
Contributor

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-actions

Copy link
Copy Markdown

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?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

See also:

@jgiannuzzijgiannuzzi changed the title [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsGH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsOct 10, 2025
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47784has been automatically assigned in GitHub to PR creator.

@jgiannuzzi
jgiannuzzi marked this pull request as ready for review October 10, 2025 17:35
@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
Member

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

Copy link
Copy Markdown
Member

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

@pitrou

Copy link
Copy Markdown
Member

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.

What does this patch have to do with xsimd? Am I missing something?

@jgiannuzzi

jgiannuzzi commented Oct 11, 2025

Copy link
Copy Markdown
ContributorAuthor

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 xsimd. I just meant to say that this pcg patch is not enough to build arrow with msvc on arm64 - you also need to set ARROW_SIMD_LEVEL to NONE to switch off ARROW_HAVE_NEON, which in turn will disable the use of xsimd, as it doesn't build with msvc for arm64.

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612.

@pitrou

Copy link
Copy Markdown
Member

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...

Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork
I'm not sure how reasonable it is to rely on it, though.

@brt-v

Copy link
Copy Markdown

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...
Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork I'm not sure how reasonable it is to rely on it, though.

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.

@JohanMabille

JohanMabille commented Oct 13, 2025

Copy link
Copy Markdown
Contributor

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

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

Copy link
Copy Markdown
Member

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.

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

kou commented Oct 13, 2025

Copy link
Copy Markdown
Member

we still support C++11

Really? I think that we require C++17:

# This ensures that things like c++17 get passed correctly
if(NOTDEFINEDCMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
elseif(${CMAKE_CXX_STANDARD}VERSION_LESS 17)
message(FATAL_ERROR"Cannot set a CMAKE_CXX_STANDARD smaller than 17")
endif()

@pitrou

pitrou commented Oct 13, 2025

Copy link
Copy Markdown
Member

Really? I think that we require C++17:

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)

@jgiannuzzi

jgiannuzzi commented Oct 15, 2025

Copy link
Copy Markdown
ContributorAuthor

#47811 adds a CI job to build the C++ library with msvc arm64. I left it as draft as it depends on this current PR to be merged first. @pitrou what are your latest thoughts on it?

@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.

Please update the README to include the patch that was applied, otherwise LGTM.

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 15, 2025
@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp win

@pitroupitrou added the CI: Extra: C++ Run extra C++ CI label Oct 15, 2025
@github-actions

Copy link
Copy Markdown

Revision: d6c980c

Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-build-vcpkg-winGitHub 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-42-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
verify-rc-source-windowsGitHub Actions
wheel-windows-cp310-cp310-amd64GitHub Actions
wheel-windows-cp311-cp311-amd64GitHub Actions
wheel-windows-cp312-cp312-amd64GitHub Actions
wheel-windows-cp313-cp313-amd64GitHub Actions
wheel-windows-cp313-cp313t-amd64GitHub Actions
wheel-windows-cp314-cp314-amd64GitHub Actions
wheel-windows-cp314-cp314t-amd64GitHub Actions

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Please update the README to include the patch that was applied, otherwise LGTM.

Done! Could you please review again @pitrou?

Comment threadcpp/src/arrow/vendored/pcg/README.md Outdated
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
pitrou self-requested a review October 15, 2025 14:22
@pitrou

Copy link
Copy Markdown
Member

CI failures are unrelated, I'll merge. Thank you @jgiannuzzi !

@pitrou
pitrou merged commit 541cba8 into apache:mainOct 15, 2025
48 checks passed
@pitroupitrou removed the awaiting committer review Awaiting committer review label Oct 15, 2025
@jgiannuzzi
jgiannuzzi deleted the windows-arm64-cpp branch October 15, 2025 15:19
@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pitrou!

@conbench-apache-arrow

Copy link
Copy Markdown

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.

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Nov 5, 2025
… 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>
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
… 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>
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.

5 participants

@jgiannuzzi@kou@pitrou@brt-v@JohanMabille
, '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-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779

Merged
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp
Oct 15, 2025
Merged

GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics#47779
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp

Conversation

@jgiannuzzi

@jgiannuzzijgiannuzzi commented Oct 10, 2025

Copy link
Copy Markdown
Contributor

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-actions

Copy link
Copy Markdown

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?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

See also:

@jgiannuzzijgiannuzzi changed the title [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsGH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsOct 10, 2025
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47784has been automatically assigned in GitHub to PR creator.

@jgiannuzzi
jgiannuzzi marked this pull request as ready for review October 10, 2025 17:35
@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
Member

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

Copy link
Copy Markdown
Member

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

@pitrou

Copy link
Copy Markdown
Member

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.

What does this patch have to do with xsimd? Am I missing something?

@jgiannuzzi

jgiannuzzi commented Oct 11, 2025

Copy link
Copy Markdown
ContributorAuthor

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 xsimd. I just meant to say that this pcg patch is not enough to build arrow with msvc on arm64 - you also need to set ARROW_SIMD_LEVEL to NONE to switch off ARROW_HAVE_NEON, which in turn will disable the use of xsimd, as it doesn't build with msvc for arm64.

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612.

@pitrou

Copy link
Copy Markdown
Member

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...

Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork
I'm not sure how reasonable it is to rely on it, though.

@brt-v

Copy link
Copy Markdown

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...
Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork I'm not sure how reasonable it is to rely on it, though.

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.

@JohanMabille

JohanMabille commented Oct 13, 2025

Copy link
Copy Markdown
Contributor

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

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

Copy link
Copy Markdown
Member

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.

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

kou commented Oct 13, 2025

Copy link
Copy Markdown
Member

we still support C++11

Really? I think that we require C++17:

# This ensures that things like c++17 get passed correctly
if(NOTDEFINEDCMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
elseif(${CMAKE_CXX_STANDARD}VERSION_LESS 17)
message(FATAL_ERROR"Cannot set a CMAKE_CXX_STANDARD smaller than 17")
endif()

@pitrou

pitrou commented Oct 13, 2025

Copy link
Copy Markdown
Member

Really? I think that we require C++17:

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)

@jgiannuzzi

jgiannuzzi commented Oct 15, 2025

Copy link
Copy Markdown
ContributorAuthor

#47811 adds a CI job to build the C++ library with msvc arm64. I left it as draft as it depends on this current PR to be merged first. @pitrou what are your latest thoughts on it?

@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.

Please update the README to include the patch that was applied, otherwise LGTM.

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 15, 2025
@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp win

@pitroupitrou added the CI: Extra: C++ Run extra C++ CI label Oct 15, 2025
@github-actions

Copy link
Copy Markdown

Revision: d6c980c

Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-build-vcpkg-winGitHub 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-42-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
verify-rc-source-windowsGitHub Actions
wheel-windows-cp310-cp310-amd64GitHub Actions
wheel-windows-cp311-cp311-amd64GitHub Actions
wheel-windows-cp312-cp312-amd64GitHub Actions
wheel-windows-cp313-cp313-amd64GitHub Actions
wheel-windows-cp313-cp313t-amd64GitHub Actions
wheel-windows-cp314-cp314-amd64GitHub Actions
wheel-windows-cp314-cp314t-amd64GitHub Actions

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Please update the README to include the patch that was applied, otherwise LGTM.

Done! Could you please review again @pitrou?

Comment threadcpp/src/arrow/vendored/pcg/README.md Outdated
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
pitrou self-requested a review October 15, 2025 14:22
@pitrou

Copy link
Copy Markdown
Member

CI failures are unrelated, I'll merge. Thank you @jgiannuzzi !

@pitrou
pitrou merged commit 541cba8 into apache:mainOct 15, 2025
48 checks passed
@pitroupitrou removed the awaiting committer review Awaiting committer review label Oct 15, 2025
@jgiannuzzi
jgiannuzzi deleted the windows-arm64-cpp branch October 15, 2025 15:19
@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pitrou!

@conbench-apache-arrow

Copy link
Copy Markdown

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.

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Nov 5, 2025
… 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>
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
… 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>
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.

5 participants

@jgiannuzzi@kou@pitrou@brt-v@JohanMabille
, '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-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics - #47779

Merged
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp
Oct 15, 2025
Merged

GH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsics#47779
pitrou merged 1 commit into
apache:mainfrom
jgiannuzzi:windows-arm64-cpp

Conversation

@jgiannuzzi

@jgiannuzzijgiannuzzi commented Oct 10, 2025

Copy link
Copy Markdown
Contributor

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-actions

Copy link
Copy Markdown

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?

GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}

or

MINOR: [${COMPONENT}] ${SUMMARY}

See also:

@jgiannuzzijgiannuzzi changed the title [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsGH-47784: [C++] Patch vendored pcg library to enable msvc arm64 intrinsicsOct 10, 2025
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #47784has been automatically assigned in GitHub to PR creator.

@jgiannuzzi
jgiannuzzi marked this pull request as ready for review October 10, 2025 17:35
@kou

kou commented Oct 11, 2025

Copy link
Copy Markdown
Member

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

Copy link
Copy Markdown
Member

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

@pitrou

Copy link
Copy Markdown
Member

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.

What does this patch have to do with xsimd? Am I missing something?

@jgiannuzzi

jgiannuzzi commented Oct 11, 2025

Copy link
Copy Markdown
ContributorAuthor

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 xsimd. I just meant to say that this pcg patch is not enough to build arrow with msvc on arm64 - you also need to set ARROW_SIMD_LEVEL to NONE to switch off ARROW_HAVE_NEON, which in turn will disable the use of xsimd, as it doesn't build with msvc for arm64.

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

I found this PR created in 2021 attempting to solve this: xtensor-stack/xsimd#612.

@pitrou

Copy link
Copy Markdown
Member

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...

Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork
I'm not sure how reasonable it is to rely on it, though.

@brt-v

Copy link
Copy Markdown

Hmm. It seems that https://github.com/imneme/pcg-cpp isn't maintained...
Do we have alternative implementation...?

There is a fork here by @brt-v: https://github.com/brt-v/pcg-cpp?tab=readme-ov-file#about-this-fork I'm not sure how reasonable it is to rely on it, though.

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.

@JohanMabille

JohanMabille commented Oct 13, 2025

Copy link
Copy Markdown
Contributor

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.

@JohanMabille@AntoinePrv@serge-sans-paille Do you think xsimd can support ARM64 intrinsics on MSVC?

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

Copy link
Copy Markdown
Member

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.

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

kou commented Oct 13, 2025

Copy link
Copy Markdown
Member

we still support C++11

Really? I think that we require C++17:

# This ensures that things like c++17 get passed correctly
if(NOTDEFINEDCMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
elseif(${CMAKE_CXX_STANDARD}VERSION_LESS 17)
message(FATAL_ERROR"Cannot set a CMAKE_CXX_STANDARD smaller than 17")
endif()

@pitrou

pitrou commented Oct 13, 2025

Copy link
Copy Markdown
Member

Really? I think that we require C++17:

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)

@jgiannuzzi

jgiannuzzi commented Oct 15, 2025

Copy link
Copy Markdown
ContributorAuthor

#47811 adds a CI job to build the C++ library with msvc arm64. I left it as draft as it depends on this current PR to be merged first. @pitrou what are your latest thoughts on it?

@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.

Please update the README to include the patch that was applied, otherwise LGTM.

@github-actionsgithub-actionsBot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Oct 15, 2025
@pitrou

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp win

@pitroupitrou added the CI: Extra: C++ Run extra C++ CI label Oct 15, 2025
@github-actions

Copy link
Copy Markdown

Revision: d6c980c

Submitted crossbow builds: ursacomputing/crossbow @ actions-c9b3535f37

TaskStatus
example-cpp-minimal-build-staticGitHub Actions
example-cpp-minimal-build-static-system-dependencyGitHub Actions
example-cpp-tutorialGitHub Actions
test-build-cpp-fuzzGitHub Actions
test-build-vcpkg-winGitHub 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-42-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
verify-rc-source-windowsGitHub Actions
wheel-windows-cp310-cp310-amd64GitHub Actions
wheel-windows-cp311-cp311-amd64GitHub Actions
wheel-windows-cp312-cp312-amd64GitHub Actions
wheel-windows-cp313-cp313-amd64GitHub Actions
wheel-windows-cp313-cp313t-amd64GitHub Actions
wheel-windows-cp314-cp314-amd64GitHub Actions
wheel-windows-cp314-cp314t-amd64GitHub Actions

@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Please update the README to include the patch that was applied, otherwise LGTM.

Done! Could you please review again @pitrou?

Comment threadcpp/src/arrow/vendored/pcg/README.md Outdated
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
pitrou self-requested a review October 15, 2025 14:22
@pitrou

Copy link
Copy Markdown
Member

CI failures are unrelated, I'll merge. Thank you @jgiannuzzi !

@pitrou
pitrou merged commit 541cba8 into apache:mainOct 15, 2025
48 checks passed
@pitroupitrou removed the awaiting committer review Awaiting committer review label Oct 15, 2025
@jgiannuzzi
jgiannuzzi deleted the windows-arm64-cpp branch October 15, 2025 15:19
@jgiannuzzi

Copy link
Copy Markdown
ContributorAuthor

Thanks @pitrou!

@conbench-apache-arrow

Copy link
Copy Markdown

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.

zanmato1984 pushed a commit to zanmato1984/arrow that referenced this pull request Nov 5, 2025
… 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>
Mottl pushed a commit to Mottl/arrow that referenced this pull request May 26, 2026
… 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>
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.

5 participants

@jgiannuzzi@kou@pitrou@brt-v@JohanMabille