libflame
revision_anchor
|
00001 /* 00002 libflame 00003 An object-based infrastructure for developing high-performance 00004 dense linear algebra libraries. 00005 00006 Copyright (C) 2011, The University of Texas 00007 00008 libflame is free software; you can redistribute it and/or modify 00009 it under the terms of the GNU Lesser General Public License as 00010 published by the Free Software Foundation; either version 2.1 of 00011 the License, or (at your option) any later version. 00012 00013 libflame is distributed in the hope that it will be useful, but 00014 WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 Lesser General Public License for more details. 00017 00018 You should have received a copy of the GNU Lesser General Public 00019 License along with libflame; if you did not receive a copy, see 00020 http://www.gnu.org/licenses/. 00021 00022 For more information, please contact us at flame@cs.utexas.edu or 00023 send mail to: 00024 00025 Field G. Van Zee and/or 00026 Robert A. van de Geijn 00027 The University of Texas at Austin 00028 Department of Computer Sciences 00029 1 University Station C0500 00030 Austin TX 78712 00031 */ 00032 00033 // --- Utility-level BLAS-like prototypes -------------------------------------- 00034 00035 // --- constant-generating functions --- 00036 00037 float bli_s2( void ); 00038 double bli_d2( void ); 00039 scomplex bli_c2( void ); 00040 dcomplex bli_z2( void ); 00041 float bli_s1( void ); 00042 double bli_d1( void ); 00043 scomplex bli_c1( void ); 00044 dcomplex bli_z1( void ); 00045 float bli_s1h( void ); 00046 double bli_d1h( void ); 00047 scomplex bli_c1h( void ); 00048 dcomplex bli_z1h( void ); 00049 float bli_s0( void ); 00050 double bli_d0( void ); 00051 scomplex bli_c0( void ); 00052 dcomplex bli_z0( void ); 00053 float bli_sm1h( void ); 00054 double bli_dm1h( void ); 00055 scomplex bli_cm1h( void ); 00056 dcomplex bli_zm1h( void ); 00057 float bli_sm1( void ); 00058 double bli_dm1( void ); 00059 scomplex bli_cm1( void ); 00060 dcomplex bli_zm1( void ); 00061 float bli_sm2( void ); 00062 double bli_dm2( void ); 00063 scomplex bli_cm2( void ); 00064 dcomplex bli_zm2( void ); 00065 00066 // --- allocv --- 00067 00068 void* bli_vallocv( unsigned int n_elem, unsigned int elem_size ); 00069 int* bli_iallocv( unsigned int n_elem ); 00070 float* bli_sallocv( unsigned int n_elem ); 00071 double* bli_dallocv( unsigned int n_elem ); 00072 scomplex* bli_callocv( unsigned int n_elem ); 00073 dcomplex* bli_zallocv( unsigned int n_elem ); 00074 00075 // --- allocm --- 00076 00077 void* bli_vallocm( unsigned int m, unsigned int n, unsigned int elem_size ); 00078 int* bli_iallocm( unsigned int m, unsigned int n ); 00079 float* bli_sallocm( unsigned int m, unsigned int n ); 00080 double* bli_dallocm( unsigned int m, unsigned int n ); 00081 scomplex* bli_callocm( unsigned int m, unsigned int n ); 00082 dcomplex* bli_zallocm( unsigned int m, unsigned int n ); 00083 00084 // --- apdiagmv --- 00085 00086 void bli_sapdiagmv( side_t side, conj_t conj, int m, int n, float* x, int incx, float* a, int a_rs, int a_cs ); 00087 void bli_dapdiagmv( side_t side, conj_t conj, int m, int n, double* x, int incx, double* a, int a_rs, int a_cs ); 00088 void bli_csapdiagmv( side_t side, conj_t conj, int m, int n, float* x, int incx, scomplex* a, int a_rs, int a_cs ); 00089 void bli_capdiagmv( side_t side, conj_t conj, int m, int n, scomplex* x, int incx, scomplex* a, int a_rs, int a_cs ); 00090 void bli_zdapdiagmv( side_t side, conj_t conj, int m, int n, double* x, int incx, dcomplex* a, int a_rs, int a_cs ); 00091 void bli_zapdiagmv( side_t side, conj_t conj, int m, int n, dcomplex* x, int incx, dcomplex* a, int a_rs, int a_cs ); 00092 00093 // --- create_contigm --- 00094 00095 void bli_screate_contigm( int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00096 void bli_dcreate_contigm( int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00097 void bli_ccreate_contigm( int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00098 void bli_zcreate_contigm( int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00099 00100 // --- create_contigmt --- 00101 00102 void bli_screate_contigmt( trans_t trans_dims, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00103 void bli_dcreate_contigmt( trans_t trans_dims, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00104 void bli_ccreate_contigmt( trans_t trans_dims, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00105 void bli_zcreate_contigmt( trans_t trans_dims, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00106 00107 // --- create_contigmr --- 00108 00109 void bli_screate_contigmr( uplo_t uplo, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00110 void bli_dcreate_contigmr( uplo_t uplo, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00111 void bli_ccreate_contigmr( uplo_t uplo, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00112 void bli_zcreate_contigmr( uplo_t uplo, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00113 00114 // --- create_contigmsr --- 00115 00116 void bli_screate_contigmsr( side_t side, uplo_t uplo, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00117 void bli_dcreate_contigmsr( side_t side, uplo_t uplo, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00118 void bli_ccreate_contigmsr( side_t side, uplo_t uplo, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00119 void bli_zcreate_contigmsr( side_t side, uplo_t uplo, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00120 00121 // --- free_contigm --- 00122 00123 void bli_sfree_contigm( float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00124 void bli_dfree_contigm( double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00125 void bli_cfree_contigm( scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00126 void bli_zfree_contigm( dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00127 00128 // --- free_saved_contigm --- 00129 00130 void bli_sfree_saved_contigm( int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00131 void bli_dfree_saved_contigm( int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00132 void bli_cfree_saved_contigm( int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00133 void bli_zfree_saved_contigm( int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00134 00135 // --- free_saved_contigmr --- 00136 00137 void bli_sfree_saved_contigmr( uplo_t uplo, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00138 void bli_dfree_saved_contigmr( uplo_t uplo, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00139 void bli_cfree_saved_contigmr( uplo_t uplo, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00140 void bli_zfree_saved_contigmr( uplo_t uplo, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00141 00142 // --- free_saved_contigmsr --- 00143 00144 void bli_sfree_saved_contigmsr( side_t side, uplo_t uplo, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00145 void bli_dfree_saved_contigmsr( side_t side, uplo_t uplo, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00146 void bli_cfree_saved_contigmsr( side_t side, uplo_t uplo, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00147 void bli_zfree_saved_contigmsr( side_t side, uplo_t uplo, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00148 00149 // --- ewinvscalv --- 00150 00151 void bli_sewinvscalv( conj_t conj, int n, float* x, int incx, float* y, int incy ); 00152 void bli_dewinvscalv( conj_t conj, int n, double* x, int incx, double* y, int incy ); 00153 void bli_csewinvscalv( conj_t conj, int n, float* x, int incx, scomplex* y, int incy ); 00154 void bli_cewinvscalv( conj_t conj, int n, scomplex* x, int incx, scomplex* y, int incy ); 00155 void bli_zdewinvscalv( conj_t conj, int n, double* x, int incx, dcomplex* y, int incy ); 00156 void bli_zewinvscalv( conj_t conj, int n, dcomplex* x, int incx, dcomplex* y, int incy ); 00157 00158 // --- ewscalmt --- 00159 00160 void bli_sewinvscalmt( trans_t trans, int m, int n, float* a, int a_rs, int a_cs, float* b, int b_rs, int b_cs ); 00161 void bli_dewinvscalmt( trans_t trans, int m, int n, double* a, int a_rs, int a_cs, double* b, int b_rs, int b_cs ); 00162 void bli_csewinvscalmt( trans_t trans, int m, int n, float* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00163 void bli_cewinvscalmt( trans_t trans, int m, int n, scomplex* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00164 void bli_zdewinvscalmt( trans_t trans, int m, int n, double* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00165 void bli_zewinvscalmt( trans_t trans, int m, int n, dcomplex* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00166 00167 // --- ewscalv --- 00168 00169 void bli_sewscalv( conj_t conj, int n, float* x, int incx, float* y, int incy ); 00170 void bli_dewscalv( conj_t conj, int n, double* x, int incx, double* y, int incy ); 00171 void bli_csewscalv( conj_t conj, int n, float* x, int incx, scomplex* y, int incy ); 00172 void bli_cewscalv( conj_t conj, int n, scomplex* x, int incx, scomplex* y, int incy ); 00173 void bli_zdewscalv( conj_t conj, int n, double* x, int incx, dcomplex* y, int incy ); 00174 void bli_zewscalv( conj_t conj, int n, dcomplex* x, int incx, dcomplex* y, int incy ); 00175 00176 // --- ewscalmt --- 00177 00178 void bli_sewscalmt( trans_t trans, int m, int n, float* a, int a_rs, int a_cs, float* b, int b_rs, int b_cs ); 00179 void bli_dewscalmt( trans_t trans, int m, int n, double* a, int a_rs, int a_cs, double* b, int b_rs, int b_cs ); 00180 void bli_csewscalmt( trans_t trans, int m, int n, float* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00181 void bli_cewscalmt( trans_t trans, int m, int n, scomplex* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00182 void bli_zdewscalmt( trans_t trans, int m, int n, double* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00183 void bli_zewscalmt( trans_t trans, int m, int n, dcomplex* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00184 00185 // --- free --- 00186 00187 void bli_vfree( void* p ); 00188 void bli_ifree( int* p ); 00189 void bli_sfree( float* p ); 00190 void bli_dfree( double* p ); 00191 void bli_cfree( scomplex* p ); 00192 void bli_zfree( dcomplex* p ); 00193 00194 // --- inverts --- 00195 00196 void bli_sinverts( conj_t conj, float* alpha ); 00197 void bli_dinverts( conj_t conj, double* alpha ); 00198 void bli_cinverts( conj_t conj, scomplex* alpha ); 00199 void bli_zinverts( conj_t conj, dcomplex* alpha ); 00200 00201 // --- invert2s --- 00202 00203 void bli_sinvert2s( conj_t conj, float* alpha, float* beta ); 00204 void bli_dinvert2s( conj_t conj, double* alpha, double* beta ); 00205 void bli_cinvert2s( conj_t conj, scomplex* alpha, scomplex* beta ); 00206 void bli_zinvert2s( conj_t conj, dcomplex* alpha, dcomplex* beta ); 00207 00208 // --- invertv --- 00209 00210 void bli_sinvertv( conj_t conj, int n, float* x, int incx ); 00211 void bli_dinvertv( conj_t conj, int n, double* x, int incx ); 00212 void bli_cinvertv( conj_t conj, int n, scomplex* x, int incx ); 00213 void bli_zinvertv( conj_t conj, int n, dcomplex* x, int incx ); 00214 00215 // --- ident --- 00216 00217 void bli_sident( int m, float* a, int a_rs, int a_cs ); 00218 void bli_dident( int m, double* a, int a_rs, int a_cs ); 00219 void bli_cident( int m, scomplex* a, int a_rs, int a_cs ); 00220 void bli_zident( int m, dcomplex* a, int a_rs, int a_cs ); 00221 00222 // --- maxabsv --- 00223 00224 void bli_smaxabsv( int n, float* x, int incx, float* maxabs ); 00225 void bli_dmaxabsv( int n, double* x, int incx, double* maxabs ); 00226 void bli_cmaxabsv( int n, scomplex* x, int incx, float* maxabs ); 00227 void bli_zmaxabsv( int n, dcomplex* x, int incx, double* maxabs ); 00228 00229 // --- maxabsm --- 00230 00231 void bli_smaxabsm( int m, int n, float* a, int a_rs, int a_cs, float* maxabs ); 00232 void bli_dmaxabsm( int m, int n, double* a, int a_rs, int a_cs, double* maxabs ); 00233 void bli_cmaxabsm( int m, int n, scomplex* a, int a_rs, int a_cs, float* maxabs ); 00234 void bli_zmaxabsm( int m, int n, dcomplex* a, int a_rs, int a_cs, double* maxabs ); 00235 00236 // --- maxabsmr --- 00237 00238 void bli_smaxabsmr( uplo_t uplo, int m, int n, float* a, int a_rs, int a_cs, float* maxabs ); 00239 void bli_dmaxabsmr( uplo_t uplo, int m, int n, double* a, int a_rs, int a_cs, double* maxabs ); 00240 void bli_cmaxabsmr( uplo_t uplo, int m, int n, scomplex* a, int a_rs, int a_cs, float* maxabs ); 00241 void bli_zmaxabsmr( uplo_t uplo, int m, int n, dcomplex* a, int a_rs, int a_cs, double* maxabs ); 00242 00243 // --- rands --- 00244 00245 void bli_srands( float* alpha ); 00246 void bli_drands( double* alpha ); 00247 void bli_crands( scomplex* alpha ); 00248 void bli_zrands( dcomplex* alpha ); 00249 00250 // --- randv --- 00251 00252 void bli_srandv( int n, float* x, int incx ); 00253 void bli_drandv( int n, double* x, int incx ); 00254 void bli_crandv( int n, scomplex* x, int incx ); 00255 void bli_zrandv( int n, dcomplex* x, int incx ); 00256 00257 // --- randm --- 00258 00259 void bli_srandm( int m, int n, float* a, int a_rs, int a_cs ); 00260 void bli_drandm( int m, int n, double* a, int a_rs, int a_cs ); 00261 void bli_crandm( int m, int n, scomplex* a, int a_rs, int a_cs ); 00262 void bli_zrandm( int m, int n, dcomplex* a, int a_rs, int a_cs ); 00263 00264 // --- randmr --- 00265 void bli_srandmr( uplo_t uplo, diag_t diag, int m, int n, float* a, int a_rs, int a_cs ); 00266 void bli_drandmr( uplo_t uplo, diag_t diag, int m, int n, double* a, int a_rs, int a_cs ); 00267 void bli_crandmr( uplo_t uplo, diag_t diag, int m, int n, scomplex* a, int a_rs, int a_cs ); 00268 void bli_zrandmr( uplo_t uplo, diag_t diag, int m, int n, dcomplex* a, int a_rs, int a_cs ); 00269 00270 // --- set_contig_strides --- 00271 00272 void bli_set_contig_strides( int m, int n, int* rs, int* cs ); 00273 00274 // --- set_dims_with_side --- 00275 00276 void bli_set_dim_with_side( side_t side, int m, int n, int* dim_new ); 00277 00278 // --- set_dims_with_trans --- 00279 00280 void bli_set_dims_with_trans( trans_t trans, int m, int n, int* m_new, int* n_new ); 00281 00282 // --- setv --- 00283 00284 void bli_isetv( int m, int* sigma, int* x, int incx ); 00285 void bli_ssetv( int m, float* sigma, float* x, int incx ); 00286 void bli_dsetv( int m, double* sigma, double* x, int incx ); 00287 void bli_csetv( int m, scomplex* sigma, scomplex* x, int incx ); 00288 void bli_zsetv( int m, dcomplex* sigma, dcomplex* x, int incx ); 00289 00290 // --- setm --- 00291 00292 void bli_isetm( int m, int n, int* sigma, int* a, int a_rs, int a_cs ); 00293 void bli_ssetm( int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00294 void bli_dsetm( int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00295 void bli_csetm( int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00296 void bli_zsetm( int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00297 00298 // --- setmr --- 00299 00300 void bli_ssetmr( uplo_t uplo, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00301 void bli_dsetmr( uplo_t uplo, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00302 void bli_csetmr( uplo_t uplo, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00303 void bli_zsetmr( uplo_t uplo, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00304 00305 // --- setdiag --- 00306 00307 void bli_isetdiag( int offset, int m, int n, int* sigma, int* a, int a_rs, int a_cs ); 00308 void bli_ssetdiag( int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00309 void bli_dsetdiag( int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00310 void bli_csetdiag( int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00311 void bli_zsetdiag( int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00312 00313 // --- scalediag --- 00314 00315 void bli_sscalediag( conj_t conj, int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00316 void bli_dscalediag( conj_t conj, int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00317 void bli_cscalediag( conj_t conj, int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00318 void bli_zscalediag( conj_t conj, int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00319 void bli_csscalediag( conj_t conj, int offset, int m, int n, float* sigma, scomplex* a, int a_rs, int a_cs ); 00320 void bli_zdscalediag( conj_t conj, int offset, int m, int n, double* sigma, dcomplex* a, int a_rs, int a_cs ); 00321 00322 // --- shiftdiag --- 00323 00324 void bli_sshiftdiag( conj_t conj, int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00325 void bli_dshiftdiag( conj_t conj, int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00326 void bli_cshiftdiag( conj_t conj, int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00327 void bli_zshiftdiag( conj_t conj, int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00328 void bli_csshiftdiag( conj_t conj, int offset, int m, int n, float* sigma, scomplex* a, int a_rs, int a_cs ); 00329 void bli_zdshiftdiag( conj_t conj, int offset, int m, int n, double* sigma, dcomplex* a, int a_rs, int a_cs ); 00330 00331 // --- symmize --- 00332 00333 void bli_ssymmize( conj_t conj, uplo_t uplo, int m, float* a, int a_rs, int a_cs ); 00334 void bli_dsymmize( conj_t conj, uplo_t uplo, int m, double* a, int a_rs, int a_cs ); 00335 void bli_csymmize( conj_t conj, uplo_t uplo, int m, scomplex* a, int a_rs, int a_cs ); 00336 void bli_zsymmize( conj_t conj, uplo_t uplo, int m, dcomplex* a, int a_rs, int a_cs ); 00337