libflame
revision_anchor
|
00001 /* 00002 00003 Copyright (C) 2014, The University of Texas at Austin 00004 00005 This file is part of libflame and is available under the 3-Clause 00006 BSD license, which can be found in the LICENSE file at the top-level 00007 directory, or at http://opensource.org/licenses/BSD-3-Clause 00008 00009 */ 00010 00011 // --- Utility-level BLAS-like prototypes -------------------------------------- 00012 00013 // --- constant-generating functions --- 00014 00015 float bl1_s2( void ); 00016 double bl1_d2( void ); 00017 scomplex bl1_c2( void ); 00018 dcomplex bl1_z2( void ); 00019 float bl1_s1( void ); 00020 double bl1_d1( void ); 00021 scomplex bl1_c1( void ); 00022 dcomplex bl1_z1( void ); 00023 float bl1_s1h( void ); 00024 double bl1_d1h( void ); 00025 scomplex bl1_c1h( void ); 00026 dcomplex bl1_z1h( void ); 00027 float bl1_s0( void ); 00028 double bl1_d0( void ); 00029 scomplex bl1_c0( void ); 00030 dcomplex bl1_z0( void ); 00031 float bl1_sm1h( void ); 00032 double bl1_dm1h( void ); 00033 scomplex bl1_cm1h( void ); 00034 dcomplex bl1_zm1h( void ); 00035 float bl1_sm1( void ); 00036 double bl1_dm1( void ); 00037 scomplex bl1_cm1( void ); 00038 dcomplex bl1_zm1( void ); 00039 float bl1_sm2( void ); 00040 double bl1_dm2( void ); 00041 scomplex bl1_cm2( void ); 00042 dcomplex bl1_zm2( void ); 00043 00044 // --- allocv --- 00045 00046 void* bl1_vallocv( unsigned int n_elem, unsigned int elem_size ); 00047 int* bl1_iallocv( unsigned int n_elem ); 00048 float* bl1_sallocv( unsigned int n_elem ); 00049 double* bl1_dallocv( unsigned int n_elem ); 00050 scomplex* bl1_callocv( unsigned int n_elem ); 00051 dcomplex* bl1_zallocv( unsigned int n_elem ); 00052 00053 // --- allocm --- 00054 00055 void* bl1_vallocm( unsigned int m, unsigned int n, unsigned int elem_size ); 00056 int* bl1_iallocm( unsigned int m, unsigned int n ); 00057 float* bl1_sallocm( unsigned int m, unsigned int n ); 00058 double* bl1_dallocm( unsigned int m, unsigned int n ); 00059 scomplex* bl1_callocm( unsigned int m, unsigned int n ); 00060 dcomplex* bl1_zallocm( unsigned int m, unsigned int n ); 00061 00062 // --- apdiagmv --- 00063 00064 void bl1_sapdiagmv( side1_t side, conj1_t conj, int m, int n, float* x, int incx, float* a, int a_rs, int a_cs ); 00065 void bl1_dapdiagmv( side1_t side, conj1_t conj, int m, int n, double* x, int incx, double* a, int a_rs, int a_cs ); 00066 void bl1_csapdiagmv( side1_t side, conj1_t conj, int m, int n, float* x, int incx, scomplex* a, int a_rs, int a_cs ); 00067 void bl1_capdiagmv( side1_t side, conj1_t conj, int m, int n, scomplex* x, int incx, scomplex* a, int a_rs, int a_cs ); 00068 void bl1_zdapdiagmv( side1_t side, conj1_t conj, int m, int n, double* x, int incx, dcomplex* a, int a_rs, int a_cs ); 00069 void bl1_zapdiagmv( side1_t side, conj1_t conj, int m, int n, dcomplex* x, int incx, dcomplex* a, int a_rs, int a_cs ); 00070 00071 // --- create_contigm --- 00072 00073 void bl1_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 ); 00074 void bl1_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 ); 00075 void bl1_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 ); 00076 void bl1_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 ); 00077 00078 // --- create_contigmt --- 00079 00080 void bl1_screate_contigmt( trans1_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 ); 00081 void bl1_dcreate_contigmt( trans1_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 ); 00082 void bl1_ccreate_contigmt( trans1_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 ); 00083 void bl1_zcreate_contigmt( trans1_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 ); 00084 00085 // --- create_contigmr --- 00086 00087 void bl1_screate_contigmr( uplo1_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 ); 00088 void bl1_dcreate_contigmr( uplo1_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 ); 00089 void bl1_ccreate_contigmr( uplo1_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 ); 00090 void bl1_zcreate_contigmr( uplo1_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 ); 00091 00092 // --- create_contigmsr --- 00093 00094 void bl1_screate_contigmsr( side1_t side, uplo1_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 ); 00095 void bl1_dcreate_contigmsr( side1_t side, uplo1_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 ); 00096 void bl1_ccreate_contigmsr( side1_t side, uplo1_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 ); 00097 void bl1_zcreate_contigmsr( side1_t side, uplo1_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 ); 00098 00099 // --- free_contigm --- 00100 00101 void bl1_sfree_contigm( float* a_save, int a_rs_save, int a_cs_save, float** a, int* a_rs, int* a_cs ); 00102 void bl1_dfree_contigm( double* a_save, int a_rs_save, int a_cs_save, double** a, int* a_rs, int* a_cs ); 00103 void bl1_cfree_contigm( scomplex* a_save, int a_rs_save, int a_cs_save, scomplex** a, int* a_rs, int* a_cs ); 00104 void bl1_zfree_contigm( dcomplex* a_save, int a_rs_save, int a_cs_save, dcomplex** a, int* a_rs, int* a_cs ); 00105 00106 // --- free_saved_contigm --- 00107 00108 void bl1_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 ); 00109 void bl1_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 ); 00110 void bl1_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 ); 00111 void bl1_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 ); 00112 00113 // --- free_saved_contigmr --- 00114 00115 void bl1_sfree_saved_contigmr( uplo1_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 ); 00116 void bl1_dfree_saved_contigmr( uplo1_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 ); 00117 void bl1_cfree_saved_contigmr( uplo1_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 ); 00118 void bl1_zfree_saved_contigmr( uplo1_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 ); 00119 00120 // --- free_saved_contigmsr --- 00121 00122 void bl1_sfree_saved_contigmsr( side1_t side, uplo1_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 ); 00123 void bl1_dfree_saved_contigmsr( side1_t side, uplo1_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 ); 00124 void bl1_cfree_saved_contigmsr( side1_t side, uplo1_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 ); 00125 void bl1_zfree_saved_contigmsr( side1_t side, uplo1_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 ); 00126 00127 // --- ewinvscalv --- 00128 00129 void bl1_sewinvscalv( conj1_t conj, int n, float* x, int incx, float* y, int incy ); 00130 void bl1_dewinvscalv( conj1_t conj, int n, double* x, int incx, double* y, int incy ); 00131 void bl1_csewinvscalv( conj1_t conj, int n, float* x, int incx, scomplex* y, int incy ); 00132 void bl1_cewinvscalv( conj1_t conj, int n, scomplex* x, int incx, scomplex* y, int incy ); 00133 void bl1_zdewinvscalv( conj1_t conj, int n, double* x, int incx, dcomplex* y, int incy ); 00134 void bl1_zewinvscalv( conj1_t conj, int n, dcomplex* x, int incx, dcomplex* y, int incy ); 00135 00136 // --- ewscalmt --- 00137 00138 void bl1_sewinvscalmt( trans1_t trans, int m, int n, float* a, int a_rs, int a_cs, float* b, int b_rs, int b_cs ); 00139 void bl1_dewinvscalmt( trans1_t trans, int m, int n, double* a, int a_rs, int a_cs, double* b, int b_rs, int b_cs ); 00140 void bl1_csewinvscalmt( trans1_t trans, int m, int n, float* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00141 void bl1_cewinvscalmt( trans1_t trans, int m, int n, scomplex* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00142 void bl1_zdewinvscalmt( trans1_t trans, int m, int n, double* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00143 void bl1_zewinvscalmt( trans1_t trans, int m, int n, dcomplex* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00144 00145 // --- ewscalv --- 00146 00147 void bl1_sewscalv( conj1_t conj, int n, float* x, int incx, float* y, int incy ); 00148 void bl1_dewscalv( conj1_t conj, int n, double* x, int incx, double* y, int incy ); 00149 void bl1_csewscalv( conj1_t conj, int n, float* x, int incx, scomplex* y, int incy ); 00150 void bl1_cewscalv( conj1_t conj, int n, scomplex* x, int incx, scomplex* y, int incy ); 00151 void bl1_zdewscalv( conj1_t conj, int n, double* x, int incx, dcomplex* y, int incy ); 00152 void bl1_zewscalv( conj1_t conj, int n, dcomplex* x, int incx, dcomplex* y, int incy ); 00153 00154 // --- ewscalmt --- 00155 00156 void bl1_sewscalmt( trans1_t trans, int m, int n, float* a, int a_rs, int a_cs, float* b, int b_rs, int b_cs ); 00157 void bl1_dewscalmt( trans1_t trans, int m, int n, double* a, int a_rs, int a_cs, double* b, int b_rs, int b_cs ); 00158 void bl1_csewscalmt( trans1_t trans, int m, int n, float* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00159 void bl1_cewscalmt( trans1_t trans, int m, int n, scomplex* a, int a_rs, int a_cs, scomplex* b, int b_rs, int b_cs ); 00160 void bl1_zdewscalmt( trans1_t trans, int m, int n, double* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00161 void bl1_zewscalmt( trans1_t trans, int m, int n, dcomplex* a, int a_rs, int a_cs, dcomplex* b, int b_rs, int b_cs ); 00162 00163 // --- free --- 00164 00165 void bl1_vfree( void* p ); 00166 void bl1_ifree( int* p ); 00167 void bl1_sfree( float* p ); 00168 void bl1_dfree( double* p ); 00169 void bl1_cfree( scomplex* p ); 00170 void bl1_zfree( dcomplex* p ); 00171 00172 // --- inverts --- 00173 00174 void bl1_sinverts( conj1_t conj, float* alpha ); 00175 void bl1_dinverts( conj1_t conj, double* alpha ); 00176 void bl1_cinverts( conj1_t conj, scomplex* alpha ); 00177 void bl1_zinverts( conj1_t conj, dcomplex* alpha ); 00178 00179 // --- invert2s --- 00180 00181 void bl1_sinvert2s( conj1_t conj, float* alpha, float* beta ); 00182 void bl1_dinvert2s( conj1_t conj, double* alpha, double* beta ); 00183 void bl1_cinvert2s( conj1_t conj, scomplex* alpha, scomplex* beta ); 00184 void bl1_zinvert2s( conj1_t conj, dcomplex* alpha, dcomplex* beta ); 00185 00186 // --- invertv --- 00187 00188 void bl1_sinvertv( conj1_t conj, int n, float* x, int incx ); 00189 void bl1_dinvertv( conj1_t conj, int n, double* x, int incx ); 00190 void bl1_cinvertv( conj1_t conj, int n, scomplex* x, int incx ); 00191 void bl1_zinvertv( conj1_t conj, int n, dcomplex* x, int incx ); 00192 00193 // --- ident --- 00194 00195 void bl1_sident( int m, float* a, int a_rs, int a_cs ); 00196 void bl1_dident( int m, double* a, int a_rs, int a_cs ); 00197 void bl1_cident( int m, scomplex* a, int a_rs, int a_cs ); 00198 void bl1_zident( int m, dcomplex* a, int a_rs, int a_cs ); 00199 00200 // --- maxabsv --- 00201 00202 void bl1_smaxabsv( int n, float* x, int incx, float* maxabs ); 00203 void bl1_dmaxabsv( int n, double* x, int incx, double* maxabs ); 00204 void bl1_cmaxabsv( int n, scomplex* x, int incx, float* maxabs ); 00205 void bl1_zmaxabsv( int n, dcomplex* x, int incx, double* maxabs ); 00206 00207 // --- maxabsm --- 00208 00209 void bl1_smaxabsm( int m, int n, float* a, int a_rs, int a_cs, float* maxabs ); 00210 void bl1_dmaxabsm( int m, int n, double* a, int a_rs, int a_cs, double* maxabs ); 00211 void bl1_cmaxabsm( int m, int n, scomplex* a, int a_rs, int a_cs, float* maxabs ); 00212 void bl1_zmaxabsm( int m, int n, dcomplex* a, int a_rs, int a_cs, double* maxabs ); 00213 00214 // --- maxabsmr --- 00215 00216 void bl1_smaxabsmr( uplo1_t uplo, int m, int n, float* a, int a_rs, int a_cs, float* maxabs ); 00217 void bl1_dmaxabsmr( uplo1_t uplo, int m, int n, double* a, int a_rs, int a_cs, double* maxabs ); 00218 void bl1_cmaxabsmr( uplo1_t uplo, int m, int n, scomplex* a, int a_rs, int a_cs, float* maxabs ); 00219 void bl1_zmaxabsmr( uplo1_t uplo, int m, int n, dcomplex* a, int a_rs, int a_cs, double* maxabs ); 00220 00221 // --- rands --- 00222 00223 void bl1_srands( float* alpha ); 00224 void bl1_drands( double* alpha ); 00225 void bl1_crands( scomplex* alpha ); 00226 void bl1_zrands( dcomplex* alpha ); 00227 00228 // --- randv --- 00229 00230 void bl1_srandv( int n, float* x, int incx ); 00231 void bl1_drandv( int n, double* x, int incx ); 00232 void bl1_crandv( int n, scomplex* x, int incx ); 00233 void bl1_zrandv( int n, dcomplex* x, int incx ); 00234 00235 // --- randm --- 00236 00237 void bl1_srandm( int m, int n, float* a, int a_rs, int a_cs ); 00238 void bl1_drandm( int m, int n, double* a, int a_rs, int a_cs ); 00239 void bl1_crandm( int m, int n, scomplex* a, int a_rs, int a_cs ); 00240 void bl1_zrandm( int m, int n, dcomplex* a, int a_rs, int a_cs ); 00241 00242 // --- randmr --- 00243 void bl1_srandmr( uplo1_t uplo, diag1_t diag, int m, int n, float* a, int a_rs, int a_cs ); 00244 void bl1_drandmr( uplo1_t uplo, diag1_t diag, int m, int n, double* a, int a_rs, int a_cs ); 00245 void bl1_crandmr( uplo1_t uplo, diag1_t diag, int m, int n, scomplex* a, int a_rs, int a_cs ); 00246 void bl1_zrandmr( uplo1_t uplo, diag1_t diag, int m, int n, dcomplex* a, int a_rs, int a_cs ); 00247 00248 // --- set_contig_strides --- 00249 00250 void bl1_set_contig_strides( int m, int n, int* rs, int* cs ); 00251 00252 // --- set_dims_with_side --- 00253 00254 void bl1_set_dim_with_side( side1_t side, int m, int n, int* dim_new ); 00255 00256 // --- set_dims_with_trans --- 00257 00258 void bl1_set_dims_with_trans( trans1_t trans, int m, int n, int* m_new, int* n_new ); 00259 00260 // --- setv --- 00261 00262 void bl1_isetv( int m, int* sigma, int* x, int incx ); 00263 void bl1_ssetv( int m, float* sigma, float* x, int incx ); 00264 void bl1_dsetv( int m, double* sigma, double* x, int incx ); 00265 void bl1_csetv( int m, scomplex* sigma, scomplex* x, int incx ); 00266 void bl1_zsetv( int m, dcomplex* sigma, dcomplex* x, int incx ); 00267 00268 // --- setm --- 00269 00270 void bl1_isetm( int m, int n, int* sigma, int* a, int a_rs, int a_cs ); 00271 void bl1_ssetm( int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00272 void bl1_dsetm( int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00273 void bl1_csetm( int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00274 void bl1_zsetm( int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00275 00276 // --- setmr --- 00277 00278 void bl1_ssetmr( uplo1_t uplo, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00279 void bl1_dsetmr( uplo1_t uplo, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00280 void bl1_csetmr( uplo1_t uplo, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00281 void bl1_zsetmr( uplo1_t uplo, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00282 00283 // --- setdiag --- 00284 00285 void bl1_isetdiag( int offset, int m, int n, int* sigma, int* a, int a_rs, int a_cs ); 00286 void bl1_ssetdiag( int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00287 void bl1_dsetdiag( int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00288 void bl1_csetdiag( int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00289 void bl1_zsetdiag( int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00290 00291 // --- scalediag --- 00292 00293 void bl1_sscalediag( conj1_t conj, int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00294 void bl1_dscalediag( conj1_t conj, int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00295 void bl1_cscalediag( conj1_t conj, int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00296 void bl1_zscalediag( conj1_t conj, int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00297 void bl1_csscalediag( conj1_t conj, int offset, int m, int n, float* sigma, scomplex* a, int a_rs, int a_cs ); 00298 void bl1_zdscalediag( conj1_t conj, int offset, int m, int n, double* sigma, dcomplex* a, int a_rs, int a_cs ); 00299 00300 // --- shiftdiag --- 00301 00302 void bl1_sshiftdiag( conj1_t conj, int offset, int m, int n, float* sigma, float* a, int a_rs, int a_cs ); 00303 void bl1_dshiftdiag( conj1_t conj, int offset, int m, int n, double* sigma, double* a, int a_rs, int a_cs ); 00304 void bl1_cshiftdiag( conj1_t conj, int offset, int m, int n, scomplex* sigma, scomplex* a, int a_rs, int a_cs ); 00305 void bl1_zshiftdiag( conj1_t conj, int offset, int m, int n, dcomplex* sigma, dcomplex* a, int a_rs, int a_cs ); 00306 void bl1_csshiftdiag( conj1_t conj, int offset, int m, int n, float* sigma, scomplex* a, int a_rs, int a_cs ); 00307 void bl1_zdshiftdiag( conj1_t conj, int offset, int m, int n, double* sigma, dcomplex* a, int a_rs, int a_cs ); 00308 00309 // --- symmize --- 00310 00311 void bl1_ssymmize( conj1_t conj, uplo1_t uplo, int m, float* a, int a_rs, int a_cs ); 00312 void bl1_dsymmize( conj1_t conj, uplo1_t uplo, int m, double* a, int a_rs, int a_cs ); 00313 void bl1_csymmize( conj1_t conj, uplo1_t uplo, int m, scomplex* a, int a_rs, int a_cs ); 00314 void bl1_zsymmize( conj1_t conj, uplo1_t uplo, int m, dcomplex* a, int a_rs, int a_cs ); 00315