Skip to content
GitLab
Explore
Sign in
Hide whitespace changes
Inline
Side-by-side
Some changes are not shown.
For a faster browsing experience, only
1 of 181+
files are shown. Download one of the files below to see all changes.
external/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_
MKL
.h
→
external/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_
BLAS
.h
View file @
a394b22a
...
...
@@ -25,13 +25,13 @@
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
********************************************************************************
* Content : Eigen bindings to
Intel(R) MKL
* Content : Eigen bindings to
BLAS F77
* Self adjoint matrix * matrix product functionality based on ?SYMM/?HEMM.
********************************************************************************
*/
#ifndef EIGEN_SELFADJOINT_MATRIX_MATRIX_
MKL
_H
#define EIGEN_SELFADJOINT_MATRIX_MATRIX_
MKL
_H
#ifndef EIGEN_SELFADJOINT_MATRIX_MATRIX_
BLAS
_H
#define EIGEN_SELFADJOINT_MATRIX_MATRIX_
BLAS
_H
namespace
Eigen
{
...
...
@@ -40,7 +40,7 @@ namespace internal {
/* Optimized selfadjoint matrix * matrix (?SYMM/?HEMM) product */
#define EIGEN_
MKL
_SYMM_L(EIGTYPE,
MKL
TYPE, EIGPREFIX,
MKL
PREFIX) \
#define EIGEN_
BLAS
_SYMM_L(EIGTYPE,
BLAS
TYPE, EIGPREFIX,
BLAS
PREFIX) \
template <typename Index, \
int LhsStorageOrder, bool ConjugateLhs, \
int RhsStorageOrder, bool ConjugateRhs> \
...
...
@@ -52,28 +52,23 @@ struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,true,ConjugateLh
const EIGTYPE* _lhs, Index lhsStride, \
const EIGTYPE* _rhs, Index rhsStride, \
EIGTYPE* res, Index resStride, \
EIGTYPE alpha) \
EIGTYPE alpha
, level3_blocking<EIGTYPE, EIGTYPE>&
/*blocking*/
) \
{ \
char side='L', uplo='L'; \
MKL_INT
m, n, lda, ldb, ldc; \
BlasIndex
m, n, lda, ldb, ldc; \
const EIGTYPE *a, *b; \
MKL
TYPE
alpha_,
beta
_
; \
EIG
TYPE beta
(1)
; \
MatrixX##EIGPREFIX b_tmp; \
EIGTYPE myone(1);\
\
/* Set transpose options */
\
/* Set m, n, k */
\
m = (MKL_INT)rows; \
n = (MKL_INT)cols; \
\
/* Set alpha_ & beta_ */
\
assign_scalar_eig2mkl(alpha_, alpha); \
assign_scalar_eig2mkl(beta_, myone); \
m = convert_index<BlasIndex>(rows); \
n = convert_index<BlasIndex>(cols); \
\
/* Set lda, ldb, ldc */
\
lda =
(MKL_INT)
lhsStride; \
ldb =
(MKL_INT)
rhsStride; \
ldc =
(MKL_INT)
resStride; \
lda =
convert_index<BlasIndex>(
lhsStride
)
; \
ldb =
convert_index<BlasIndex>(
rhsStride
)
; \
ldc =
convert_index<BlasIndex>(
resStride
)
; \
\
/* Set a, b, c */
\
if (LhsStorageOrder==RowMajor) uplo='U'; \
...
...
@@ -83,16 +78,16 @@ struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,true,ConjugateLh
Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > rhs(_rhs,n,m,OuterStride<>(rhsStride)); \
b_tmp = rhs.adjoint(); \
b = b_tmp.data(); \
ldb = b_tmp.outerStride(); \
ldb =
convert_index<BlasIndex>(
b_tmp.outerStride()
)
; \
} else b = _rhs; \
\
MKL
PREFIX##symm(&side, &uplo, &m, &n, &alpha
_
, (const
MKL
TYPE*)a, &lda, (const
MKL
TYPE*)b, &ldb, &beta
_
, (
MKL
TYPE*)res, &ldc); \
BLAS
PREFIX##symm
_
(&side, &uplo, &m, &n, &
numext::real_ref(
alpha
)
, (const
BLAS
TYPE*)a, &lda, (const
BLAS
TYPE*)b, &ldb, &
numext::real_ref(
beta
)
, (
BLAS
TYPE*)res, &ldc); \
\
} \
};
#define EIGEN_
MKL
_HEMM_L(EIGTYPE,
MKL
TYPE, EIGPREFIX,
MKL
PREFIX) \
#define EIGEN_
BLAS
_HEMM_L(EIGTYPE,
BLAS
TYPE, EIGPREFIX,
BLAS
PREFIX) \
template <typename Index, \
int LhsStorageOrder, bool ConjugateLhs, \
int RhsStorageOrder, bool ConjugateRhs> \
...
...
@@ -103,36 +98,31 @@ struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,true,ConjugateLh
const EIGTYPE* _lhs, Index lhsStride, \
const EIGTYPE* _rhs, Index rhsStride, \
EIGTYPE* res, Index resStride, \
EIGTYPE alpha) \
EIGTYPE alpha
, level3_blocking<EIGTYPE, EIGTYPE>&
/*blocking*/
) \
{ \
char side='L', uplo='L'; \
MKL_INT
m, n, lda, ldb, ldc; \
BlasIndex
m, n, lda, ldb, ldc; \
const EIGTYPE *a, *b; \
MKL
TYPE
alpha_,
beta
_
; \
EIG
TYPE beta
(1)
; \
MatrixX##EIGPREFIX b_tmp; \
Matrix<EIGTYPE, Dynamic, Dynamic, LhsStorageOrder> a_tmp; \
EIGTYPE myone(1); \
\
/* Set transpose options */
\
/* Set m, n, k */
\
m = (MKL_INT)rows; \
n = (MKL_INT)cols; \
\
/* Set alpha_ & beta_ */
\
assign_scalar_eig2mkl(alpha_, alpha); \
assign_scalar_eig2mkl(beta_, myone); \
m = convert_index<BlasIndex>(rows); \
n = convert_index<BlasIndex>(cols); \
\
/* Set lda, ldb, ldc */
\
lda =
(MKL_INT)
lhsStride; \
ldb =
(MKL_INT)
rhsStride; \
ldc =
(MKL_INT)
resStride; \
lda =
convert_index<BlasIndex>(
lhsStride
)
; \
ldb =
convert_index<BlasIndex>(
rhsStride
)
; \
ldc =
convert_index<BlasIndex>(
resStride
)
; \
\
/* Set a, b, c */
\
if (((LhsStorageOrder==ColMajor) && ConjugateLhs) || ((LhsStorageOrder==RowMajor) && (!ConjugateLhs))) { \
Map<const Matrix<EIGTYPE, Dynamic, Dynamic, LhsStorageOrder>, 0, OuterStride<> > lhs(_lhs,m,m,OuterStride<>(lhsStride)); \
a_tmp = lhs.conjugate(); \
a = a_tmp.data(); \
lda = a_tmp.outerStride(); \
lda =
convert_index<BlasIndex>(
a_tmp.outerStride()
)
; \
} else a = _lhs; \
if (LhsStorageOrder==RowMajor) uplo='U'; \
\
...
...
@@ -151,23 +141,23 @@ struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,true,ConjugateLh
b_tmp = rhs.transpose(); \
} \
b = b_tmp.data(); \
ldb = b_tmp.outerStride(); \
ldb =
convert_index<BlasIndex>(
b_tmp.outerStride()
)
; \
} \
\
MKL
PREFIX##hemm(&side, &uplo, &m, &n, &alpha
_
, (const
MKL
TYPE*)a, &lda, (const
MKL
TYPE*)b, &ldb, &beta
_
, (
MKL
TYPE*)res, &ldc); \
BLAS
PREFIX##hemm
_
(&side, &uplo, &m, &n, &
numext::real_ref(
alpha
)
, (const
BLAS
TYPE*)a, &lda, (const
BLAS
TYPE*)b, &ldb, &
numext::real_ref(
beta
)
, (
BLAS
TYPE*)res, &ldc); \
\
} \
};
EIGEN_
MKL
_SYMM_L
(
double
,
double
,
d
,
d
)
EIGEN_
MKL
_SYMM_L
(
float
,
float
,
f
,
s
)
EIGEN_
MKL
_HEMM_L
(
dcomplex
,
MKL_Complex16
,
cd
,
z
)
EIGEN_
MKL
_HEMM_L
(
scomplex
,
MKL_Complex8
,
cf
,
c
)
EIGEN_
BLAS
_SYMM_L
(
double
,
double
,
d
,
d
)
EIGEN_
BLAS
_SYMM_L
(
float
,
float
,
f
,
s
)
EIGEN_
BLAS
_HEMM_L
(
dcomplex
,
double
,
cd
,
z
)
EIGEN_
BLAS
_HEMM_L
(
scomplex
,
float
,
cf
,
c
)
/* Optimized matrix * selfadjoint matrix (?SYMM/?HEMM) product */
#define EIGEN_
MKL
_SYMM_R(EIGTYPE,
MKL
TYPE, EIGPREFIX,
MKL
PREFIX) \
#define EIGEN_
BLAS
_SYMM_R(EIGTYPE,
BLAS
TYPE, EIGPREFIX,
BLAS
PREFIX) \
template <typename Index, \
int LhsStorageOrder, bool ConjugateLhs, \
int RhsStorageOrder, bool ConjugateRhs> \
...
...
@@ -179,27 +169,22 @@ struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,false,ConjugateL
const EIGTYPE* _lhs, Index lhsStride, \
const EIGTYPE* _rhs, Index rhsStride, \
EIGTYPE* res, Index resStride, \
EIGTYPE alpha) \
EIGTYPE alpha
, level3_blocking<EIGTYPE, EIGTYPE>&
/*blocking*/
) \
{ \
char side='R', uplo='L'; \
MKL_INT
m, n, lda, ldb, ldc; \
BlasIndex
m, n, lda, ldb, ldc; \
const EIGTYPE *a, *b; \
MKL
TYPE
alpha_,
beta
_
; \
EIG
TYPE beta
(1)
; \
MatrixX##EIGPREFIX b_tmp; \
EIGTYPE myone(1);\
\
/* Set m, n, k */
\
m = (MKL_INT)rows; \
n = (MKL_INT)cols; \
\
/* Set alpha_ & beta_ */
\
assign_scalar_eig2mkl(alpha_, alpha); \
assign_scalar_eig2mkl(beta_, myone); \
m = convert_index<BlasIndex>(rows); \
n = convert_index<BlasIndex>(cols); \
\
/* Set lda, ldb, ldc */
\
lda =
(MKL_INT)
rhsStride; \
ldb =
(MKL_INT)
lhsStride; \
ldc =
(MKL_INT)
resStride; \
lda =
convert_index<BlasIndex>(
rhsStride
)
; \
ldb =
convert_index<BlasIndex>(
lhsStride
)
; \
ldc =
convert_index<BlasIndex>(
resStride
)
; \
\
/* Set a, b, c */
\
if (RhsStorageOrder==RowMajor) uplo='U'; \
...
...
@@ -209,16 +194,16 @@ struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,false,ConjugateL
Map<const MatrixX##EIGPREFIX, 0, OuterStride<> > lhs(_lhs,n,m,OuterStride<>(rhsStride)); \
b_tmp = lhs.adjoint(); \
b = b_tmp.data(); \
ldb = b_tmp.outerStride(); \
ldb =
convert_index<BlasIndex>(
b_tmp.outerStride()
)
; \
} else b = _lhs; \
\
MKL
PREFIX##symm(&side, &uplo, &m, &n, &alpha
_
, (const
MKL
TYPE*)a, &lda, (const
MKL
TYPE*)b, &ldb, &beta
_
, (
MKL
TYPE*)res, &ldc); \
BLAS
PREFIX##symm
_
(&side, &uplo, &m, &n, &
numext::real_ref(
alpha
)
, (const
BLAS
TYPE*)a, &lda, (const
BLAS
TYPE*)b, &ldb, &
numext::real_ref(
beta
)
, (
BLAS
TYPE*)res, &ldc); \
\
} \
};
#define EIGEN_
MKL
_HEMM_R(EIGTYPE,
MKL
TYPE, EIGPREFIX,
MKL
PREFIX) \
#define EIGEN_
BLAS
_HEMM_R(EIGTYPE,
BLAS
TYPE, EIGPREFIX,
BLAS
PREFIX) \
template <typename Index, \
int LhsStorageOrder, bool ConjugateLhs, \
int RhsStorageOrder, bool ConjugateRhs> \
...
...
@@ -229,35 +214,30 @@ struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,false,ConjugateL
const EIGTYPE* _lhs, Index lhsStride, \
const EIGTYPE* _rhs, Index rhsStride, \
EIGTYPE* res, Index resStride, \
EIGTYPE alpha) \
EIGTYPE alpha
, level3_blocking<EIGTYPE, EIGTYPE>&
/*blocking*/
) \
{ \
char side='R', uplo='L'; \
MKL_INT
m, n, lda, ldb, ldc; \
BlasIndex
m, n, lda, ldb, ldc; \
const EIGTYPE *a, *b; \
MKL
TYPE
alpha_,
beta
_
; \
EIG
TYPE beta
(1)
; \
MatrixX##EIGPREFIX b_tmp; \
Matrix<EIGTYPE, Dynamic, Dynamic, RhsStorageOrder> a_tmp; \
EIGTYPE myone(1); \
\
/* Set m, n, k */
\
m = (MKL_INT)rows; \
n = (MKL_INT)cols; \
\
/* Set alpha_ & beta_ */
\
assign_scalar_eig2mkl(alpha_, alpha); \
assign_scalar_eig2mkl(beta_, myone); \
m = convert_index<BlasIndex>(rows); \
n = convert_index<BlasIndex>(cols); \
\
/* Set lda, ldb, ldc */
\
lda =
(MKL_INT)
rhsStride; \
ldb =
(MKL_INT)
lhsStride; \
ldc =
(MKL_INT)
resStride; \
lda =
convert_index<BlasIndex>(
rhsStride
)
; \
ldb =
convert_index<BlasIndex>(
lhsStride
)
; \
ldc =
convert_index<BlasIndex>(
resStride
)
; \
\
/* Set a, b, c */
\
if (((RhsStorageOrder==ColMajor) && ConjugateRhs) || ((RhsStorageOrder==RowMajor) && (!ConjugateRhs))) { \
Map<const Matrix<EIGTYPE, Dynamic, Dynamic, RhsStorageOrder>, 0, OuterStride<> > rhs(_rhs,n,n,OuterStride<>(rhsStride)); \
a_tmp = rhs.conjugate(); \
a = a_tmp.data(); \
lda = a_tmp.outerStride(); \
lda =
convert_index<BlasIndex>(
a_tmp.outerStride()
)
; \
} else a = _rhs; \
if (RhsStorageOrder==RowMajor) uplo='U'; \
\
...
...
@@ -276,20 +256,20 @@ struct product_selfadjoint_matrix<EIGTYPE,Index,LhsStorageOrder,false,ConjugateL
b_tmp = lhs.transpose(); \
} \
b = b_tmp.data(); \
ldb = b_tmp.outerStride(); \
ldb =
convert_index<BlasIndex>(
b_tmp.outerStride()
)
; \
} \
\
MKL
PREFIX##hemm(&side, &uplo, &m, &n, &alpha
_
, (const
MKL
TYPE*)a, &lda, (const
MKL
TYPE*)b, &ldb, &beta
_
, (
MKL
TYPE*)res, &ldc); \
BLAS
PREFIX##hemm
_
(&side, &uplo, &m, &n, &
numext::real_ref(
alpha
)
, (const
BLAS
TYPE*)a, &lda, (const
BLAS
TYPE*)b, &ldb, &
numext::real_ref(
beta
)
, (
BLAS
TYPE*)res, &ldc); \
} \
};
EIGEN_
MKL
_SYMM_R
(
double
,
double
,
d
,
d
)
EIGEN_
MKL
_SYMM_R
(
float
,
float
,
f
,
s
)
EIGEN_
MKL
_HEMM_R
(
dcomplex
,
MKL_Complex16
,
cd
,
z
)
EIGEN_
MKL
_HEMM_R
(
scomplex
,
MKL_Complex8
,
cf
,
c
)
EIGEN_
BLAS
_SYMM_R
(
double
,
double
,
d
,
d
)
EIGEN_
BLAS
_SYMM_R
(
float
,
float
,
f
,
s
)
EIGEN_
BLAS
_HEMM_R
(
dcomplex
,
double
,
cd
,
z
)
EIGEN_
BLAS
_HEMM_R
(
scomplex
,
float
,
cf
,
c
)
}
// end namespace internal
}
// end namespace Eigen
#endif // EIGEN_SELFADJOINT_MATRIX_MATRIX_
MKL
_H
#endif // EIGEN_SELFADJOINT_MATRIX_MATRIX_
BLAS
_H
Prev
1
…
6
7
8
9
10
Next