|
Boost : |
From: Joerg Walter (jhr.walter_at_[hidden])
Date: 2002-04-10 01:51:47
Hi Toon,
you wrote.
> the documentation states you test with CLAPACK testsuite. Are these tests
> integrated in the CVS (I can't find it) ?
The test integration code is currently not available publicly. First, there
are a couple of minor issues to resolve: BLAS coverage could be increased,
and we should look at the benchmarks at least once ;-)
The major issue to resolve is to choose the right form of distribution: the
options range from
- distribute only the test integration code with an appropriate installation
documentation (which has to be written yet ;-)
to
- distribute the modified CLAPACK.
> Does this mean that you make the
> testsuite use ublas matrices
Yes.
> or, the other direction, provide bindings to
> make clapack useable from within ublas ?
No.
Best regards
Joerg
P.S.: To give an impression, how the test integration works, I'll include a
sample implementation and a cutout of the modified CLAPACK's blaswrap.h.
--- DGEMM
int ublas_dgemm (char *ta, char *tb, integer *m, integer *n, integer *k,
doublereal *alpha, doublereal *a, integer *lda, doublereal
*b, integer *ldb,
doublereal *beta, doublereal *c, integer *ldc) {
ublas_assert (to_lower (*ta) == 'n' || to_lower (*ta) == 't' || to_lower
(*ta) == 'c', "DGEMM ", 1);
ublas_assert (to_lower (*tb) == 'n' || to_lower (*tb) == 't' || to_lower
(*tb) == 'c', "DGEMM ", 2);
ublas_assert (*m >= 0, "DGEMM ", 3);
ublas_assert (*n >= 0, "DGEMM ", 4);
ublas_assert (*k >= 0, "DGEMM ", 5);
ublas_assert (*lda >= std::max (1, to_lower (*ta) == 'n' ? *m : *k), "DGEMM
", 8);
ublas_assert (*ldb >= std::max (1, to_lower (*tb) == 'n' ? *k : *n), "DGEMM
", 10);
ublas_assert (*ldc >= std::max (1, *m), "DGEMM ", 13);
matrix_adaptor<doublereal> mac (*m, *n, c, *ldc);
if (to_lower (*ta) == 'n') {
matrix_adaptor<doublereal> maa (*m, *k, a, *lda);
if (to_lower (*tb) == 'n') {
matrix_adaptor<doublereal> mab (*k, *n, b, *ldb);
gmm (to_lower (*ta), to_lower (*tb), mac (), *beta, *alpha, maa (), mab
());
} else {
matrix_adaptor<doublereal> mab (*n, *k, b, *ldb);
gmm (to_lower (*ta), to_lower (*tb), mac (), *beta, *alpha, maa (), mab
());
}
} else {
matrix_adaptor<doublereal> maa (*k, *m, a, *lda);
if (to_lower (*tb) == 'n') {
matrix_adaptor<doublereal> mab (*k, *n, b, *ldb);
gmm (to_lower (*ta), to_lower (*tb), mac (), *beta, *alpha, maa (), mab
());
} else {
matrix_adaptor<doublereal> mab (*n, *k, b, *ldb);
gmm (to_lower (*ta), to_lower (*tb), mac (), *beta, *alpha, maa (), mab
());
}
}
return 0;
}
--- --- blaswrap.h /* BLAS1 routines */ #define srotg_ srotg_ #define drotg_ drotg_ #define srotmg_ srotmg_ #define drotmg_ drotmg_ #define srot_ srot_ #define drot_ drot_ #define srotm_ srotm_ #define drotm_ drotm_ #define sswap_ ublas_sswap #define dswap_ ublas_dswap #define cswap_ ublas_cswap #define zswap_ ublas_zswap #define sscal_ ublas_sscal #define dscal_ ublas_dscal #define cscal_ ublas_cscal #define zscal_ ublas_zscal #define csscal_ csscal_ #define zdscal_ zdscal_ #define scopy_ ublas_scopy #define dcopy_ ublas_dcopy #define ccopy_ ublas_ccopy #define zcopy_ ublas_zcopy #define saxpy_ ublas_saxpy #define daxpy_ ublas_daxpy #define caxpy_ ublas_caxpy #define zaxpy_ ublas_zaxpy #define sdot_ ublas_sdot #define ddot_ ublas_ddot #define cdotu_ ublas_cdotu #define zdotu_ ublas_zdotu #define cdotc_ ublas_cdotc #define zdotc_ ublas_zdotc #define snrm2_ ublas_snrm2 #define dnrm2_ ublas_dnrm2 #define scnrm2_ ublas_scnrm2 #define dznrm2_ ublas_dznrm2 #define sasum_ ublas_sasum #define dasum_ ublas_dasum #define scasum_ ublas_scasum #define dzasum_ ublas_dzasum #define isamax_ isamax_ #define idamax_ idamax_ #define icamax_ icamax_ #define izamax_ izamax_ /* BLAS2 routines */ #define sgemv_ ublas_sgemv #define dgemv_ ublas_dgemv #define cgemv_ ublas_cgemv #define zgemv_ ublas_zgemv #define sgbmv_ ublas_sgbmv #define dgbmv_ ublas_dgbmv #define cgbmv_ ublas_cgbmv #define zgbmv_ ublas_zgbmv #define chemv_ ublas_chemv #define zhemv_ ublas_zhemv #define chbmv_ chbmv_ #define zhbmv_ zhbmv_ #define chpmv_ ublas_chpmv #define zhpmv_ ublas_zhpmv #define ssymv_ ublas_ssymv #define dsymv_ ublas_dsymv #define ssbmv_ ssbmv_ #define dsbmv_ dsbmv_ #define sspmv_ ublas_sspmv #define dspmv_ ublas_dspmv #define strmv_ ublas_strmv #define dtrmv_ ublas_dtrmv #define ctrmv_ ublas_ctrmv #define ztrmv_ ublas_ztrmv #define stbmv_ stbmv_ #define dtbmv_ dtbmv_ #define ctbmv_ ctbmv_ #define ztbmv_ ztbmv_ #define stpmv_ ublas_stpmv #define dtpmv_ ublas_dtpmv #define ctpmv_ ublas_ctpmv #define ztpmv_ ublas_ztpmv #define strsv_ ublas_strsv #define dtrsv_ ublas_dtrsv #define ctrsv_ ublas_ctrsv #define ztrsv_ ublas_ztrsv #define stbsv_ stbsv_ #define dtbsv_ dtbsv_ #define ctbsv_ ctbsv_ #define ztbsv_ ztbsv_ #define stpsv_ ublas_stpsv #define dtpsv_ ublas_dtpsv #define ctpsv_ ublas_ctpsv #define ztpsv_ ublas_ztpsv #define sger_ ublas_sger #define dger_ ublas_dger #define cgeru_ ublas_cgeru #define zgeru_ ublas_zgeru #define cgerc_ ublas_cgerc #define zgerc_ ublas_zgerc #define cher_ ublas_cher #define zher_ ublas_zher #define chpr_ ublas_chpr #define zhpr_ ublas_zhpr #define cher2_ ublas_cher2 #define zher2_ ublas_zher2 #define chpr2_ ublas_chpr2 #define zhpr2_ ublas_zhpr2 #define ssyr_ ublas_ssyr #define dsyr_ ublas_dsyr #define sspr_ ublas_sspr #define dspr_ ublas_dspr #define ssyr2_ ublas_ssyr2 #define dsyr2_ ublas_dsyr2 #define sspr2_ ublas_sspr2 #define dspr2_ ublas_dspr2 /* BLAS3 routines */ #define sgemm_ ublas_sgemm #define dgemm_ ublas_dgemm #define cgemm_ ublas_cgemm #define zgemm_ ublas_zgemm #define ssymm_ ublas_ssymm #define dsymm_ ublas_dsymm #define csymm_ ublas_csymm #define zsymm_ ublas_zsymm #define chemm_ ublas_chemm #define zhemm_ ublas_zhemm #define ssyrk_ ublas_ssyrk #define dsyrk_ ublas_dsyrk #define csyrk_ ublas_csyrk #define zsyrk_ ublas_zsyrk #define cherk_ ublas_cherk #define zherk_ ublas_zherk #define ssyr2k_ ublas_ssyr2k #define dsyr2k_ ublas_dsyr2k #define csyr2k_ ublas_csyr2k #define zsyr2k_ ublas_zsyr2k #define cher2k_ ublas_cher2k #define zher2k_ ublas_zher2k #define strmm_ ublas_strmm #define dtrmm_ ublas_dtrmm #define ctrmm_ ublas_ctrmm #define ztrmm_ ublas_ztrmm #define strsm_ ublas_strsm #define dtrsm_ ublas_dtrsm #define ctrsm_ ublas_ctrsm #define ztrsm_ ublas_ztrsm ---
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk