Hi Denis,


no, it's just a member variable VectorizedArray:

VectorizedArray<value_type> a;

But then the class/struct that holds this member variable is not properly aligned, you probably have it inside an std::vector or allocated it with 'new'. You will need to put it into an AlignedVector or similar type. Alternatively you need to wrap the member that is of type VectorizedArray into an AlignedVector<VectorizedArray>.


|
>│0x7ffff73913cb <Operator<3, 2, 3, LA::d::Vector<float> >::Operator()+35> vmovaps %ymm0,0xe0(%rbx)
|

This is the offending instruction. The compiler tries to store to the address given by an offset of 0xe0 (224 bytes) to the value in %rbx, using an 'aligned' store operation (vmovAps) that assumes 32 byte alignment. If you print the value of %rbx (in gdb with 'print $rbx'), I'm pretty sure you get an address that is divisible by 16 but not by 32. It is a pity that the compiler / API of the intrinsics forces the compiler to use an aligned access instruction whenever there is a variable of type VectorizedArray but there's nothing we can change and we have to live with that...

Best,
Martin

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to