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