add a partial LU bench in BTL

This commit is contained in:
Gael Guennebaud 2009-06-04 18:16:54 +02:00
parent f26c691678
commit c49d1fd2b5
6 changed files with 23 additions and 4 deletions

View File

@ -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

View File

@ -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

View File

@ -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 );
@ -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
{ {

View File

@ -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

View File

@ -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){

View File

@ -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);