mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
BTL: fix warnings and extend to 5k matrices, update GotoBlas to OpenBlas, etc.
This commit is contained in:
@@ -18,27 +18,14 @@ if (MKL_FOUND)
|
||||
endif (MKL_FOUND)
|
||||
|
||||
|
||||
find_package(GOTO2)
|
||||
if (GOTO2_FOUND)
|
||||
btl_add_bench(btl_goto2 main.cpp)
|
||||
if(BUILD_btl_goto2)
|
||||
target_link_libraries(btl_goto2 ${GOTO_LIBRARIES} )
|
||||
set_target_properties(btl_goto2 PROPERTIES COMPILE_FLAGS "-DCBLASNAME=GOTO2")
|
||||
endif(BUILD_btl_goto2)
|
||||
endif (GOTO2_FOUND)
|
||||
|
||||
find_package(GOTO)
|
||||
if (GOTO_FOUND)
|
||||
if(GOTO2_FOUND)
|
||||
btl_add_bench(btl_goto main.cpp OFF)
|
||||
else()
|
||||
btl_add_bench(btl_goto main.cpp)
|
||||
endif()
|
||||
if(BUILD_btl_goto)
|
||||
target_link_libraries(btl_goto ${GOTO_LIBRARIES} )
|
||||
set_target_properties(btl_goto PROPERTIES COMPILE_FLAGS "-DCBLASNAME=GOTO")
|
||||
endif(BUILD_btl_goto)
|
||||
endif (GOTO_FOUND)
|
||||
find_package(OPENBLAS)
|
||||
if (OPENBLAS_FOUND)
|
||||
btl_add_bench(btl_openblas main.cpp)
|
||||
if(BUILD_btl_openblas)
|
||||
target_link_libraries(btl_openblas ${GOTO_LIBRARIES} )
|
||||
set_target_properties(btl_openblas PROPERTIES COMPILE_FLAGS "-DCBLASNAME=OPENBLAS")
|
||||
endif(BUILD_btl_openblas)
|
||||
endif (OPENBLAS_FOUND)
|
||||
|
||||
find_package(ACML)
|
||||
if (ACML_FOUND)
|
||||
|
||||
@@ -75,7 +75,6 @@ public :
|
||||
static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){
|
||||
int N2 = N*N;
|
||||
BLAS_FUNC(copy)(&N2, X, &intone, C, &intone);
|
||||
char uplo = 'L';
|
||||
int info = 0;
|
||||
int * ipiv = (int*)alloca(sizeof(int)*N);
|
||||
BLAS_FUNC(getrf)(&N, &N, C, &N, ipiv, &info);
|
||||
@@ -92,7 +91,7 @@ public :
|
||||
BLAS_FUNC(trsm)(&right, &lower, ¬rans, &nonunit, &N, &N, &fone, L, &N, X, &N);
|
||||
}
|
||||
|
||||
static inline void trmm(gene_matrix & A, gene_matrix & B, gene_matrix & X, int N){
|
||||
static inline void trmm(gene_matrix & A, gene_matrix & B, gene_matrix & /*X*/, int N){
|
||||
BLAS_FUNC(trmm)(&left, &lower, ¬rans,&nonunit, &N,&N,&fone,A,&N,B,&N);
|
||||
}
|
||||
|
||||
@@ -101,7 +100,6 @@ public :
|
||||
static inline void lu_decomp(const gene_matrix & X, gene_matrix & C, int N){
|
||||
int N2 = N*N;
|
||||
BLAS_FUNC(copy)(&N2, X, &intone, C, &intone);
|
||||
char uplo = 'L';
|
||||
int info = 0;
|
||||
int * ipiv = (int*)alloca(sizeof(int)*N);
|
||||
int * jpiv = (int*)alloca(sizeof(int)*N);
|
||||
@@ -134,8 +132,6 @@ public :
|
||||
}
|
||||
char uplo = 'U';
|
||||
int info = 0;
|
||||
int ilo = 1;
|
||||
int ihi = N;
|
||||
int bsize = 64;
|
||||
int worksize = N*bsize;
|
||||
SCALAR* d = new SCALAR[3*N+worksize];
|
||||
|
||||
@@ -17,12 +17,12 @@ public:
|
||||
typedef real* gene_matrix;
|
||||
typedef real* gene_vector;
|
||||
|
||||
static void free_matrix(gene_matrix & A, int N){
|
||||
delete A;
|
||||
static void free_matrix(gene_matrix & A, int /*N*/){
|
||||
delete[] A;
|
||||
}
|
||||
|
||||
static void free_vector(gene_vector & B){
|
||||
delete B;
|
||||
delete[] B;
|
||||
}
|
||||
|
||||
static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
|
||||
|
||||
@@ -44,9 +44,9 @@ public :
|
||||
return "STL";
|
||||
}
|
||||
|
||||
static void free_matrix(gene_matrix & A, int N){}
|
||||
static void free_matrix(gene_matrix & /*A*/, int /*N*/){}
|
||||
|
||||
static void free_vector(gene_vector & B){}
|
||||
static void free_vector(gene_vector & /*B*/){}
|
||||
|
||||
static inline void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
|
||||
A = A_stl;
|
||||
|
||||
@@ -45,9 +45,9 @@ public :
|
||||
return EIGEN_MAKESTRING(BTL_PREFIX);
|
||||
}
|
||||
|
||||
static void free_matrix(gene_matrix & A, int N) {}
|
||||
static void free_matrix(gene_matrix & /*A*/, int /*N*/) {}
|
||||
|
||||
static void free_vector(gene_vector & B) {}
|
||||
static void free_vector(gene_vector & /*B*/) {}
|
||||
|
||||
static BTL_DONT_INLINE void matrix_from_stl(gene_matrix & A, stl_matrix & A_stl){
|
||||
A.resize(A_stl[0].size(), A_stl.size());
|
||||
@@ -74,7 +74,7 @@ public :
|
||||
}
|
||||
|
||||
static BTL_DONT_INLINE void matrix_to_stl(gene_matrix & A, stl_matrix & A_stl){
|
||||
int N=A_stl.size();
|
||||
int N=A_stl.size();
|
||||
|
||||
for (int j=0;j<N;j++){
|
||||
A_stl[j].resize(N);
|
||||
@@ -84,28 +84,28 @@ public :
|
||||
}
|
||||
}
|
||||
|
||||
static inline void matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int N){
|
||||
static inline void matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int /*N*/){
|
||||
X.noalias() = A*B;
|
||||
}
|
||||
|
||||
static inline void transposed_matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int N){
|
||||
static inline void transposed_matrix_matrix_product(const gene_matrix & A, const gene_matrix & B, gene_matrix & X, int /*N*/){
|
||||
X.noalias() = A.transpose()*B.transpose();
|
||||
}
|
||||
|
||||
// static inline void ata_product(const gene_matrix & A, gene_matrix & X, int N){
|
||||
// static inline void ata_product(const gene_matrix & A, gene_matrix & X, int /*N*/){
|
||||
// X.noalias() = A.transpose()*A;
|
||||
// }
|
||||
|
||||
static inline void aat_product(const gene_matrix & A, gene_matrix & X, int N){
|
||||
static inline void aat_product(const gene_matrix & A, gene_matrix & X, int /*N*/){
|
||||
X.template triangularView<Lower>().setZero();
|
||||
X.template selfadjointView<Lower>().rankUpdate(A);
|
||||
}
|
||||
|
||||
static inline void matrix_vector_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int N){
|
||||
static inline void matrix_vector_product(const gene_matrix & A, const gene_vector & B, gene_vector & X, int /*N*/){
|
||||
X.noalias() = A*B;
|
||||
}
|
||||
|
||||
static inline void symv(const gene_matrix & A, const gene_vector & B, gene_vector & X, int N){
|
||||
static inline void symv(const gene_matrix & A, const gene_vector & B, gene_vector & X, int /*N*/){
|
||||
X.noalias() = (A.template selfadjointView<Lower>() * B);
|
||||
// internal::product_selfadjoint_vector<real,0,LowerTriangularBit,false,false>(N,A.data(),N, B.data(), 1, X.data(), 1);
|
||||
}
|
||||
@@ -155,54 +155,54 @@ public :
|
||||
}
|
||||
}
|
||||
|
||||
static EIGEN_DONT_INLINE void syr2(gene_matrix & A, gene_vector & X, gene_vector & Y, int N){
|
||||
static EIGEN_DONT_INLINE void syr2(gene_matrix & A, gene_vector & X, gene_vector & Y, int N){
|
||||
// internal::product_selfadjoint_rank2_update<real,0,LowerTriangularBit>(N,A.data(),N, X.data(), 1, Y.data(), 1, -1);
|
||||
for(int j=0; j<N; ++j)
|
||||
A.col(j).tail(N-j) += X[j] * Y.tail(N-j) + Y[j] * X.tail(N-j);
|
||||
}
|
||||
|
||||
static EIGEN_DONT_INLINE void ger(gene_matrix & A, gene_vector & X, gene_vector & Y, int N){
|
||||
static EIGEN_DONT_INLINE void ger(gene_matrix & A, gene_vector & X, gene_vector & Y, int N){
|
||||
for(int j=0; j<N; ++j)
|
||||
A.col(j) += X * Y[j];
|
||||
}
|
||||
|
||||
static EIGEN_DONT_INLINE void rot(gene_vector & A, gene_vector & B, real c, real s, int N){
|
||||
static EIGEN_DONT_INLINE void rot(gene_vector & A, gene_vector & B, real c, real s, int /*N*/){
|
||||
internal::apply_rotation_in_the_plane(A, B, JacobiRotation<real>(c,s));
|
||||
}
|
||||
|
||||
static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
|
||||
static inline void atv_product(gene_matrix & A, gene_vector & B, gene_vector & X, int /*N*/){
|
||||
X.noalias() = (A.transpose()*B);
|
||||
}
|
||||
|
||||
static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int N){
|
||||
static inline void axpy(real coef, const gene_vector & X, gene_vector & Y, int /*N*/){
|
||||
Y += coef * X;
|
||||
}
|
||||
|
||||
static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int N){
|
||||
static inline void axpby(real a, const gene_vector & X, real b, gene_vector & Y, int /*N*/){
|
||||
Y = a*X + b*Y;
|
||||
}
|
||||
|
||||
static EIGEN_DONT_INLINE void copy_matrix(const gene_matrix & source, gene_matrix & cible, int N){
|
||||
static EIGEN_DONT_INLINE void copy_matrix(const gene_matrix & source, gene_matrix & cible, int /*N*/){
|
||||
cible = source;
|
||||
}
|
||||
|
||||
static EIGEN_DONT_INLINE void copy_vector(const gene_vector & source, gene_vector & cible, int N){
|
||||
static EIGEN_DONT_INLINE void copy_vector(const gene_vector & source, gene_vector & cible, int /*N*/){
|
||||
cible = source;
|
||||
}
|
||||
|
||||
static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector& X, int N){
|
||||
static inline void trisolve_lower(const gene_matrix & L, const gene_vector& B, gene_vector& X, int /*N*/){
|
||||
X = L.template triangularView<Lower>().solve(B);
|
||||
}
|
||||
|
||||
static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int N){
|
||||
static inline void trisolve_lower_matrix(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int /*N*/){
|
||||
X = L.template triangularView<Upper>().solve(B);
|
||||
}
|
||||
|
||||
static inline void trmm(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int N){
|
||||
static inline void trmm(const gene_matrix & L, const gene_matrix& B, gene_matrix& X, int /*N*/){
|
||||
X.noalias() = L.template triangularView<Lower>() * B;
|
||||
}
|
||||
|
||||
static inline void cholesky(const gene_matrix & X, gene_matrix & C, int N){
|
||||
static inline void cholesky(const gene_matrix & X, gene_matrix & C, int /*N*/){
|
||||
C = X;
|
||||
internal::llt_inplace<real,Lower>::blocked(C);
|
||||
//C = X.llt().matrixL();
|
||||
@@ -211,11 +211,11 @@ public :
|
||||
// Cholesky<gene_matrix>::computeInPlaceBlock(C);
|
||||
}
|
||||
|
||||
static inline void lu_decomp(const gene_matrix & X, gene_matrix & C, int N){
|
||||
static inline void lu_decomp(const gene_matrix & X, gene_matrix & C, int /*N*/){
|
||||
C = X.fullPivLu().matrixLU();
|
||||
}
|
||||
|
||||
static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){
|
||||
static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){
|
||||
Matrix<DenseIndex,1,Dynamic> piv(N);
|
||||
DenseIndex nb;
|
||||
C = X;
|
||||
@@ -223,13 +223,13 @@ public :
|
||||
// C = X.partialPivLu().matrixLU();
|
||||
}
|
||||
|
||||
static inline void tridiagonalization(const gene_matrix & X, gene_matrix & C, int N){
|
||||
static inline void tridiagonalization(const gene_matrix & X, gene_matrix & C, int N){
|
||||
typename Tridiagonalization<gene_matrix>::CoeffVectorType aux(N-1);
|
||||
C = X;
|
||||
internal::tridiagonalization_inplace(C, aux);
|
||||
}
|
||||
|
||||
static inline void hessenberg(const gene_matrix & X, gene_matrix & C, int N){
|
||||
static inline void hessenberg(const gene_matrix & X, gene_matrix & C, int /*N*/){
|
||||
C = HessenbergDecomposition<gene_matrix>(X).packedMatrix();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user