libflame  revision_anchor
blis_prototypes_util.h
Go to the documentation of this file.
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