-
Notifications
You must be signed in to change notification settings - Fork 144
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
Filter out SSE usage for non-x86_64. #1147
base: master
Are you sure you want to change the base?
Conversation
- Symbols are still maintained as they are used in a mnumber of places. - SSE should be set to 0 for non-x86_x64 so the code paths expecting SSE should never be called.
I could not find a test suite for verifying the functionality of this PR. We may also want to error on using the SEE-methods on non-SSE architectures to avoid silent failures. However, the correct solution is probably to use https://github.com/DLTcollab/sse2neon as a drop-in replacement for |
First, thank you for this PR. It is directly addressing a problem I don't have the expertise to address. I'll also be honest. I am nervous about pulling in code that I cannot really test. It's not that this code can't be tested, it can, but I don't at this point know how to test whether this fixes the ARM issues, and I definitely don't know how to test whether it makes things work on ARM under different user options (e.g. Thoughts? One possibility would be creating an ARM branch for now, with the expectation that as people use it and user experiences confirm (or not) that it works that it could be pulled into the main branch later. |
I think there are two things here that should be looked at.
As for testing on aarch64/arm64, that is hard to do without access to the platform. However, usage of arm64 is growing in the HPC world, and as dada2 is shipped as part of https://github.com/easybuilders/easybuild-easyconfigs/tree/develop/easybuild/easyconfigs/r/R-bundle-Bioconductor under the EasyBuild umbrella, finding testers should be quite doable. EasyBuild has a number of users who have HPC clusters on aarch64/arm64. As for maintaining a secondary branch, that is a development choice that may or may not be a good idea. My main concern is that the branch becomes stale and diverges enough that it in practice will have limited value. Working to merge something like sse2neon should be drop-in, even on x86_64, and thus limit the amount of overhead involved. |
@benjjneb @terjekv I'd be happy to assist in testing this locally using Apple M1, and I believe we may have some access to arm64 nodes on our HPC. I guess the question is how you want tests run, and whether there are some points like multithreading not covered under any CI-based testing that need checking. |
I've been expecting to replace my laptop this year with a new M1 Macbook, at which point I'll easily be able to test and (probably) pull this change in. Thanks for the offer though @cjfields , and I may take you up on it if it becomes clear that I won't have my hands on an M1 laptop for a while. There are a couple of specific performance things I'd like to inspect specific to the vectorized parts of the code that definitely aren't in the CI testing right now. |
@benjjneb sure, no worries! |
Hello All, I still have the error for M1 Mac using the sse2 filtered branch (remotes::install_github("terjekv/dada2")):
It looks like the Rmain.cpp line 7, void cpuid is still the problem. Any idea? Thanks, Jianshu |
@jianshu93 Based on https://opensource.apple.com/source/WTF/WTF-7601.1.46.42/wtf/Platform.h.auto.html we might need to check for |
in a mnumber of places.
code paths expecting SSE should never be called.
(Hopefully) fixes #475