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 float* bli_sallocv( unsigned int n_elem ); 00069 double* bli_dallocv( unsigned int n_elem ); 00070 scomplex* bli_callocv( unsigned int n_elem ); 00071 dcomplex* bli_zallocv( unsigned int n_elem ); 00072 00073 // --- allocm --- 00074 00075 float* bli_sallocm( unsigned int m, unsigned int n ); 00076 double* bli_dallocm( unsigned int m, unsigned int n ); 00077 scomplex* bli_callocm( unsigned int m, unsigned int n ); 00078 dcomplex* bli_zallocm( unsigned int m, unsigned int n ); 00079 00080 // --- apdiagmv --- 00081 00082 void bli_sapdiagmv( char side, char conj, int m, int n, float* x, int incx, float* a, int a_rs, int a_cs ); 00083 void bli_dapdiagmv( char side, char conj, int m, int n, double* x, int incx, double* a, int a_rs, int a_cs ); 00084 void bli_capdiagmv( char side, char conj, int m, int n, scomplex* x, int incx, scomplex* a, int a_rs, int a_cs ); 00085 void bli_zapdiagmv( char side, char conj, int m, int n, dcomplex* x, int incx, dcomplex* a, int a_rs, int a_cs ); 00086 00087 // --- create_contigm --- 00088 00089 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 ); 00090 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 ); 00091 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 ); 00092 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 ); 00093 00094 // --- create_contigmt --- 00095 00096 void bli_screate_contigmt( char 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 ); 00097 void bli_dcreate_contigmt( char 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 ); 00098 void bli_ccreate_contigmt( char 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 ); 00099 void bli_zcreate_contigmt( char 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 ); 00100 00101 // --- create_contigmr --- 00102 00103 void bli_screate_contigmr( char uplo, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00104 void bli_dcreate_contigmr( char uplo, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00105 void bli_ccreate_contigmr( char uplo, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00106 void bli_zcreate_contigmr( char uplo, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00107 00108 // --- create_contigmsr --- 00109 00110 void bli_screate_contigmsr( char side, char uplo, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00111 void bli_dcreate_contigmsr( char side, char uplo, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00112 void bli_ccreate_contigmsr( char side, char uplo, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00113 void bli_zcreate_contigmsr( char side, char uplo, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00114 00115 // --- free_contigm --- 00116 00117 void bli_sfree_contigm( float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00118 void bli_dfree_contigm( double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00119 void bli_cfree_contigm( scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00120 void bli_zfree_contigm( dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00121 00122 // --- free_saved_contigm --- 00123 00124 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 ); 00125 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 ); 00126 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 ); 00127 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 ); 00128 00129 // --- free_saved_contigmr --- 00130 00131 void bli_sfree_saved_contigmr( char uplo, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00132 void bli_dfree_saved_contigmr( char uplo, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00133 void bli_cfree_saved_contigmr( char uplo, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00134 void bli_zfree_saved_contigmr( char uplo, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00135 00136 // --- free_saved_contigmsr --- 00137 00138 void bli_sfree_saved_contigmsr( char side, char uplo, int m, int n, float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00139 void bli_dfree_saved_contigmsr( char side, char uplo, int m, int n, double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00140 void bli_cfree_saved_contigmsr( char side, char uplo, int m, int n, scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00141 void bli_zfree_saved_contigmsr( char side, char uplo, int m, int n, dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00142 00143 // --- ewscalv --- 00144 00145 void bli_sewscalv( char conj, int n, float* x, int incx, float* y, int incy ); 00146 void bli_dewscalv( char conj, int n, double* x, int incx, double* y, int incy ); 00147 void bli_cewscalv( char conj, int n, scomplex* x, int incx, scomplex* y, int incy ); 00148 void bli_zewscalv( char conj, int n, dcomplex* x, int incx, dcomplex* y, int incy ); 00149 00150 // --- ewscalmt --- 00151 00152 void bli_sewscalmt( char trans, int m, int n, float* a, int a_rs, int a_cs, float* b, int b_rs, int b_cs ); 00153 void bli_dewscalmt( char trans, int m, int n, double* a, int a_rs, int a_cs, double* b, int b_rs, int b_cs ); 00154 void bli_cewscalmt( char trans, int m, int n, scomplex* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00155 void bli_zewscalmt( char trans, int m, int n, dcomplex* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00156 00157 // --- free --- 00158 00159 void bli_sfree( float* p ); 00160 void bli_dfree( double* p ); 00161 void bli_cfree( scomplex* p ); 00162 void bli_zfree( dcomplex* p ); 00163 00164 // --- inverts --- 00165 00166 void bli_sinverts( char conj, float* alpha ); 00167 void bli_dinverts( char conj, double* alpha ); 00168 void bli_cinverts( char conj, scomplex* alpha ); 00169 void bli_zinverts( char conj, dcomplex* alpha ); 00170 00171 // --- invert2s --- 00172 00173 void bli_sinvert2s( char conj, float* alpha, float* beta ); 00174 void bli_dinvert2s( char conj, double* alpha, double* beta ); 00175 void bli_cinvert2s( char conj, scomplex* alpha, scomplex* beta ); 00176 void bli_zinvert2s( char conj, dcomplex* alpha, dcomplex* beta ); 00177 00178 // --- invertv --- 00179 00180 void bli_sinvertv( char conj, int n, float* x, int incx ); 00181 void bli_dinvertv( char conj, int n, double* x, int incx ); 00182 void bli_cinvertv( char conj, int n, scomplex* x, int incx ); 00183 void bli_zinvertv( char conj, int n, dcomplex* x, int incx ); 00184 00185 // --- ident --- 00186 00187 void bli_sident( int m, float* a, int a_rs, int a_cs ); 00188 void bli_dident( int m, double* a, int a_rs, int a_cs ); 00189 void bli_cident( int m, scomplex* a, int a_rs, int a_cs ); 00190 void bli_zident( int m, dcomplex* a, int a_rs, int a_cs ); 00191 00192 // --- rands --- 00193 00194 void bli_srands( float* alpha ); 00195 void bli_drands( double* alpha ); 00196 void bli_crands( scomplex* alpha ); 00197 void bli_zrands( dcomplex* alpha ); 00198 00199 // --- randv --- 00200 00201 void bli_srandv( int n, float* x, int incx ); 00202 void bli_drandv( int n, double* x, int incx ); 00203 void bli_crandv( int n, scomplex* x, int incx ); 00204 void bli_zrandv( int n, dcomplex* x, int incx ); 00205 00206 // --- randm --- 00207 00208 void bli_srandm( int m, int n, float* a, int a_rs, int a_cs ); 00209 void bli_drandm( int m, int n, double* a, int a_rs, int a_cs ); 00210 void bli_crandm( int m, int n, scomplex* a, int a_rs, int a_cs ); 00211 void bli_zrandm( int m, int n, dcomplex* a, int a_rs, int a_cs ); 00212 00213 // --- randmr --- 00214 void bli_srandmr( char uplo, char diag, int m, int n, float* a, int a_rs, int a_cs ); 00215 void bli_drandmr( char uplo, char diag, int m, int n, double* a, int a_rs, int a_cs ); 00216 void bli_crandmr( char uplo, char diag, int m, int n, scomplex* a, int a_rs, int a_cs ); 00217 void bli_zrandmr( char uplo, char diag, int m, int n, dcomplex* a, int a_rs, int a_cs ); 00218 00219 // --- set_contig_strides --- 00220 00221 void bli_set_contig_strides( int m, int n, int* rs, int* cs ); 00222 00223 // --- set_dims_with_side --- 00224 00225 void bli_set_dim_with_side( char side, int m, int n, int* dim_new ); 00226 00227 // --- set_dims_with_trans --- 00228 00229 void bli_set_dims_with_trans( char trans, int m, int n, int* m_new, int* n_new ); 00230 00231 // --- setm --- 00232 00233 void bli_srandm( int m, int n, float* a, int a_rs, int a_cs ); 00234 void bli_drandm( int m, int n, double* a, int a_rs, int a_cs ); 00235 void bli_crandm( int m, int n, scomplex* a, int a_rs, int a_cs ); 00236 void bli_zrandm( int m, int n, dcomplex* a, int a_rs, int a_cs ); 00237 00238 // --- setv --- 00239 00240 void bli_ssetv( int m, float* sigma, float* x, int incx ); 00241 void bli_dsetv( int m, double* sigma, double* x, int incx ); 00242 void bli_csetv( int m, scomplex* sigma, scomplex* x, int incx ); 00243 void bli_zsetv( int m, dcomplex* sigma, dcomplex* x, int incx ); 00244 00245 // --- setm --- 00246 00247 void bli_ssetm( int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00248 void bli_dsetm( int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00249 void bli_csetm( int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00250 void bli_zsetm( int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00251 00252 // --- setmr --- 00253 00254 void bli_ssetmr( char uplo, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00255 void bli_dsetmr( char uplo, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00256 void bli_csetmr( char uplo, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00257 void bli_zsetmr( char uplo, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00258 00259 // --- setdiag --- 00260 00261 void bli_ssetdiag( int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00262 void bli_dsetdiag( int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00263 void bli_csetdiag( int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00264 void bli_zsetdiag( int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00265 00266 // --- scalediag --- 00267 00268 void bli_sscalediag( char conj, int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00269 void bli_dscalediag( char conj, int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00270 void bli_cscalediag( char conj, int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00271 void bli_zscalediag( char conj, int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00272 void bli_csscalediag( char conj, int offset, int m, int n, float* sigma, scomplex* a, int a_rs, int a_cs ); 00273 void bli_zdscalediag( char conj, int offset, int m, int n, double* sigma, dcomplex* a, int a_rs, int a_cs ); 00274 00275 // --- shiftdiag --- 00276 00277 void bli_sshiftdiag( char conj, int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00278 void bli_dshiftdiag( char conj, int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00279 void bli_cshiftdiag( char conj, int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00280 void bli_zshiftdiag( char conj, int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00281 void bli_csshiftdiag( char conj, int offset, int m, int n, float* sigma, scomplex* a, int a_rs, int a_cs ); 00282 void bli_zdshiftdiag( char conj, int offset, int m, int n, double* sigma, dcomplex* a, int a_rs, int a_cs ); 00283 00284 // --- symmize --- 00285 00286 void bli_ssymmize( char conj, char uplo, int m, float* a, int a_rs, int a_cs ); 00287 void bli_dsymmize( char conj, char uplo, int m, double* a, int a_rs, int a_cs ); 00288 void bli_csymmize( char conj, char uplo, int m, scomplex* a, int a_rs, int a_cs ); 00289 void bli_zsymmize( char conj, char uplo, int m, dcomplex* a, int a_rs, int a_cs ); 00290