mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-09-15 02:43:14 +08:00
add a partial LU bench in BTL
This commit is contained in:
parent
f26c691678
commit
c49d1fd2b5
@ -8,7 +8,8 @@ matrix_vector ; "{/*1.5 matrix vector product}" ; "matrix size" ; 4:2048
|
|||||||
trisolve ; "{/*1.5 triangular solver (X = inv(L) X)}" ; "size" ; 4:2048
|
trisolve ; "{/*1.5 triangular solver (X = inv(L) X)}" ; "size" ; 4:2048
|
||||||
matrix_trisolve ; "{/*1.5 matrix triangular solver (M = inv(L) M)}" ; "size" ; 4:2048
|
matrix_trisolve ; "{/*1.5 matrix triangular solver (M = inv(L) M)}" ; "size" ; 4:2048
|
||||||
cholesky ; "{/*1.5 Cholesky decomposition}" ; "matrix size" ; 4:2048
|
cholesky ; "{/*1.5 Cholesky decomposition}" ; "matrix size" ; 4:2048
|
||||||
lu_decomp ; "{/*1.5 LU decomposition}" ; "matrix size" ; 4:2048
|
lu_decomp ; "{/*1.5 Complete LU decomposition}" ; "matrix size" ; 4:2048
|
||||||
|
partial_lu_decomp ; "{/*1.5 Partial LU decomposition}" ; "matrix size" ; 4:2048
|
||||||
tridiagonalization ; "{/*1.5 Tridiagonalization}" ; "matrix size" ; 4:2048
|
tridiagonalization ; "{/*1.5 Tridiagonalization}" ; "matrix size" ; 4:2048
|
||||||
hessenberg ; "{/*1.5 Hessenberg decomposition}" ; "matrix size" ; 4:2048
|
hessenberg ; "{/*1.5 Hessenberg decomposition}" ; "matrix size" ; 4:2048
|
||||||
symv ; "{/*1.5 symmetric matrix vector product}" ; "matrix size" ; 4:2048
|
symv ; "{/*1.5 symmetric matrix vector product}" ; "matrix size" ; 4:2048
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#! /bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [ $# < 1 ]; then
|
if [ $# < 1 ]; then
|
||||||
echo "Usage: $0 working_directory [tiny|large [prefix]]"
|
echo "Usage: $0 working_directory [tiny|large [prefix]]"
|
||||||
@ -42,6 +42,7 @@ source mk_mean_script.sh trisolve $1 11 100 300 1000 $mode $prefix
|
|||||||
source mk_mean_script.sh matrix_trisolve $1 11 100 300 1000 $mode $prefix
|
source mk_mean_script.sh matrix_trisolve $1 11 100 300 1000 $mode $prefix
|
||||||
source mk_mean_script.sh cholesky $1 11 100 300 1000 $mode $prefix
|
source mk_mean_script.sh cholesky $1 11 100 300 1000 $mode $prefix
|
||||||
source mk_mean_script.sh lu_decomp $1 11 100 300 1000 $mode $prefix
|
source mk_mean_script.sh lu_decomp $1 11 100 300 1000 $mode $prefix
|
||||||
|
source mk_mean_script.sh partial_lu_decomp $1 11 100 300 1000 $mode $prefix
|
||||||
source mk_mean_script.sh tridiagonalization $1 11 100 300 1000 $mode $prefix
|
source mk_mean_script.sh tridiagonalization $1 11 100 300 1000 $mode $prefix
|
||||||
source mk_mean_script.sh hessenberg $1 11 100 300 1000 $mode $prefix
|
source mk_mean_script.sh hessenberg $1 11 100 300 1000 $mode $prefix
|
||||||
source mk_mean_script.sh symv $1 11 50 300 1000 $mode $prefix
|
source mk_mean_script.sh symv $1 11 50 300 1000 $mode $prefix
|
||||||
|
@ -61,6 +61,7 @@ extern "C"
|
|||||||
void sgehrd_( const int *n, int *ilo, int *ihi, float *a, const int *lda, float *tau, float *work, int *lwork, int *info );
|
void sgehrd_( const int *n, int *ilo, int *ihi, float *a, const int *lda, float *tau, float *work, int *lwork, int *info );
|
||||||
|
|
||||||
// LU row pivoting
|
// LU row pivoting
|
||||||
|
// void dgetrf_( int *m, int *n, double *a, int *lda, int *ipiv, int *info );
|
||||||
// void sgetrf_(const int* m, const int* n, float *a, const int* ld, int* ipivot, int* info);
|
// void sgetrf_(const int* m, const int* n, float *a, const int* ld, int* ipivot, int* info);
|
||||||
// LU full pivoting
|
// LU full pivoting
|
||||||
void sgetc2_(const int* n, float *a, const int *lda, int *ipiv, int *jpiv, int*info );
|
void sgetc2_(const int* n, float *a, const int *lda, int *ipiv, int *jpiv, int*info );
|
||||||
@ -160,7 +161,7 @@ public :
|
|||||||
cblas_ssymv(CblasColMajor,CblasLower,N,1.0,A,N,B,1,0.0,X,1);
|
cblas_ssymv(CblasColMajor,CblasLower,N,1.0,A,N,B,1,0.0,X,1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void syr2(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
|
static inline void syr2(gene_matrix & A, gene_vector & B, gene_vector & X, int N){
|
||||||
#ifdef PUREBLAS
|
#ifdef PUREBLAS
|
||||||
ssyr2_(&lower,&N,&fone,B,&intone,X,&intone,A,&N);
|
ssyr2_(&lower,&N,&fone,B,&intone,X,&intone,A,&N);
|
||||||
@ -247,6 +248,15 @@ public :
|
|||||||
sgetc2_(&N, C, &N, ipiv, jpiv, &info);
|
sgetc2_(&N, C, &N, ipiv, jpiv, &info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){
|
||||||
|
int N2 = N*N;
|
||||||
|
scopy_(&N2, X, &intone, C, &intone);
|
||||||
|
char uplo = 'L';
|
||||||
|
int info = 0;
|
||||||
|
int * ipiv = (int*)alloca(sizeof(int)*N);
|
||||||
|
sgetrf_(&N, &N, C, &N, ipiv, &info);
|
||||||
|
}
|
||||||
|
|
||||||
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){
|
||||||
#ifdef PUREBLAS
|
#ifdef PUREBLAS
|
||||||
{
|
{
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "action_cholesky.hh"
|
#include "action_cholesky.hh"
|
||||||
#include "action_lu_decomp.hh"
|
#include "action_lu_decomp.hh"
|
||||||
|
#include "action_partial_lu_decomp.hh"
|
||||||
#include "action_trisolve_matrix.hh"
|
#include "action_trisolve_matrix.hh"
|
||||||
|
|
||||||
#ifdef HAS_LAPACK
|
#ifdef HAS_LAPACK
|
||||||
@ -54,6 +55,7 @@ int main()
|
|||||||
|
|
||||||
#ifdef HAS_LAPACK
|
#ifdef HAS_LAPACK
|
||||||
bench<Action_lu_decomp<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
bench<Action_lu_decomp<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
|
bench<Action_partial_lu_decomp<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
bench<Action_hessenberg<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
bench<Action_hessenberg<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
bench<Action_tridiagonalization<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
bench<Action_tridiagonalization<C_BLAS_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
#endif
|
#endif
|
||||||
|
@ -202,7 +202,10 @@ public :
|
|||||||
|
|
||||||
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.lu().matrixLU();
|
C = X.lu().matrixLU();
|
||||||
// C = X.inverse();
|
}
|
||||||
|
|
||||||
|
static inline void partial_lu_decomp(const gene_matrix & X, gene_matrix & C, int N){
|
||||||
|
C = X.partialLu().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){
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "action_cholesky.hh"
|
#include "action_cholesky.hh"
|
||||||
#include "action_hessenberg.hh"
|
#include "action_hessenberg.hh"
|
||||||
#include "action_lu_decomp.hh"
|
#include "action_lu_decomp.hh"
|
||||||
|
#include "action_partial_lu_decomp.hh"
|
||||||
|
|
||||||
BTL_MAIN;
|
BTL_MAIN;
|
||||||
|
|
||||||
@ -32,6 +33,7 @@ int main()
|
|||||||
bench<Action_trisolve_matrix<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
bench<Action_trisolve_matrix<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
bench<Action_cholesky<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
bench<Action_cholesky<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
bench<Action_lu_decomp<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
bench<Action_lu_decomp<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
|
bench<Action_partial_lu_decomp<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
|
|
||||||
bench<Action_hessenberg<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
bench<Action_hessenberg<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
bench<Action_tridiagonalization<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
bench<Action_tridiagonalization<eigen2_interface<REAL_TYPE> > >(MIN_MM,MAX_MM,NB_POINT);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user