-
-
Notifications
You must be signed in to change notification settings - Fork 83
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
Problem while building cblosc2 on ARM64 #87
Comments
Apparently it has to be C11, not C99 ... it compiles a bit further |
The auto-guess of the version of the glibc apparently is the root of the bug ... |
So are you finally able to compile blosc2 in your pine64 box? |
On Thu, 12 Sep 2019 11:40:24 -0700 Francesc Alted ***@***.***> wrote:
So are you finally able to compile blosc2 in your pine64 box?
I had to modify quite a bit the source code... enforcing the C11 spec was not enough.
Instead, using a "#define __USE_POSIX199309" before including time.h helped.
In time.h there is:
#if defined __USE_POSIX199309 || defined __USE_ISOC11
# include <bits/types/struct_timespec.h>
#endif
I have no idea on how to fix this "properly" as all computers were
running the same operating system. Oddities of the arm64 ?
I did some benchmarking of filters, focusing of the "shuffle" and
"bitshuffle", on different architectures in order to check the
effectiveness of SIMD implementations. x86_64 (SSE2 & AVX2) and arm64
(NEON) for now and hopefully ppc64le (ALTIVEC) soon, correlated with
the bloc size and the last level cache size of the processor.
Quick conclusion are that SSE2 helps a lot, AVX2 is not so much faster
if at all. For NEON it is even more complicated: the results are
extremely dependent on the cache size. I can share them with you if you
are interested.
Just a comment on the API which is not exposed to the public:
While the API looks consistent for shuffle, I think it is less
consistent for bitshuffle. For example neon implementation is called:
bitshuffle_neon(...) which is rather natural, but the generic, sse2 and avx2
implementations are called: bshuf_trans_bit_elem_scal(...) _sse2 and _avx2.
Is there are reason for not keeping the "_generic" and the same base
for the function name ? It would be perfect if the signatures could be
similar but the bitshuffle takes an extra buffer argument. So maybe it
is not worth changing this.
Cheers,
Jerome
|
Ha, it is curious because I don't remeber having this problems with Regarding |
Maybe it is debian ... I just got access (again) to the power9 with debian 10 and it is the same issue. I'll check twice on amd64 and arm32 but surprisingly it works there without complain. About the unconsistency of the private API, I noticed it only because I benchmarked those functions. |
Coming back on this "failed to build from scratch", I tested on the power9 and arm64:
And guess what? both are properly defined. May the error be in the cmake default options ? |
I tested if "features.h" was properly included or not and apparently it was. The error is somewhere else. |
Hello, maybe the best would be contact the maintainer of c-blosc in Debian, and request an upload of the beta version of the currently beta version into experimental.
This wait it will be build on all our architectures, and we could have a nice visibility of the portability of the code.
https://tracker.debian.org/pkg/c-blosc
Cheers
Fred
|
I just "debootstrapped" a ubuntu 18.04 system (gcc7) on ppc64le and the issue is apparently the same. It should not be a debian issue. I will git-bisect. |
It compiles with clang7 but neither with gcc7 nor gcc8. The problem is apparently in the expand of the macros. It looks like std=c99 is not having effect, or at least not as much as on amd64 |
PR under creation |
* Prevent "FTBFS" on linux arm64 and ppc64le close #87 * The byte-shuffling for 2-bytes data-type works on altivec * Fix the 4-bytes object shuffle Correct the style as well according to guidelines. Still WIP * some more refactoring * implementation for 16-byte wide shuffle * Make code resilient to unaligned read access as well * unshuffle works for 16, 32 and 64 bits data-type. 128bit datatype and larger are still under dev' * re-implement SSE2 -> altivec * First SSE2-free version * work on basic porting of bitshuffle to VSX * translation of simple functions SSE -> VSX * simplfy the reading using vec_xl instead of vec_ld * Use VSX load & store everywhere. Make the code much more readable and simpler * working on the VSX vectorisation of the bitshuffle algorithm ... * tests are again passing... * bitunshuffle implemented in altivec Treating data after the vectorized part remains to be implemented.
Hi,
I am testing blosc2 on ARM64, actually the Pine64. Not a super powerful board but it is 64bits and has neon SIMD and this is what I am interested in.
https://www.pine64.org/devices/single-board-computers/pine-a64/
The operating system is debian10 hence kernel 4.19 and gcc8.3
Here is the error message, it is likely the expectations for following the standard is slightly different from one architecture to another ... but I am not that fluent in C:
The text was updated successfully, but these errors were encountered: