New user self-registration is disabled due to spam. Please email eigen-core-team @ lists.tuxfamily.org if you need an account.
Before reporting a bug, please make sure that your Eigen version is up-to-date!
Bug 498 - Aligned Member in PardisoImpl
Summary: Aligned Member in PardisoImpl
Status: NEW
Alias: None
Product: Eigen
Classification: Unclassified
Component: Sparse (show other bugs)
Version: 3.1
Hardware: All Windows
: Normal Unknown
Assignee: Nobody
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-08-15 14:48 UTC by brian
Modified: 2012-08-15 14:48 UTC (History)
0 users



Attachments

Description brian 2012-08-15 14:48:46 UTC
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;

Note You need to log in before you can comment on or make changes to this bug.