forked from svenpeter42/fastfilters
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add arm 64 build #8
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
added USE_SIMDE_ON_ARM variable, that activates SIMDE headers if set
* conditional execution of compilation flags for non-simde builds * only include the most "advanced" instruction variants on arm (so exclude anything avx if avx2 or avx+fma is there. * cpu.c variants for intel (arm will be added later) copied dynamically
with "fake" functions that all return true if queried for cpu features. With SIMDE we want to use the most "advanced" versions always, so all features are enabled at runtime.
for arm we can omit all the magic that compiles for different kinds of simd instruction sets like avx, avx2 is done for intel. For arm we use simde with the avx2 instruction set versions. Hence, this commit adds two switches to the cmake interface: * `USE_SIMDE_ON_ARM`: to activate using SIMDE to translate to whatever target architecture (that is supported) * `APPLE_ARM64`: for explicit clang targeting m1/m2 compilation flags foreseeing that it might be slightly different for arch64 Then, throughout the code, there are now splattered `_USE_SIMDE_ON_ARM_` conditionals. E.g., the various `*_init` functions that would check for certain processor capabilities at runtime to activate the most effective code path. These all point to the avx2 versions when SIMDE is active. All in all not very pretty - might want to clean this up a bit in the future...
k-dominik
commented
Mar 4, 2024
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I had another look at this after almost a year... It's ugly ;) but it seems to work. Maybe over summer there is some quiet time to clean it up. But for now it's more important to build from the same source for all platforms.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary:
simde
as submoduleDetails:
fastfilters
is pretty flexible wrt to compilation with different capabilities. For theosx-arm64
builds, this PR sets all capabilities to1
and let'ssimde
handle the translation from x86 assembly. Hence the conditional includes in the code (#ifdef _USE_SIMDE_ON_ARM_
).CMakeLists.txt
got a lot of conditional behavior now, that relies onAPPLE_ARM64
: to activate general compiler flags for arm64 processorsUSE_SIMDE_ON_ARM
: to switch onsimde
headers, and also to bypass all processor capability checking and enabling all capabilities. Furthermore this excludes the "lower capability" files for arm (so if something was available with avx and avx2 simd, then only avx2 is compiled for the arm build.