Hi Martin, > On 13 Jul 2017, at 09:13, Martin Kronbichler <kronbichler.mar...@gmail.com> > wrote: > >> >> 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.
this is a matrix-free level operator which lives in MGLevelObject. Indeed, internally it stores objects in std::vector of shared pointers. > Alternatively you need to wrap the member that is of type VectorizedArray > into an t<VectorizedArray>. This worked, thanks a lot! While on the topic of alignment, do I need to be more careful about using template <typename number> struct QPData { Table<2, VectorizedArray<number> > values; } QPData<double> qp_data; as a member variable in my class? > >> >> >│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 indeed: (gdb) print $rbx $1 = 22305328 Thanks a lot for detailed explanation. Kind regards, Denis. -- 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.