mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Reverted the definition of the EIGEN_ALIGN to its former meaning (i.e. a boolean)
Created a new EIGEN_ALIGN_BYTES define to encode how the data should be aligned Fixed a few remaining alignment issues exposed when the Eigen code is compiled with avx enabled. Created a new EIGEN_ALIGN_DEFAULT define, which is set to the minimum alignment value required for the chosen instruction set. Use this value instead of EIGEN_ALIGN32 to preserve the existing alignment on SSE/Altivec/Neon.
This commit is contained in:
@@ -66,9 +66,9 @@ template<typename Scalar> void parametrizedline_alignment()
|
||||
typedef ParametrizedLine<Scalar,4,AutoAlign> Line4a;
|
||||
typedef ParametrizedLine<Scalar,4,DontAlign> Line4u;
|
||||
|
||||
EIGEN_ALIGN16 Scalar array1[8];
|
||||
EIGEN_ALIGN16 Scalar array2[8];
|
||||
EIGEN_ALIGN16 Scalar array3[8+1];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array1[8];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array2[8];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array3[8+1];
|
||||
Scalar* array3u = array3+1;
|
||||
|
||||
Line4a *p1 = ::new(reinterpret_cast<void*>(array1)) Line4a;
|
||||
|
||||
@@ -26,7 +26,7 @@ template<typename VectorType> void map_class_vector(const VectorType& m)
|
||||
Scalar* array1 = internal::aligned_new<Scalar>(size);
|
||||
Scalar* array2 = internal::aligned_new<Scalar>(size);
|
||||
Scalar* array3 = new Scalar[size+1];
|
||||
Scalar* array3unaligned = size_t(array3)%16 == 0 ? array3+1 : array3;
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
Scalar array4[EIGEN_TESTMAP_MAX_SIZE];
|
||||
|
||||
Map<VectorType, Aligned>(array1, size) = VectorType::Random(size);
|
||||
@@ -64,7 +64,7 @@ template<typename MatrixType> void map_class_matrix(const MatrixType& m)
|
||||
for(int i = 0; i < size; i++) array2[i] = Scalar(1);
|
||||
Scalar* array3 = new Scalar[size+1];
|
||||
for(int i = 0; i < size+1; i++) array3[i] = Scalar(1);
|
||||
Scalar* array3unaligned = size_t(array3)%16 == 0 ? array3+1 : array3;
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
Map<MatrixType, Aligned>(array1, rows, cols) = MatrixType::Ones(rows,cols);
|
||||
Map<MatrixType>(array2, rows, cols) = Map<MatrixType>(array1, rows, cols);
|
||||
Map<MatrixType>(array3unaligned, rows, cols) = Map<MatrixType>(array1, rows, cols);
|
||||
@@ -90,7 +90,7 @@ template<typename VectorType> void map_static_methods(const VectorType& m)
|
||||
Scalar* array1 = internal::aligned_new<Scalar>(size);
|
||||
Scalar* array2 = internal::aligned_new<Scalar>(size);
|
||||
Scalar* array3 = new Scalar[size+1];
|
||||
Scalar* array3unaligned = size_t(array3)%16 == 0 ? array3+1 : array3;
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
|
||||
VectorType::MapAligned(array1, size) = VectorType::Random(size);
|
||||
VectorType::Map(array2, size) = VectorType::Map(array1, size);
|
||||
|
||||
@@ -106,10 +106,10 @@ template<typename Scalar> void packetmath()
|
||||
|
||||
const int max_size = PacketSize > 4 ? PacketSize : 4;
|
||||
const int size = PacketSize*max_size;
|
||||
EIGEN_ALIGN32 Scalar data1[size];
|
||||
EIGEN_ALIGN32 Scalar data2[size];
|
||||
EIGEN_ALIGN32 Packet packets[PacketSize*2];
|
||||
EIGEN_ALIGN32 Scalar ref[size];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[size];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data2[size];
|
||||
EIGEN_ALIGN_DEFAULT Packet packets[PacketSize*2];
|
||||
EIGEN_ALIGN_DEFAULT Scalar ref[size];
|
||||
RealScalar refvalue = 0;
|
||||
for (int i=0; i<size; ++i)
|
||||
{
|
||||
@@ -217,9 +217,9 @@ template<typename Scalar> void packetmath_real()
|
||||
const int PacketSize = internal::packet_traits<Scalar>::size;
|
||||
|
||||
const int size = PacketSize*4;
|
||||
EIGEN_ALIGN32 Scalar data1[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN32 Scalar data2[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN32 Scalar ref[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data2[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar ref[internal::packet_traits<Scalar>::size*4];
|
||||
|
||||
for (int i=0; i<size; ++i)
|
||||
{
|
||||
@@ -262,9 +262,9 @@ template<typename Scalar> void packetmath_notcomplex()
|
||||
typedef typename internal::packet_traits<Scalar>::type Packet;
|
||||
const int PacketSize = internal::packet_traits<Scalar>::size;
|
||||
|
||||
EIGEN_ALIGN32 Scalar data1[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN32 Scalar data2[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN32 Scalar ref[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data2[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar ref[internal::packet_traits<Scalar>::size*4];
|
||||
|
||||
Array<Scalar,Dynamic,1>::Map(data1, internal::packet_traits<Scalar>::size*4).setRandom();
|
||||
|
||||
@@ -322,10 +322,10 @@ template<typename Scalar> void packetmath_complex()
|
||||
const int PacketSize = internal::packet_traits<Scalar>::size;
|
||||
|
||||
const int size = PacketSize*4;
|
||||
EIGEN_ALIGN32 Scalar data1[PacketSize*4];
|
||||
EIGEN_ALIGN32 Scalar data2[PacketSize*4];
|
||||
EIGEN_ALIGN32 Scalar ref[PacketSize*4];
|
||||
EIGEN_ALIGN32 Scalar pval[PacketSize*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[PacketSize*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data2[PacketSize*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar ref[PacketSize*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar pval[PacketSize*4];
|
||||
|
||||
for (int i=0; i<size; ++i)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user