Summary: | Alignment on 16 bytes, whereas AVX requires 32? | ||
---|---|---|---|
Product: | Eigen | Reporter: | Thijs Withaar <thijs.withaar> |
Component: | Core - general | Assignee: | Nobody <eigen.nobody> |
Status: | RESOLVED INVALID | ||
Severity: | Crash | CC: | chtz, gael.guennebaud, jacob.benoit.1 |
Priority: | Highest | ||
Version: | 3.3 (current stable) | ||
Hardware: | x86 - AVX | ||
OS: | Windows | ||
Whiteboard: | |||
Bug Depends on: | |||
Bug Blocks: | 558 |
Description
Thijs Withaar
2016-10-19 14:44:24 UTC
I'm not sure, especially since the gcc and clang paths have the same condition (i.e. `== 16`). And as far as I remember the essential unit tests all work with gcc and clang and AVX enabled (currently I'm on a non-AVX cpu, I'll try that when I get home). This is strange because EIGEN_MALLOC_ALREADY_ALIGNED is defined only if EIGEN_DEFAULT_ALIGN_BYTES == 16 (Memory.h, line 52), and in Macros.h line 772 we have: #if EIGEN_IDEAL_MAX_ALIGN_BYTES > EIGEN_MAX_ALIGN_BYTES #define EIGEN_DEFAULT_ALIGN_BYTES EIGEN_IDEAL_MAX_ALIGN_BYTES #else #define EIGEN_DEFAULT_ALIGN_BYTES EIGEN_MAX_ALIGN_BYTES #endif so in your case, EIGEN_DEFAULT_ALIGN_BYTES should be defined to 32, and thus EIGEN_MALLOC_ALREADY_ALIGNED would be disabled. Are you sure you are using 3.3rc1? Could you check the value of EIGEN_DEFAULT_ALIGN_BYTES? Using your suggestions: EIGEN_DEFAULT_ALIGN_BYTES was set correctly (32) for the static lib of which the code is part. The application itself, however, did not have the AVX instruction set enabled. This caused the functions in the .lib to use the non-32 byte version of the allocation routines. -- GitLab Migration Automatic Message -- This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1331. |