Re: [eigen] NEON remaining failing tests

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Hi,

Some comments on some of these.

2010/3/4 Konstantinos Margaritis <markos@xxxxxxxx>:
> Hi again,
>
> here are the remaining failing tests with NEON. Regarding vectorization_logic,
> I'll try a fix Benoit suggested yesterday and see if it works.
>
> ./adjoint_6
> Initializing random number generator with seed 1267698370
> Repeating each test 10 times
> Test adjoint(MatrixXf(21, 21)) failed in "/home/oem/eigen/test/adjoint.cpp"
> (77)
>    ei_isApprox(v1.dot(square * v2), (square.adjoint() * v1).dot(v2),
> largerEps)

first fix all product_* tests, then come back to this.


>
> ./cholesky_4
> Initializing random number generator with seed 1267698407
> Repeating each test 10 times
> Test cholesky(Matrix3f()) failed in "/home/oem/eigen/test/cholesky.cpp" (106)
>    test_ei_isApprox(symm, cholup.reconstructedMatrix())

first fix all product_* tests, then come back to this.


>
> ./cwiseop_5
> Initializing random number generator with seed 1267698434
> Repeating each test 10 times
> cwiseop_5: /home/oem/eigen/Eigen/src/Core/arch/NEON/PacketMath.h:115: Packet
> Eigen::ei_pdiv(const Packet&, const Packet&) [with Packet = __builtin_neon_si
> __vector__]: Assertion `false && "packet integer division are not supported by
> NEON"' failed.
> Aborted

if some platforms can't vectorize integer division, we should provide
a way for them to say it and use a scalar path.

It's pretty simple actually. integer division is going to be
implemented somewhere as a functor in Functors.h. It's probably called
ei_scalar_div_op or ei_scalar_quotient_op... there, at the place where
we say that it has packet access, you just have to add a #ifndef
ARM_NEON... same for AltiVec by the way.

>
> ./eigensolver_generic_1
> Initializing random number generator with seed 1267698438
> Repeating each test 10 times
> Test eigensolver(Matrix4f()) failed in
> "/home/oem/eigen/test/eigensolver_generic.cpp" (53)
>    test_ei_isApprox(symmA * ei0.pseudoEigenvectors(),
> ei0.pseudoEigenvectors() * ei0.pseudoEigenvalueMatrix())

first fix all product_* tests, then come back to this.

>
> ./eigensolver_selfadjoint_3
> Initializing random number generator with seed 1267698438
> Repeating each test 10 times
> Test selfadjointeigensolver(MatrixXf(10,10)) failed in
> "/home/oem/eigen/test/eigensolver_selfadjoint.cpp" (105)
>    (symmA * eiSymm.eigenvectors()).isApprox( eiSymm.eigenvectors() *
> eiSymm.eigenvalues().asDiagonal(), largerEps)

first fix all product_* tests, then come back to this.

>
> ./geo_quaternion_1
> Initializing random number generator with seed 1267698439
> Repeating each test 10 times
> geo_quaternion_1: /home/oem/eigen/Eigen/src/Core/MapBase.h:152: void
> Eigen::MapBase<Derived, Base>::checkSanity() const [with Derived =
> Eigen::Map<Eigen::Matrix<float, 4, 1, 0, 4, 1>, 1, Eigen::Stride<0, 0> >, Base
> = Eigen::MatrixBase<Eigen::Map<Eigen::Matrix<float, 4, 1, 0, 4, 1>, 1,
> Eigen::Stride<0, 0> > >]: Assertion `((!
> (ei_traits<Derived>::Flags&AlignedBit)) || ((size_t(m_data)&0xf)==0)) && "data
> is not aligned"' failed.
> Aborted

Forgot about this assertion, indeed at MapBase.h:152. Enclose it in a
platform #ifdef and write a big FIXME comment.

> ./product_extra_1
> Initializing random number generator with seed 1267698868
> Repeating each test 10 times
> Test product_extra(MatrixXf(ei_random<int>(2,320), ei_random<int>(2,320)))
> failed in "/home/oem/eigen/test/product_extra.cpp" (101)
>    test_ei_isApprox((s1 * v1.conjugate()) * (-m1.conjugate() * s2), (s1 *
> v1.conjugate()).eval() * (-m1.conjugate()*s2).eval())

Fix the product_large test first:

>
> ./product_large_1
> Initializing random number generator with seed 1267698875
> Repeating each test 10 times
> Test product(MatrixXf(ei_random<int>(1,320), ei_random<int>(1,320))) failed in
> "/home/oem/eigen/test/product.h" (134)
>    test_ei_isApprox(tm1.transpose() * v1, m1.transpose() * v1)

Yes, fix this one first. No idea why it's failing though :/

Benoit



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/