Aligned Member in PardisoImpl
Submitted by brian
Assigned to Nobody
Link to original bugzilla bug (#498)
Version: 3.1
Operating system: Windows
Description
I've run into the following problem. Eigen PardisoSupport contains a 64x1 int member array, which eigen wants to align in memory. That fails for me (at least under windows). One possible solution is given below, simply add Eigen::DontAlign, because this is anyhow a parameter array, which is never used in compute intense calculations.
I hope this helps,
Brian
--- a/libs/alg/math/include/Eigen/src/PardisoSupport/PardisoSupport.h
+++ b/libs/alg/math/include/Eigen/src/PardisoSupport/PardisoSupport.h
@@ -100,6 +100,8 @@ class PardisoImpl
{
typedef internal::pardiso_traits<Derived> Traits;
public:
- //EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
- typedef typename Traits::MatrixType MatrixType;
typedef typename Traits::Scalar Scalar;
typedef typename Traits::RealScalar RealScalar;
@@ -142,7 +144,7 @@ class PardisoImpl
/** \warning for advanced usage only.
* \returns a reference to the parameter array controlling PARDISO.
* See the PARDISO manual to know how to use it. */
- Array<Index,64,1>& pardisoParameterArray()
- Array<Index,64,1,Eigen::DontAlign>& pardisoParameterArray()
{
return m_iparm;
}
@@ -295,7 +297,7 @@ class PardisoImpl
bool m_initialized, m_analysisIsOk, m_factorizationIsOk;
Index m_type, m_msglvl;
mutable void *m_pt[64];
- mutable Array<Index,64,1> m_iparm;
- mutable Array<Index,64,1,Eigen::DontAlign> m_iparm;
mutable IntColVectorType m_perm;
Index m_size;
@@ -488,6 +490,7 @@ class PardisoLLT : public PardisoImpl< PardisoLLT<MatrixType
friend class PardisoImpl< PardisoLLT<MatrixType,_UpLo> >;
public:
-
//EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
enum { UpLo = _UpLo };
using Base::compute;