aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2011-12-09 10:40:35 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2011-12-09 10:40:35 +0100
commit10447a7b57960b3315c419b7081c1cc273df3518 (patch)
tree876943470acddf65be17e7eac9cda3625352318f
parent43cdd242d0e34aa05e368b3d894c1041aa2cd771 (diff)
mv blas.h to src/misc such that it would be possible to use any blas libraries,
however, this requires some more works: - add const qualifiers in the declarations of blas.h - add the possibility to add a suffix to blas function names
-rw-r--r--Eigen/src/Core/util/MKL_support.h31
-rw-r--r--Eigen/src/misc/blas.h (renamed from blas/blas.h)9
-rw-r--r--blas/common.h10
3 files changed, 30 insertions, 20 deletions
diff --git a/Eigen/src/Core/util/MKL_support.h b/Eigen/src/Core/util/MKL_support.h
index 56a03fa32..d605fc844 100644
--- a/Eigen/src/Core/util/MKL_support.h
+++ b/Eigen/src/Core/util/MKL_support.h
@@ -53,9 +53,19 @@
#include <mkl.h>
#include <mkl_lapacke.h>
-
#define EIGEN_MKL_VML_THRESHOLD 128
+#elif defined EIGEN_USE_BLAS
+
+#error Currently EIGEN_USE_BLAS requires Intel MKL. If you want to use MKL's BLAS and only it, then define EIGEN_USE_MKL too.
+
+#include "../../misc/blas.h"
+#define MKL_INT int
+
+#endif
+
+#if defined(EIGEN_USE_MKL) || defined(EIGEN_USE_BLAS)
+
namespace Eigen {
typedef std::complex<double> dcomplex;
@@ -68,6 +78,12 @@ static inline void assign_scalar_eig2mkl(MKLType& mklScalar, const EigenType& ei
mklScalar=eigenScalar;
}
+template<typename MKLType, typename EigenType>
+static inline void assign_conj_scalar_eig2mkl(MKLType& mklScalar, const EigenType& eigenScalar) {
+ mklScalar=eigenScalar;
+}
+
+#ifdef EIGEN_USE_MKL
template <>
inline void assign_scalar_eig2mkl<MKL_Complex16,dcomplex>(MKL_Complex16& mklScalar, const dcomplex& eigenScalar) {
mklScalar.real=eigenScalar.real();
@@ -80,11 +96,6 @@ inline void assign_scalar_eig2mkl<MKL_Complex8,scomplex>(MKL_Complex8& mklScalar
mklScalar.imag=eigenScalar.imag();
}
-template<typename MKLType, typename EigenType>
-static inline void assign_conj_scalar_eig2mkl(MKLType& mklScalar, const EigenType& eigenScalar) {
- mklScalar=eigenScalar;
-}
-
template <>
inline void assign_conj_scalar_eig2mkl<MKL_Complex16,dcomplex>(MKL_Complex16& mklScalar, const dcomplex& eigenScalar) {
mklScalar.real=eigenScalar.real();
@@ -97,14 +108,12 @@ inline void assign_conj_scalar_eig2mkl<MKL_Complex8,scomplex>(MKL_Complex8& mklS
mklScalar.imag=-eigenScalar.imag();
}
+#endif
+
} // end namespace internal
} // end namespace Eigen
-#elif defined EIGEN_USE_BLAS
-
-#include "../../misc/blas.h"
-
#endif
-#endif
+#endif // EIGEN_MKL_SUPPORT_H
diff --git a/blas/blas.h b/Eigen/src/misc/blas.h
index 9497ea945..6fce99ed5 100644
--- a/blas/blas.h
+++ b/Eigen/src/misc/blas.h
@@ -1,6 +1,11 @@
#ifndef BLAS_H
#define BLAS_H
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
#define BLASFUNC(FUNC) FUNC##_
#ifdef __WIN64__
@@ -646,4 +651,8 @@ int BLASFUNC(cpotri)(char *, int *, float *, int *, int *);
int BLASFUNC(zpotri)(char *, int *, double *, int *, int *);
int BLASFUNC(xpotri)(char *, int *, double *, int *, int *);
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/blas/common.h b/blas/common.h
index 714bce574..ada833a90 100644
--- a/blas/common.h
+++ b/blas/common.h
@@ -32,16 +32,8 @@
#error the token SCALAR must be defined to compile this file
#endif
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include "blas.h"
+#include <Eigen/src/misc/blas.h>
-#ifdef __cplusplus
-}
-#endif
#define NOTR 0
#define TR 1