|Re: [eigen] ARM NEON test results.|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] ARM NEON test results.
- From: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Wed, 3 Mar 2010 07:37:08 -0500
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=VEMwqei7lgTkWn9HlYu8PGxSl7FQ9U2vmBHN7YT0/9A=; b=howU7KDC/SQ3nD/rBLnUu2rBfTOewIWS/Wr5eUwOMHOd7D2M19aKRZ+nRmy+upCuRd A1jPFwmsqw+uFIwQ5cPegyB3B2kz4YbRIm250PdglUIh/S/MxdMcw/nf7KjeIYPhdwSH Qi6APzCHSkI+cvjU+fqO7ZY1MatVRUUg2ozsY=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=prQBtvgx10vZwzQGeEwDyzIxDL+/ytARKiDy+skm0XW7oma3AY1EdxUin6CthLumpD QsXc1FQw4xM7WK5+JobzLYi/vqb+lrLAbtIZQbm9ZpI85fk7/9mxPayK2BrrSGYelKyS 5CHJqMr+HsBJJwykzEKjq4bpG/lCjIFcO4o+g=
Let's take a look at those failing tests. I can see that the dynalloc
test fails for you, which explains the "unaligned array" assert
failures in other tests. Let's fix it first.
Test check_aligned_stack_alloc() failed in
This means that ei_aligned_stack_new returned a non-16-byte aligned
pointer. See Memory.h: on linux it returns alloca(), on other
platforms it is a usual ei_aligned_malloc. So:
* If you are on Linux, this means that alloca() is not properly
implemented on the ARM platform. Let's then edit the check at
Memory.h:425 to exclude ARM.
* If you are on non-Linux, this means that ei_aligned_malloc isn't
returning 16-byte aligned pointers. To investigate this, first of all,
I have a big suspiscion. When the compiler is GCC, we disable
alignment on "exotic" platforms on which we don't vectorize anyway.
#if defined(__GNUC__) && !(defined(__i386__) || defined(__x86_64__) ||
defined(__powerpc__) || defined(__ppc__) || defined(__ia64__))
#define EIGEN_GCC_AND_ARCH_DOESNT_WANT_ALIGNMENT 1
Why GCC? Because we didn't want to have to keep track of preprocessor
symbols for all compilers... that's all.
Anyway, in order to enable vectorization with NEON, assuming that NEON
has the same alignment requirements as SSE, you need to add ARM there.
And then... I expect complications in Memory.h when we overload
operator new. We'd have to check back the archives of this list a
long time ago, but if I remember correctly, overloading new on ARM
is non-trivial as one has to take care of the space needed for
book-keeping. I hope you know better than me...
So, let's take care of that first, before looking at other tests.
2010/3/3 Konstantinos Margaritis <markos@xxxxxxxx>:
> Hi all,
> I sort of finished the PacketMath.h implementation. Well, "sort of" as I get
> some tests fail -though all packetmath tests pass. I would appreciate any hint
> as to what to fix, for that I attach the test results for scalar/NEON and also
> the NEON PacketMath.h.