LAMA
|
00001 00033 #ifndef LAMA_BLASHELPER_HPP_ 00034 #define LAMA_BLASHELPER_HPP_ 00035 00036 #include <lama/macros/inline.hpp> 00037 00045 #ifdef CRAY 00046 #include <fortran.h> 00047 #define F77_CHAR _fcd 00048 #define C2F_CHAR(a) ( _cptofcd( (a), 1 ) ) 00049 #define C2F_STR(a, i) ( _cptofcd( (a), (i) ) ) 00050 #define F77_STRLEN(a) (_fcdlen) 00051 #endif 00052 00053 #ifdef WeirdNEC 00054 #define F77_INT long 00055 #endif 00056 00057 #ifdef F77_CHAR 00058 #define FCHAR F77_CHAR 00059 #else 00060 #define FCHAR char * 00061 #endif 00062 00063 #ifdef F77_INT 00064 #define FINT const F77_INT * 00065 #define FINT2 F77_INT * 00066 #else 00067 #define FINT const int * 00068 #define FINT2 int * 00069 #endif 00070 00071 //fallback if nothing is set in cmake 00072 #if !defined(LAMA_FORTRAN_BLAS_STYLE_UNDERSCORE) 00073 #if !defined(LAMA_FORTRAN_BLAS_STYLE_UPCASE) 00074 #if !defined(LAMA_FORTRAN_BLAS_STYLE_LOWCASE) 00075 #define LAMA_FORTRAN_BLAS_STYLE_LOWCASE 00076 #endif 00077 #endif 00078 #endif 00079 00080 #ifdef __cplusplus 00081 extern "C" { 00082 #endif 00083 00084 #if defined(LAMA_FORTRAN_BLAS_STYLE_UNDERSCORE) 00085 00086 /* 00087 * Level 1 BLAS 00088 */ 00089 00090 #define F77_xerbla xerbla_ 00091 00092 #define F77_sdot sdot_ 00093 #define F77_ddot ddot_ 00094 #define F77_snrm2 snrm2_ 00095 #define F77_dnrm2 dnrm2_ 00096 #define F77_sasum sasum_ 00097 #define F77_dasum dasum_ 00098 #define F77_isamax isamax_ 00099 #define F77_idamax idamax_ 00100 00101 #define F77_srotg srotg_ 00102 #define F77_srotmg srotmg_ 00103 #define F77_srot srot_ 00104 #define F77_srotm srotm_ 00105 #define F77_drotg drotg_ 00106 #define F77_drotmg drotmg_ 00107 #define F77_drot drot_ 00108 #define F77_drotm drotm_ 00109 #define F77_sswap sswap_ 00110 #define F77_scopy scopy_ 00111 #define F77_saxpy saxpy_ 00112 #define F77_isamax_sub isamaxsub_ 00113 #define F77_dswap dswap_ 00114 #define F77_dcopy dcopy_ 00115 #define F77_daxpy daxpy_ 00116 #define F77_idamax_sub idamaxsub_ 00117 #define F77_cswap cswap_ 00118 #define F77_ccopy ccopy_ 00119 #define F77_caxpy caxpy_ 00120 #define F77_icamax_sub icamaxsub_ 00121 #define F77_zswap zswap_ 00122 #define F77_zcopy zcopy_ 00123 #define F77_zaxpy zaxpy_ 00124 #define F77_izamax_sub izamaxsub_ 00125 #define F77_sdot_sub sdotsub_ 00126 #define F77_ddot_sub ddotsub_ 00127 #define F77_dsdot_sub dsdotsub_ 00128 #define F77_sscal sscal_ 00129 #define F77_dscal dscal_ 00130 #define F77_cscal cscal_ 00131 #define F77_zscal zscal_ 00132 #define F77_csscal csscal_ 00133 #define F77_zdscal zdscal_ 00134 #define F77_cdotu_sub cdotusub_ 00135 #define F77_cdotc_sub cdotcsub_ 00136 #define F77_zdotu_sub zdotusub_ 00137 #define F77_zdotc_sub zdotcsub_ 00138 #define F77_snrm2_sub snrm2sub_ 00139 #define F77_sasum_sub sasumsub_ 00140 #define F77_dnrm2_sub dnrm2sub_ 00141 #define F77_dasum_sub dasumsub_ 00142 #define F77_scnrm2_sub scnrm2sub_ 00143 #define F77_scasum_sub scasumsub_ 00144 #define F77_dznrm2_sub dznrm2sub_ 00145 #define F77_dzasum_sub dzasumsub_ 00146 #define F77_sdsdot_sub sdsdotsub_ 00147 00148 /* 00149 * Level 2 BLAS 00150 */ 00151 00152 #define F77_ssymv ssymv_ 00153 #define F77_ssbmv ssbmv_ 00154 #define F77_sspmv sspmv_ 00155 #define F77_sger sger_ 00156 #define F77_ssyr ssyr_ 00157 #define F77_sspr sspr_ 00158 #define F77_ssyr2 ssyr2_ 00159 #define F77_sspr2 sspr2_ 00160 #define F77_dsymv dsymv_ 00161 #define F77_dsbmv dsbmv_ 00162 #define F77_dspmv dspmv_ 00163 #define F77_dger dger_ 00164 #define F77_dsyr dsyr_ 00165 #define F77_dspr dspr_ 00166 #define F77_dsyr2 dsyr2_ 00167 #define F77_dspr2 dspr2_ 00168 #define F77_chemv chemv_ 00169 #define F77_chbmv chbmv_ 00170 #define F77_chpmv chpmv_ 00171 #define F77_cgeru cgeru_ 00172 #define F77_cgerc cgerc_ 00173 #define F77_cher cher_ 00174 #define F77_chpr chpr_ 00175 #define F77_cher2 cher2_ 00176 #define F77_chpr2 chpr2_ 00177 #define F77_zhemv zhemv_ 00178 #define F77_zhbmv zhbmv_ 00179 #define F77_zhpmv zhpmv_ 00180 #define F77_zgeru zgeru_ 00181 #define F77_zgerc zgerc_ 00182 #define F77_zher zher_ 00183 #define F77_zhpr zhpr_ 00184 #define F77_zher2 zher2_ 00185 #define F77_zhpr2 zhpr2_ 00186 #define F77_sgemv sgemv_ 00187 #define F77_sgbmv sgbmv_ 00188 #define F77_strmv strmv_ 00189 #define F77_stbmv stbmv_ 00190 #define F77_stpmv stpmv_ 00191 #define F77_strsv strsv_ 00192 #define F77_stbsv stbsv_ 00193 #define F77_stpsv stpsv_ 00194 #define F77_dgemv dgemv_ 00195 #define F77_dgbmv dgbmv_ 00196 #define F77_dtrmv dtrmv_ 00197 #define F77_dtbmv dtbmv_ 00198 #define F77_dtpmv dtpmv_ 00199 #define F77_dtrsv dtrsv_ 00200 #define F77_dtbsv dtbsv_ 00201 #define F77_dtpsv dtpsv_ 00202 #define F77_cgemv cgemv_ 00203 #define F77_cgbmv cgbmv_ 00204 #define F77_ctrmv ctrmv_ 00205 #define F77_ctbmv ctbmv_ 00206 #define F77_ctpmv ctpmv_ 00207 #define F77_ctrsv ctrsv_ 00208 #define F77_ctbsv ctbsv_ 00209 #define F77_ctpsv ctpsv_ 00210 #define F77_zgemv zgemv_ 00211 #define F77_zgbmv zgbmv_ 00212 #define F77_ztrmv ztrmv_ 00213 #define F77_ztbmv ztbmv_ 00214 #define F77_ztpmv ztpmv_ 00215 #define F77_ztrsv ztrsv_ 00216 #define F77_ztbsv ztbsv_ 00217 #define F77_ztpsv ztpsv_ 00218 00219 /* 00220 * Level 3 BLAS 00221 */ 00222 00223 #define F77_chemm chemm_ 00224 #define F77_cherk cherk_ 00225 #define F77_cher2k cher2k_ 00226 #define F77_zhemm zhemm_ 00227 #define F77_zherk zherk_ 00228 #define F77_zher2k zher2k_ 00229 #define F77_sgemm sgemm_ 00230 #define F77_psgemm psgemm_ 00231 #define F77_ssymm ssymm_ 00232 #define F77_ssyrk ssyrk_ 00233 #define F77_ssyr2k ssyr2k_ 00234 #define F77_strmm strmm_ 00235 #define F77_strsm strsm_ 00236 #define F77_slaswp slaswp_ 00237 #define F77_dgemm dgemm_ 00238 #define F77_pdgemm pdgemm_ 00239 #define F77_dsymm dsymm_ 00240 #define F77_dsyrk dsyrk_ 00241 #define F77_dsyr2k dsyr2k_ 00242 #define F77_dtrmm dtrmm_ 00243 #define F77_dtrsm dtrsm_ 00244 #define F77_dlaswp dlaswp_ 00245 #define F77_cgemm cgemm_ 00246 #define F77_csymm csymm_ 00247 #define F77_csyrk csyrk_ 00248 #define F77_csyr2k csyr2k_ 00249 #define F77_ctrmm ctrmm_ 00250 #define F77_ctrsm ctrsm_ 00251 #define F77_zgemm zgemm_ 00252 #define F77_zsymm zsymm_ 00253 #define F77_zsyrk zsyrk_ 00254 #define F77_zsyr2k zsyr2k_ 00255 #define F77_ztrmm ztrmm_ 00256 #define F77_ztrsm ztrsm_ 00257 #elif defined(LAMA_FORTRAN_BLAS_STYLE_UPCASE) 00258 00259 /* 00260 * Level 1 BLAS 00261 */ 00262 00263 #define F77_xerbla XERBLA 00264 #define F77_sdot SDOT 00265 #define F77_ddot DDOT 00266 #define F77_snrm2 SNRM2 00267 #define F77_dnrm2 DNRM2 00268 #define F77_sasum SASUM 00269 #define F77_dasum DASUM 00270 #define F77_isamax ISAMAX 00271 #define F77_idamax IDAMAX 00272 00273 #define F77_srotg SROTG 00274 #define F77_srotmg SROTMG 00275 #define F77_srot SROT 00276 #define F77_srotm SROTM 00277 #define F77_drotg DROTG 00278 #define F77_drotmg DROTMG 00279 #define F77_drot DROT 00280 #define F77_drotm DROTM 00281 #define F77_sswap SSWAP 00282 #define F77_scopy SCOPY 00283 #define F77_saxpy SAXPY 00284 #define F77_isamax_sub ISAMAXSUB 00285 #define F77_dswap DSWAP 00286 #define F77_dcopy DCOPY 00287 #define F77_daxpy DAXPY 00288 #define F77_idamax_sub IDAMAXSUB 00289 #define F77_cswap CSWAP 00290 #define F77_ccopy CCOPY 00291 #define F77_caxpy CAXPY 00292 #define F77_icamax_sub ICAMAXSUB 00293 #define F77_zswap ZSWAP 00294 #define F77_zcopy ZCOPY 00295 #define F77_zaxpy ZAXPY 00296 #define F77_izamax_sub IZAMAXSUB 00297 #define F77_sdot_sub SDOTSUB 00298 #define F77_ddot_sub DDOTSUB 00299 #define F77_dsdot_sub DSDOTSUB 00300 #define F77_sscal SSCAL 00301 #define F77_dscal DSCAL 00302 #define F77_cscal CSCAL 00303 #define F77_zscal ZSCAL 00304 #define F77_csscal CSSCAL 00305 #define F77_zdscal ZDSCAL 00306 #define F77_cdotu_sub CDOTUSUB 00307 #define F77_cdotc_sub CDOTCSUB 00308 #define F77_zdotu_sub ZDOTUSUB 00309 #define F77_zdotc_sub ZDOTCSUB 00310 #define F77_snrm2_sub SNRM2SUB 00311 #define F77_sasum_sub SASUMSUB 00312 #define F77_dnrm2_sub DNRM2SUB 00313 #define F77_dasum_sub DASUMSUB 00314 #define F77_scnrm2_sub SCNRM2SUB 00315 #define F77_scasum_sub SCASUMSUB 00316 #define F77_dznrm2_sub DZNRM2SUB 00317 #define F77_dzasum_sub DZASUMSUB 00318 #define F77_sdsdot_sub SDSDOTSUB 00319 00320 /* 00321 * Level 2 BLAS 00322 */ 00323 00324 #define F77_ssymv SSYMV 00325 #define F77_ssbmv SSBMV 00326 #define F77_sspmv SSPMV 00327 #define F77_sger SGER 00328 #define F77_ssyr SSYR 00329 #define F77_sspr SSPR 00330 #define F77_ssyr2 SSYR2 00331 #define F77_sspr2 SSPR2 00332 #define F77_dsymv DSYMV 00333 #define F77_dsbmv DSBMV 00334 #define F77_dspmv DSPMV 00335 #define F77_dger DGER 00336 #define F77_dsyr DSYR 00337 #define F77_dspr DSPR 00338 #define F77_dsyr2 DSYR2 00339 #define F77_dspr2 DSPR2 00340 #define F77_chemv CHEMV 00341 #define F77_chbmv CHBMV 00342 #define F77_chpmv CHPMV 00343 #define F77_cgeru CGERU 00344 #define F77_cgerc CGERC 00345 #define F77_cher CHER 00346 #define F77_chpr CHPR 00347 #define F77_cher2 CHER2 00348 #define F77_chpr2 CHPR2 00349 #define F77_zhemv ZHEMV 00350 #define F77_zhbmv ZHBMV 00351 #define F77_zhpmv ZHPMV 00352 #define F77_zgeru ZGERU 00353 #define F77_zgerc ZGERC 00354 #define F77_zher ZHER 00355 #define F77_zhpr ZHPR 00356 #define F77_zher2 ZHER2 00357 #define F77_zhpr2 ZHPR2 00358 #define F77_sgemv SGEMV 00359 #define F77_sgbmv SGBMV 00360 #define F77_strmv STRMV 00361 #define F77_stbmv STBMV 00362 #define F77_stpmv STPMV 00363 #define F77_strsv STRSV 00364 #define F77_stbsv STBSV 00365 #define F77_stpsv STPSV 00366 #define F77_dgemv DGEMV 00367 #define F77_dgbmv DGBMV 00368 #define F77_dtrmv DTRMV 00369 #define F77_dtbmv DTBMV 00370 #define F77_dtpmv DTPMV 00371 #define F77_dtrsv DTRSV 00372 #define F77_dtbsv DTBSV 00373 #define F77_dtpsv DTPSV 00374 #define F77_cgemv CGEMV 00375 #define F77_cgbmv CGBMV 00376 #define F77_ctrmv CTRMV 00377 #define F77_ctbmv CTBMV 00378 #define F77_ctpmv CTPMV 00379 #define F77_ctrsv CTRSV 00380 #define F77_ctbsv CTBSV 00381 #define F77_ctpsv CTPSV 00382 #define F77_zgemv ZGEMV 00383 #define F77_zgbmv ZGBMV 00384 #define F77_ztrmv ZTRMV 00385 #define F77_ztbmv ZTBMV 00386 #define F77_ztpmv ZTPMV 00387 #define F77_ztrsv ZTRSV 00388 #define F77_ztbsv ZTBSV 00389 #define F77_ztpsv ZTPSV 00390 00391 /* 00392 * Level 3 BLAS 00393 */ 00394 00395 #define F77_chemm CHEMM 00396 #define F77_cherk CHERK 00397 #define F77_cher2k CHER2K 00398 #define F77_zhemm ZHEMM 00399 #define F77_zherk ZHERK 00400 #define F77_zher2k ZHER2K 00401 #define F77_sgemm SGEMM 00402 #define F77_psgemm PSGEMM 00403 #define F77_ssymm SSYMM 00404 #define F77_ssyrk SSYRK 00405 #define F77_ssyr2k SSYR2K 00406 #define F77_strmm STRMM 00407 #define F77_strsm STRSM 00408 #define F77_slaswp SLASWP 00409 #define F77_dgemm DGEMM 00410 #define F77_pdgemm PDGEMM 00411 #define F77_dsymm DSYMM 00412 #define F77_dsyrk DSYRK 00413 #define F77_dsyr2k DSYR2K 00414 #define F77_dtrmm DTRMM 00415 #define F77_dtrsm DTRSM 00416 #define F77_dlaswp DLASWP 00417 #define F77_cgemm CGEMM 00418 #define F77_csymm CSYMM 00419 #define F77_csyrk CSYRK 00420 #define F77_csyr2k CSYR2K 00421 #define F77_ctrmm CTRMM 00422 #define F77_ctrsm CTRSM 00423 #define F77_zgemm ZGEMM 00424 #define F77_zsymm ZSYMM 00425 #define F77_zsyrk ZSYRK 00426 #define F77_zsyr2k ZSYR2K 00427 #define F77_ztrmm ZTRMM 00428 #define F77_ztrsm ZTRSM 00429 #elif defined(LAMA_FORTRAN_BLAS_STYLE_LOWCASE) 00430 00431 /* 00432 * Level 1 BLAS 00433 */ 00434 00435 #define F77_xerbla xerbla 00436 00437 #define F77_sdot sdot 00438 #define F77_ddot ddot 00439 #define F77_snrm2 snrm2 00440 #define F77_dnrm2 dnrm2 00441 #define F77_sasum sasum 00442 #define F77_dasum dasum 00443 #define F77_isamax isamax 00444 #define F77_idamax idamax 00445 00446 #define F77_srotg srotg 00447 #define F77_srotmg srotmg 00448 #define F77_srot srot 00449 #define F77_srotm srotm 00450 #define F77_drotg drotg 00451 #define F77_drotmg drotmg 00452 #define F77_drot drot 00453 #define F77_drotm drotm 00454 #define F77_sswap sswap 00455 #define F77_scopy scopy 00456 #define F77_saxpy saxpy 00457 #define F77_isamax_sub isamaxsub 00458 #define F77_dswap dswap 00459 #define F77_dcopy dcopy 00460 #define F77_daxpy daxpy 00461 #define F77_idamax_sub idamaxsub 00462 #define F77_cswap cswap 00463 #define F77_ccopy ccopy 00464 #define F77_caxpy caxpy 00465 #define F77_icamax_sub icamaxsub 00466 #define F77_zswap zswap 00467 #define F77_zcopy zcopy 00468 #define F77_zaxpy zaxpy 00469 #define F77_izamax_sub izamaxsub 00470 #define F77_sdot_sub sdotsub 00471 #define F77_ddot_sub ddotsub 00472 #define F77_dsdot_sub dsdotsub 00473 #define F77_sscal sscal 00474 #define F77_dscal dscal 00475 #define F77_cscal cscal 00476 #define F77_zscal zscal 00477 #define F77_csscal csscal 00478 #define F77_zdscal zdscal 00479 #define F77_cdotu_sub cdotusub 00480 #define F77_cdotc_sub cdotcsub 00481 #define F77_zdotu_sub zdotusub 00482 #define F77_zdotc_sub zdotcsub 00483 #define F77_snrm2_sub snrm2sub 00484 #define F77_sasum_sub sasumsub 00485 #define F77_dnrm2_sub dnrm2sub 00486 #define F77_dasum_sub dasumsub 00487 #define F77_scnrm2_sub scnrm2sub 00488 #define F77_scasum_sub scasumsub 00489 #define F77_dznrm2_sub dznrm2sub 00490 #define F77_dzasum_sub dzasumsub 00491 #define F77_sdsdot_sub sdsdotsub 00492 00493 /* 00494 * Level 2 BLAS 00495 */ 00496 00497 #define F77_ssymv ssymv 00498 #define F77_ssbmv ssbmv 00499 #define F77_sspmv sspmv 00500 #define F77_sger sger 00501 #define F77_ssyr ssyr 00502 #define F77_sspr sspr 00503 #define F77_ssyr2 ssyr2 00504 #define F77_sspr2 sspr2 00505 #define F77_dsymv dsymv 00506 #define F77_dsbmv dsbmv 00507 #define F77_dspmv dspmv 00508 #define F77_dger dger 00509 #define F77_dsyr dsyr 00510 #define F77_dspr dspr 00511 #define F77_dsyr2 dsyr2 00512 #define F77_dspr2 dspr2 00513 #define F77_chemv chemv 00514 #define F77_chbmv chbmv 00515 #define F77_chpmv chpmv 00516 #define F77_cgeru cgeru 00517 #define F77_cgerc cgerc 00518 #define F77_cher cher 00519 #define F77_chpr chpr 00520 #define F77_cher2 cher2 00521 #define F77_chpr2 chpr2 00522 #define F77_zhemv zhemv 00523 #define F77_zhbmv zhbmv 00524 #define F77_zhpmv zhpmv 00525 #define F77_zgeru zgeru 00526 #define F77_zgerc zgerc 00527 #define F77_zher zher 00528 #define F77_zhpr zhpr 00529 #define F77_zher2 zher2 00530 #define F77_zhpr2 zhpr2 00531 #define F77_sgemv sgemv 00532 #define F77_sgbmv sgbmv 00533 #define F77_strmv strmv 00534 #define F77_stbmv stbmv 00535 #define F77_stpmv stpmv 00536 #define F77_strsv strsv 00537 #define F77_stbsv stbsv 00538 #define F77_stpsv stpsv 00539 #define F77_dgemv dgemv 00540 #define F77_dgbmv dgbmv 00541 #define F77_dtrmv dtrmv 00542 #define F77_dtbmv dtbmv 00543 #define F77_dtpmv dtpmv 00544 #define F77_dtrsv dtrsv 00545 #define F77_dtbsv dtbsv 00546 #define F77_dtpsv dtpsv 00547 #define F77_cgemv cgemv 00548 #define F77_cgbmv cgbmv 00549 #define F77_ctrmv ctrmv 00550 #define F77_ctbmv ctbmv 00551 #define F77_ctpmv ctpmv 00552 #define F77_ctrsv ctrsv 00553 #define F77_ctbsv ctbsv 00554 #define F77_ctpsv ctpsv 00555 #define F77_zgemv zgemv 00556 #define F77_zgbmv zgbmv 00557 #define F77_ztrmv ztrmv 00558 #define F77_ztbmv ztbmv 00559 #define F77_ztpmv ztpmv 00560 #define F77_ztrsv ztrsv 00561 #define F77_ztbsv ztbsv 00562 #define F77_ztpsv ztpsv 00563 00564 /* 00565 * Level 3 BLAS 00566 */ 00567 00568 #define F77_chemm chemm 00569 #define F77_cherk cherk 00570 #define F77_cher2k cher2k 00571 #define F77_zhemm zhemm 00572 #define F77_zherk zherk 00573 #define F77_zher2k zher2k 00574 #define F77_sgemm sgemm 00575 #define F77_psgemm psgemm 00576 #define F77_ssymm ssymm 00577 #define F77_ssyrk ssyrk 00578 #define F77_ssyr2k ssyr2k 00579 #define F77_strmm strmm 00580 #define F77_strsm strsm 00581 #define F77_slaswp slaswp 00582 #define F77_dgemm dgemm 00583 #define F77_pdgemm pdgemm 00584 #define F77_dsymm dsymm 00585 #define F77_dsyrk dsyrk 00586 #define F77_dsyr2k dsyr2k 00587 #define F77_dtrmm dtrmm 00588 #define F77_dtrsm dtrsm 00589 #define F77_dlaswp dlaswp 00590 #define F77_cgemm cgemm 00591 #define F77_csymm csymm 00592 #define F77_csyrk csyrk 00593 #define F77_csyr2k csyr2k 00594 #define F77_ctrmm ctrmm 00595 #define F77_ctrsm ctrsm 00596 #define F77_zgemm zgemm 00597 #define F77_zsymm zsymm 00598 #define F77_zsyrk zsyrk 00599 #define F77_zsyr2k zsyr2k 00600 #define F77_ztrmm ztrmm 00601 #define F77_ztrsm ztrsm 00602 #endif 00603 00604 void F77_xerbla(FCHAR, void *); 00605 00606 /* 00607 * Level 1 Fortran Prototypes 00608 */ 00609 00610 /* Single Precision */ 00611 00612 void F77_srot(FINT, float *, FINT, float *, FINT, const float *, const float *); 00613 void F77_srotg(float *,float *,float *,float *); 00614 void F77_srotm( FINT, float *, FINT, float *, FINT, const float *); 00615 void F77_srotmg(float *,float *,float *,const float *, float *); 00616 void F77_sswap( FINT, float *, FINT, float *, FINT); 00617 void F77_scopy( FINT, const float *, FINT, float *, FINT); 00618 void F77_saxpy( FINT, const float *, const float *, FINT, float *, FINT); 00619 float F77_sdot(FINT, float*, FINT, float*, FINT); 00620 // void F77_sdsdot_sub( FINT, const float *, const float *, FINT, const float *, FINT, float *); 00621 void F77_sscal( FINT, const float *, float *, FINT); 00622 float F77_snrm2(FINT, float* , FINT); 00623 float F77_sasum(FINT, float* , FINT); 00624 int F77_isamax(FINT, float* , FINT); 00625 00626 /* Double Precision */ 00627 00628 void F77_drot(FINT, double *, FINT, double *, FINT, const double *, const double *); 00629 void F77_drotg(double *,double *,double *,double *); 00630 void F77_drotm( FINT, double *, FINT, double *, FINT, const double *); 00631 void F77_drotmg(double *,double *,double *,const double *, double *); 00632 void F77_dswap( FINT, double *, FINT, double *, FINT); 00633 void F77_dcopy( FINT, const double *, FINT, double *, FINT); 00634 void F77_daxpy( FINT, const double *, const double *, FINT, double *, FINT); 00635 void F77_dswap( FINT, double *, FINT, double *, FINT); 00636 // void F77_dsdot_sub(FINT, const float *, FINT, const float *, FINT, double *); 00637 void F77_dscal( FINT, const double *, double *, FINT); 00638 double F77_ddot(FINT, double*, FINT, double*, FINT); 00639 double F77_dnrm2(FINT, double* , FINT); 00640 double F77_dasum(FINT, double* , FINT); 00641 int F77_idamax(FINT, double* , FINT); 00642 00643 /* Single Complex Precision */ 00644 00645 // void F77_cswap( FINT, void *, FINT, void *, FINT); 00646 // void F77_ccopy( FINT, const void *, FINT, void *, FINT); 00647 // void F77_caxpy( FINT, const void *, const void *, FINT, void *, FINT); 00648 // void F77_cswap( FINT, void *, FINT, void *, FINT); 00649 // void F77_cdotc_sub( FINT, const void *, FINT, const void *, FINT, void *); 00650 // void F77_cdotu_sub( FINT, const void *, FINT, const void *, FINT, void *); 00651 // void F77_cscal( FINT, const void *, void *, FINT); 00652 // void F77_icamax_sub( FINT, const void *, FINT, FINT2); 00653 // void F77_csscal( FINT, const float *, void *, FINT); 00654 // void F77_scnrm2_sub( FINT, const void *, FINT, float *); 00655 // void F77_scasum_sub( FINT, const void *, FINT, float *); 00656 // 00658 // 00659 // void F77_zswap( FINT, void *, FINT, void *, FINT); 00660 // void F77_zcopy( FINT, const void *, FINT, void *, FINT); 00661 // void F77_zaxpy( FINT, const void *, const void *, FINT, void *, FINT); 00662 // void F77_zswap( FINT, void *, FINT, void *, FINT); 00663 // void F77_zdotc_sub( FINT, const void *, FINT, const void *, FINT, void *); 00664 // void F77_zdotu_sub( FINT, const void *, FINT, const void *, FINT, void *); 00665 // void F77_zdscal( FINT, const double *, void *, FINT); 00666 // void F77_zscal( FINT, const void *, void *, FINT); 00667 // void F77_dznrm2_sub( FINT, const void *, FINT, double *); 00668 // void F77_dzasum_sub( FINT, const void *, FINT, double *); 00669 // void F77_izamax_sub( FINT, const void *, FINT, FINT2); 00670 00671 /* 00672 * Level 2 Fortran Prototypes 00673 */ 00674 00675 /* Single Precision */ 00676 00677 void F77_sgemv(FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00678 void F77_sgbmv(FCHAR, FINT, FINT, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00679 void F77_ssymv(FCHAR, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00680 void F77_ssbmv(FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00681 void F77_sspmv(FCHAR, FINT, const float *, const float *, const float *, FINT, const float *, float *, FINT); 00682 void F77_strmv( FCHAR, FCHAR, FCHAR, FINT, const float *, FINT, float *, FINT); 00683 void F77_stbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, FINT, float *, FINT); 00684 void F77_strsv( FCHAR, FCHAR, FCHAR, FINT, const float *, FINT, float *, FINT); 00685 void F77_stbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, FINT, float *, FINT); 00686 void F77_stpmv( FCHAR, FCHAR, FCHAR, FINT, const float *, float *, FINT); 00687 void F77_stpsv( FCHAR, FCHAR, FCHAR, FINT, const float *, float *, FINT); 00688 void F77_sger( FINT, FINT, const float *, const float *, FINT, const float *, FINT, float *, FINT); 00689 void F77_ssyr(FCHAR, FINT, const float *, const float *, FINT, float *, FINT); 00690 void F77_sspr(FCHAR, FINT, const float *, const float *, FINT, float *); 00691 void F77_sspr2(FCHAR, FINT, const float *, const float *, FINT, const float *, FINT, float *); 00692 void F77_ssyr2(FCHAR, FINT, const float *, const float *, FINT, const float *, FINT, float *, FINT); 00693 00694 /* Double Precision */ 00695 00696 void F77_dgemv(FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00697 void F77_dgbmv(FCHAR, FINT, FINT, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00698 void F77_dsymv(FCHAR, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00699 void F77_dsbmv(FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00700 void F77_dspmv(FCHAR, FINT, const double *, const double *, const double *, FINT, const double *, double *, FINT); 00701 void F77_dtrmv( FCHAR, FCHAR, FCHAR, FINT, const double *, FINT, double *, FINT); 00702 void F77_dtbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, FINT, double *, FINT); 00703 void F77_dtrsv( FCHAR, FCHAR, FCHAR, FINT, const double *, FINT, double *, FINT); 00704 void F77_dtbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, FINT, double *, FINT); 00705 void F77_dtpmv( FCHAR, FCHAR, FCHAR, FINT, const double *, double *, FINT); 00706 void F77_dtpsv( FCHAR, FCHAR, FCHAR, FINT, const double *, double *, FINT); 00707 void F77_dger( FINT, FINT, const double *, const double *, FINT, const double *, FINT, double *, FINT); 00708 void F77_dsyr(FCHAR, FINT, const double *, const double *, FINT, double *, FINT); 00709 void F77_dspr(FCHAR, FINT, const double *, const double *, FINT, double *); 00710 void F77_dspr2(FCHAR, FINT, const double *, const double *, FINT, const double *, FINT, double *); 00711 void F77_dsyr2(FCHAR, FINT, const double *, const double *, FINT, const double *, FINT, double *, FINT); 00712 00714 // 00715 // void F77_cgemv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); 00716 // void F77_cgbmv(FCHAR, FINT, FINT, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); 00717 // void F77_chemv(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); 00718 // void F77_chbmv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); 00719 // void F77_chpmv(FCHAR, FINT, const void *, const void *, const void *, FINT, const void *, void *, FINT); 00720 // void F77_ctrmv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT); 00721 // void F77_ctbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT); 00722 // void F77_ctpmv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *, FINT); 00723 // void F77_ctrsv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT); 00724 // void F77_ctbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT); 00725 // void F77_ctpsv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *,FINT); 00726 // void F77_cgerc( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); 00727 // void F77_cgeru( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); 00728 // void F77_cher(FCHAR, FINT, const float *, const void *, FINT, void *, FINT); 00729 // void F77_cher2(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); 00730 // void F77_chpr(FCHAR, FINT, const float *, const void *, FINT, void *); 00731 // void F77_chpr2(FCHAR, FINT, const float *, const void *, FINT, const void *, FINT, void *); 00732 // 00734 // 00735 // void F77_zgemv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); 00736 // void F77_zgbmv(FCHAR, FINT, FINT, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); 00737 // void F77_zhemv(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); 00738 // void F77_zhbmv(FCHAR, FINT, FINT, const void *, const void *, FINT, const void *, FINT, const void *, void *, FINT); 00739 // void F77_zhpmv(FCHAR, FINT, const void *, const void *, const void *, FINT, const void *, void *, FINT); 00740 // void F77_ztrmv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT); 00741 // void F77_ztbmv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT); 00742 // void F77_ztpmv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *, FINT); 00743 // void F77_ztrsv( FCHAR, FCHAR, FCHAR, FINT, const void *, FINT, void *, FINT); 00744 // void F77_ztbsv( FCHAR, FCHAR, FCHAR, FINT, FINT, const void *, FINT, void *, FINT); 00745 // void F77_ztpsv( FCHAR, FCHAR, FCHAR, FINT, const void *, void *,FINT); 00746 // void F77_zgerc( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); 00747 // void F77_zgeru( FINT, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); 00748 // void F77_zher(FCHAR, FINT, const double *, const void *, FINT, void *, FINT); 00749 // void F77_zher2(FCHAR, FINT, const void *, const void *, FINT, const void *, FINT, void *, FINT); 00750 // void F77_zhpr(FCHAR, FINT, const double *, const void *, FINT, void *); 00751 // void F77_zhpr2(FCHAR, FINT, const double *, const void *, FINT, const void *, FINT, void *); 00752 00753 /* 00754 * Level 3 Fortran Prototypes 00755 */ 00756 00757 /* Single Precision */ 00758 00759 void F77_sgemm(FCHAR, FCHAR, FINT, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00760 void F77_ssymm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00761 void F77_ssyrk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT); 00762 void F77_ssyr2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00763 void F77_strmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT); 00764 void F77_strsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT); 00765 00766 /* Double Precision */ 00767 00768 void F77_dgemm(FCHAR, FCHAR, FINT, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00769 void F77_dsymm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00770 void F77_dsyrk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT); 00771 void F77_dsyr2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00772 void F77_dtrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT); 00773 void F77_dtrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT); 00774 00776 // 00777 // void F77_cgemm(FCHAR, FCHAR, FINT, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00778 // void F77_csymm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00779 // void F77_chemm(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00780 // void F77_csyrk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT); 00781 // void F77_cherk(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, float *, FINT); 00782 // void F77_csyr2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00783 // void F77_cher2k(FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, const float *, FINT, const float *, float *, FINT); 00784 // void F77_ctrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT); 00785 // void F77_ctrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const float *, const float *, FINT, float *, FINT); 00786 // 00788 // 00789 // void F77_zgemm(FCHAR, FCHAR, FINT, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00790 // void F77_zsymm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00791 // void F77_zhemm(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00792 // void F77_zsyrk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT); 00793 // void F77_zherk(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, double *, FINT); 00794 // void F77_zsyr2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00795 // void F77_zher2k(FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, const double *, FINT, const double *, double *, FINT); 00796 // void F77_ztrmm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT); 00797 // void F77_ztrsm(FCHAR, FCHAR, FCHAR, FCHAR, FINT, FINT, const double *, const double *, FINT, double *, FINT); 00798 00799 #ifdef __cplusplus 00800 } 00801 #endif 00802 00803 // TODO: decide what to do with this 00804 //enum COMPUTE_UNIT 00805 //{ 00806 // /*lama_noCompute = 0,*/lama_compute_with_cpu = 1, lama_compute_with_gpu = 2, 00807 // lama_compute_mixed_nvidia = 3 00808 //}; 00809 00810 namespace lama 00811 { 00812 00813 class BLASHelper 00814 { 00815 public: 00816 void cblas_xerbla(int p, const char *rout, const char *form, ...); 00817 // void setComputeUnit(enum COMPUTE_UNIT unit); 00818 // enum COMPUTE_UNIT getComputeUnit(); 00819 00820 static void XERBLA_cpu( 00821 int RowMajorStrg, 00822 int info, 00823 const char *rout, 00824 const char *form, 00825 ...); 00826 }; 00827 00828 /* 00829 * Converts a floatPointerPointer to a voidPointerPointer without emmiting a Compiler warning. 00830 * Results in the same operation as casting to a void Pointer( tested on gcc 4.6.0(20110429) with -O3). 00831 * There is a little Overhead in the unoptimized version. But that shouldn't matter in a debug build. 00832 */ 00833 LAMA_STATIC_INLINE_FUNCTION_PREFIX void** lama_sToVoidPtr( float** floatPointer ) 00834 { 00835 union { 00836 float** fpp; 00837 void** vpp; 00838 } convert; 00839 convert.fpp = floatPointer; 00840 return convert.vpp; 00841 } 00842 00843 /* 00844 * Converts a doublePointerPointer to a voidPointerPointer without emmiting a Compiler warning. 00845 * Results in the same operation as casting to a void Pointer( tested on gcc 4.6.0(20110429) with -O3). 00846 * There is a little Overhead in the unoptimized version. But that shouldn't matter in a debug build. 00847 */ 00848 LAMA_STATIC_INLINE_FUNCTION_PREFIX void** lama_dToVoidPtr(double** doublePointer){ 00849 union { 00850 double** dpp; 00851 void** vpp; 00852 } convert; 00853 convert.dpp = doublePointer; 00854 return convert.vpp; 00855 } 00856 00857 } /* namespace lama */ 00858 00859 #endif // LAMA_BLASHELPER_HPP_