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
Base64 encoding/decoding using SIMDe #6978
Conversation
…into develop rumprobieren
…uilds to run without weird error messages
…source builds to run without weird error messages" This reverts commit 30e5def.
…\simde\simde\x86\sse.h(3363,39): error C4100: 'i': unreferenced formal parameter ` on MSVC due to external includes since we are using /we4100 and /we4189
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.
General comment before looking at the code:
How bad would it be to have this as a build option? I'm not sure about all its implications yet.
Does this allow linking to an existing simde lib installation? It's on all major package managers as far as I can see.
Also, if we make it default it would make sense to adapt the contrib to build everything (especially Eigen) with that support (as they will benefit as well).
it would mean that we need to keep two implementations around (and make sure we test both of them), i.e. this would double CI costs, if done properly.
Good point! I will add that.
This probably needs careful consideration for each individual library, since this may have implications on their tests and we may need to pass these things into the respective build systems. But that can be done, yes. |
The reason is mainly conda: |
I am not sure if I understand all implications.
|
Since we will have to allow for an external SIMDe anyway, I don't think there is an advantage. We'd even have to conditionally change the way we include SIMDe headers, since an external SIMDe will use different names then.
This may work for Base64. Not sure about other potential applications. I can see why hiding the SIMDe headers from the OpenMS interface is beneficial, but if we allow for a custom external SIMDe, the problem is somewhat reduced.
Yes, that's easy. Just use the compiler flags, as we already do: |
If you could confirm with the conda and debian guys that this is ok, I would be willing to merge if it passes. |
rebuild jenkins |
rebuild jenkins |
rebuild jenkins |
this is ready for merge. Please have a final look :) |
btw: Debian devs said, we should just mention SSE in Changelog/Readme. That's enough for package creation. |
tests pass |
Description
faster de&encoding of any XML data which contains base64 strings, e.g. mzML.
FileConverter is about 8-10% faster when loading+storing an mzML file on both Linux and Windows.
We now require some advanced instruction sets for x64 CPUs: SSE3 (g++/clang) or AVX (MSVC compiler for Windows); and NEON for ARM64 CPUs.
AVX was introduced 2013 - we may exclude some really old CPU's for Windows here, but everybody else should see significant benefits.
SSE3 was introduced 2004 -- not a problem here.
Checklist
How can I get additional information on failed tests during CI
Click to expand
If your PR is failing you can check outIf you click in the column that lists the failed tests you will get detailed error messages.
Advanced commands (admins / reviewer only)
Click to expand
/reformat
(experimental) applies the clang-format style changes as additional commit. Note: your branch must have a different name (e.g., yourrepo:feature/XYZ) than the receiving branch (e.g., OpenMS:develop). Otherwise, reformat fails to push.rebuild jenkins
will retrigger Jenkins-based CI builds