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 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