libflame revision_anchor
|
00001 /* 00002 libflame 00003 An object-based infrastructure for developing high-performance 00004 dense linear algebra libraries. 00005 00006 copyright (C) 2009, 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 00034 // 00035 // LAPACK-level 00036 // 00037 00038 struct fla_chol_s 00039 { 00040 FLA_Matrix_type matrix_type; 00041 int variant; 00042 fla_blocksize_t* blocksize; 00043 struct fla_chol_s* sub_chol; 00044 struct fla_herk_s* sub_herk; 00045 struct fla_trsm_s* sub_trsm; 00046 struct fla_gemm_s* sub_gemm; 00047 }; 00048 typedef struct fla_chol_s fla_chol_t; 00049 00050 00051 struct fla_ttmm_s 00052 { 00053 FLA_Matrix_type matrix_type; 00054 int variant; 00055 fla_blocksize_t* blocksize; 00056 struct fla_ttmm_s* sub_ttmm; 00057 struct fla_herk_s* sub_herk; 00058 struct fla_trmm_s* sub_trmm; 00059 struct fla_gemm_s* sub_gemm; 00060 }; 00061 typedef struct fla_ttmm_s fla_ttmm_t; 00062 00063 00064 struct fla_appiv_s 00065 { 00066 FLA_Matrix_type matrix_type; 00067 int variant; 00068 fla_blocksize_t* blocksize; 00069 struct fla_appiv_s* sub_appiv; 00070 }; 00071 typedef struct fla_appiv_s fla_appiv_t; 00072 00073 00074 struct fla_lu_s 00075 { 00076 FLA_Matrix_type matrix_type; 00077 int variant; 00078 fla_blocksize_t* blocksize; 00079 struct fla_lu_s* sub_lu; 00080 struct fla_gemm_s* sub_gemm1; 00081 struct fla_gemm_s* sub_gemm2; 00082 struct fla_gemm_s* sub_gemm3; 00083 struct fla_trsm_s* sub_trsm1; 00084 struct fla_trsm_s* sub_trsm2; 00085 struct fla_appiv_s* sub_appiv1; 00086 struct fla_appiv_s* sub_appiv2; 00087 }; 00088 typedef struct fla_lu_s fla_lu_t; 00089 00090 00091 struct fla_qr_ut_s 00092 { 00093 FLA_Matrix_type matrix_type; 00094 int variant; 00095 fla_blocksize_t* blocksize; 00096 struct fla_qr_ut_s* sub_qrut; 00097 struct fla_apqut_s* sub_apqut; 00098 }; 00099 typedef struct fla_qr_ut_s fla_qrut_t; 00100 00101 00102 struct fla_qr2_ut_s 00103 { 00104 FLA_Matrix_type matrix_type; 00105 int variant; 00106 fla_blocksize_t* blocksize; 00107 struct fla_qr2_ut_s* sub_qr2ut; 00108 struct fla_gemm_s* sub_gemm1; 00109 struct fla_gemm_s* sub_gemm2; 00110 struct fla_trsm_s* sub_trsm; 00111 struct fla_copy_s* sub_copy; 00112 struct fla_axpy_s* sub_axpy; 00113 }; 00114 typedef struct fla_qr2_ut_s fla_qr2ut_t; 00115 00116 00117 struct fla_qr_ut_inc_s 00118 { 00119 FLA_Matrix_type matrix_type; 00120 int variant; 00121 fla_blocksize_t* blocksize; 00122 struct fla_qr_ut_s* sub_qrut; 00123 struct fla_qr2_ut_s* sub_qr2ut; 00124 struct fla_apqut_s* sub_apqut; 00125 struct fla_apq2ut_s* sub_apq2ut; 00126 }; 00127 typedef struct fla_qr_ut_inc_s fla_qrutinc_t; 00128 00129 00130 struct fla_lq_ut_s 00131 { 00132 FLA_Matrix_type matrix_type; 00133 int variant; 00134 fla_blocksize_t* blocksize; 00135 struct fla_lq_ut_s* sub_lqut; 00136 struct fla_apqut_s* sub_apqut; 00137 }; 00138 typedef struct fla_lq_ut_s fla_lqut_t; 00139 00140 struct fla_hess_ut_s 00141 { 00142 FLA_Matrix_type matrix_type; 00143 int variant; 00144 fla_blocksize_t* blocksize; 00145 }; 00146 typedef struct fla_hess_ut_s fla_hessut_t; 00147 00148 struct fla_tridiag_ut_s 00149 { 00150 FLA_Matrix_type matrix_type; 00151 int variant; 00152 fla_blocksize_t* blocksize; 00153 }; 00154 typedef struct fla_tridiag_ut_s fla_tridiagut_t; 00155 00156 struct fla_bidiag_ut_s 00157 { 00158 FLA_Matrix_type matrix_type; 00159 int variant; 00160 fla_blocksize_t* blocksize; 00161 }; 00162 typedef struct fla_bidiag_ut_s fla_bidiagut_t; 00163 00164 struct fla_trinv_s 00165 { 00166 FLA_Matrix_type matrix_type; 00167 int variant; 00168 fla_blocksize_t* blocksize; 00169 struct fla_trinv_s* sub_trinv; 00170 struct fla_gemm_s* sub_gemm; 00171 struct fla_trmm_s* sub_trmm; 00172 struct fla_trsm_s* sub_trsm1; 00173 struct fla_trsm_s* sub_trsm2; 00174 }; 00175 typedef struct fla_trinv_s fla_trinv_t; 00176 00177 00178 struct fla_sylv_s 00179 { 00180 FLA_Matrix_type matrix_type; 00181 int variant; 00182 fla_blocksize_t* blocksize; 00183 struct fla_sylv_s* sub_sylv1; 00184 struct fla_sylv_s* sub_sylv2; 00185 struct fla_sylv_s* sub_sylv3; 00186 struct fla_gemm_s* sub_gemm1; 00187 struct fla_gemm_s* sub_gemm2; 00188 struct fla_gemm_s* sub_gemm3; 00189 struct fla_gemm_s* sub_gemm4; 00190 struct fla_gemm_s* sub_gemm5; 00191 struct fla_gemm_s* sub_gemm6; 00192 struct fla_gemm_s* sub_gemm7; 00193 struct fla_gemm_s* sub_gemm8; 00194 }; 00195 typedef struct fla_sylv_s fla_sylv_t; 00196 00197 00198 struct fla_lyap_s 00199 { 00200 FLA_Matrix_type matrix_type; 00201 int variant; 00202 fla_blocksize_t* blocksize; 00203 struct fla_scal_s* sub_scal; 00204 struct fla_lyap_s* sub_lyap; 00205 struct fla_sylv_s* sub_sylv; 00206 struct fla_gemm_s* sub_gemm1; 00207 struct fla_gemm_s* sub_gemm2; 00208 struct fla_hemm_s* sub_hemm; 00209 struct fla_her2k_s* sub_her2k; 00210 }; 00211 typedef struct fla_lyap_s fla_lyap_t; 00212 00213 00214 struct fla_spdinv_s 00215 { 00216 FLA_Matrix_type matrix_type; 00217 int variant; 00218 fla_blocksize_t* blocksize; 00219 struct fla_chol_s* sub_chol; 00220 struct fla_trinv_s* sub_trinv; 00221 struct fla_ttmm_s* sub_ttmm; 00222 }; 00223 typedef struct fla_spdinv_s fla_spdinv_t; 00224 00225 00226 struct fla_apqut_s 00227 { 00228 FLA_Matrix_type matrix_type; 00229 int variant; 00230 fla_blocksize_t* blocksize; 00231 struct fla_apqut_s* sub_apqut; 00232 struct fla_trmm_s* sub_trmm1; 00233 struct fla_trmm_s* sub_trmm2; 00234 struct fla_gemm_s* sub_gemm1; 00235 struct fla_gemm_s* sub_gemm2; 00236 struct fla_trsm_s* sub_trsm; 00237 struct fla_copyt_s* sub_copyt; 00238 struct fla_axpyt_s* sub_axpyt; 00239 }; 00240 typedef struct fla_apqut_s fla_apqut_t; 00241 00242 00243 struct fla_apq2ut_s 00244 { 00245 FLA_Matrix_type matrix_type; 00246 int variant; 00247 fla_blocksize_t* blocksize; 00248 struct fla_apq2ut_s* sub_apq2ut; 00249 struct fla_gemm_s* sub_gemm1; 00250 struct fla_gemm_s* sub_gemm2; 00251 struct fla_trsm_s* sub_trsm; 00252 struct fla_copyt_s* sub_copyt; 00253 struct fla_axpyt_s* sub_axpyt; 00254 }; 00255 typedef struct fla_apq2ut_s fla_apq2ut_t; 00256 00257 00258 struct fla_apqutinc_s 00259 { 00260 FLA_Matrix_type matrix_type; 00261 int variant; 00262 fla_blocksize_t* blocksize; 00263 struct fla_apqut_s* sub_apqut; 00264 struct fla_apq2ut_s* sub_apq2ut; 00265 }; 00266 typedef struct fla_apqutinc_s fla_apqutinc_t; 00267 00268 00269 struct fla_uddateut_s 00270 { 00271 FLA_Matrix_type matrix_type; 00272 int variant; 00273 fla_blocksize_t* blocksize; 00274 struct fla_uddateut_s* sub_uddateut; 00275 struct fla_apqudut_s* sub_apqudut; 00276 }; 00277 typedef struct fla_uddateut_s fla_uddateut_t; 00278 00279 00280 struct fla_apqudut_s 00281 { 00282 FLA_Matrix_type matrix_type; 00283 int variant; 00284 fla_blocksize_t* blocksize; 00285 struct fla_apqudut_s* sub_apqudut; 00286 struct fla_gemm_s* sub_gemm1; 00287 struct fla_gemm_s* sub_gemm2; 00288 struct fla_gemm_s* sub_gemm3; 00289 struct fla_gemm_s* sub_gemm4; 00290 struct fla_trsm_s* sub_trsm; 00291 struct fla_copyt_s* sub_copyt; 00292 struct fla_axpyt_s* sub_axpyt; 00293 }; 00294 typedef struct fla_apqudut_s fla_apqudut_t; 00295 00296 00297 struct fla_uddateutinc_s 00298 { 00299 FLA_Matrix_type matrix_type; 00300 int variant; 00301 fla_blocksize_t* blocksize; 00302 struct fla_uddateut_s* sub_uddateut; 00303 struct fla_apqudut_s* sub_apqudut; 00304 }; 00305 typedef struct fla_uddateutinc_s fla_uddateutinc_t; 00306 00307 00308 struct fla_apqudutinc_s 00309 { 00310 FLA_Matrix_type matrix_type; 00311 int variant; 00312 fla_blocksize_t* blocksize; 00313 struct fla_apqudut_s* sub_apqudut; 00314 }; 00315 typedef struct fla_apqudutinc_s fla_apqudutinc_t; 00316 00317 00318 struct fla_eig_gest_s 00319 { 00320 FLA_Matrix_type matrix_type; 00321 int variant; 00322 fla_blocksize_t* blocksize; 00323 struct fla_eig_gest_s* sub_eig_gest; 00324 struct fla_axpy_s* sub_axpy1; 00325 struct fla_axpy_s* sub_axpy2; 00326 struct fla_gemm_s* sub_gemm1; 00327 struct fla_gemm_s* sub_gemm2; 00328 struct fla_gemm_s* sub_gemm3; 00329 struct fla_hemm_s* sub_hemm; 00330 struct fla_her2k_s* sub_her2k; 00331 struct fla_trmm_s* sub_trmm1; 00332 struct fla_trmm_s* sub_trmm2; 00333 struct fla_trsm_s* sub_trsm1; 00334 struct fla_trsm_s* sub_trsm2; 00335 }; 00336 typedef struct fla_eig_gest_s fla_eig_gest_t; 00337 00338 00339 #define FLA_Cntl_sub_chol( cntl ) cntl->sub_chol 00340 #define FLA_Cntl_sub_lu( cntl ) cntl->sub_lu 00341 #define FLA_Cntl_sub_qr( cntl ) cntl->sub_qr 00342 #define FLA_Cntl_sub_qrut( cntl ) cntl->sub_qrut 00343 #define FLA_Cntl_sub_qr2ut( cntl ) cntl->sub_qr2ut 00344 #define FLA_Cntl_sub_lq( cntl ) cntl->sub_lq 00345 #define FLA_Cntl_sub_lqut( cntl ) cntl->sub_lqut 00346 #define FLA_Cntl_sub_trinv( cntl ) cntl->sub_trinv 00347 #define FLA_Cntl_sub_ttmm( cntl ) cntl->sub_ttmm 00348 #define FLA_Cntl_sub_sylv( cntl ) cntl->sub_sylv 00349 #define FLA_Cntl_sub_sylv1( cntl ) cntl->sub_sylv1 00350 #define FLA_Cntl_sub_sylv2( cntl ) cntl->sub_sylv2 00351 #define FLA_Cntl_sub_sylv3( cntl ) cntl->sub_sylv3 00352 #define FLA_Cntl_sub_lyap( cntl ) cntl->sub_lyap 00353 #define FLA_Cntl_sub_appiv( cntl ) cntl->sub_appiv 00354 #define FLA_Cntl_sub_appiv1( cntl ) cntl->sub_appiv1 00355 #define FLA_Cntl_sub_appiv2( cntl ) cntl->sub_appiv2 00356 #define FLA_Cntl_sub_apqut( cntl ) cntl->sub_apqut 00357 #define FLA_Cntl_sub_apq2ut( cntl ) cntl->sub_apq2ut 00358 #define FLA_Cntl_sub_uddateut( cntl ) cntl->sub_uddateut 00359 #define FLA_Cntl_sub_apqudut( cntl ) cntl->sub_apqudut 00360 #define FLA_Cntl_sub_hessut( cntl ) cntl->sub_hessut 00361 #define FLA_Cntl_sub_tridiagut( cntl ) cntl->sub_tridiagut 00362 #define FLA_Cntl_sub_bidiagut( cntl ) cntl->sub_bidiagut 00363 #define FLA_Cntl_sub_eig_gest( cntl ) cntl->sub_eig_gest 00364 00365 00366 fla_chol_t* FLA_Cntl_chol_obj_create( FLA_Matrix_type matrix_type, 00367 int variant, 00368 fla_blocksize_t* blocksize, 00369 fla_chol_t* sub_chol, 00370 fla_herk_t* sub_herk, 00371 fla_trsm_t* sub_trsm, 00372 fla_gemm_t* sub_gemm ); 00373 fla_lu_t* FLA_Cntl_lu_obj_create( FLA_Matrix_type matrix_type, 00374 int variant, 00375 fla_blocksize_t* blocksize, 00376 fla_lu_t* sub_lu, 00377 fla_gemm_t* sub_gemm1, 00378 fla_gemm_t* sub_gemm2, 00379 fla_gemm_t* sub_gemm3, 00380 fla_trsm_t* sub_trsm1, 00381 fla_trsm_t* sub_trsm2, 00382 fla_appiv_t* sub_appiv1, 00383 fla_appiv_t* sub_appiv2 ); 00384 fla_appiv_t* FLA_Cntl_appiv_obj_create( FLA_Matrix_type matrix_type, 00385 int variant, 00386 fla_blocksize_t* blocksize, 00387 fla_appiv_t* sub_appiv ); 00388 fla_qrut_t* FLA_Cntl_qrut_obj_create( FLA_Matrix_type matrix_type, 00389 int variant, 00390 fla_blocksize_t* blocksize, 00391 fla_qrut_t* sub_qrut, 00392 fla_apqut_t* sub_apqut ); 00393 fla_qr2ut_t* FLA_Cntl_qr2ut_obj_create( FLA_Matrix_type matrix_type, 00394 int variant, 00395 fla_blocksize_t* blocksize, 00396 fla_qr2ut_t* sub_qr2ut, 00397 fla_gemm_t* sub_gemm1, 00398 fla_gemm_t* sub_gemm2, 00399 fla_trsm_t* sub_trsm, 00400 fla_copy_t* sub_copy, 00401 fla_axpy_t* sub_axpy ); 00402 fla_lqut_t* FLA_Cntl_lqut_obj_create( FLA_Matrix_type matrix_type, 00403 int variant, 00404 fla_blocksize_t* blocksize, 00405 fla_lqut_t* sub_lqut, 00406 fla_apqut_t* sub_apqut ); 00407 fla_hessut_t* FLA_Cntl_hessut_obj_create( FLA_Matrix_type matrix_type, 00408 int variant, 00409 fla_blocksize_t* blocksize ); 00410 fla_tridiagut_t* FLA_Cntl_tridiagut_obj_create( FLA_Matrix_type matrix_type, 00411 int variant, 00412 fla_blocksize_t* blocksize ); 00413 fla_bidiagut_t* FLA_Cntl_bidiagut_obj_create( FLA_Matrix_type matrix_type, 00414 int variant, 00415 fla_blocksize_t* blocksize ); 00416 fla_trinv_t* FLA_Cntl_trinv_obj_create( FLA_Matrix_type matrix_type, 00417 int variant, 00418 fla_blocksize_t* blocksize, 00419 fla_trinv_t* sub_trinv, 00420 fla_trmm_t* sub_trmm, 00421 fla_trsm_t* sub_trsm1, 00422 fla_trsm_t* sub_trsm2, 00423 fla_gemm_t* sub_gemm ); 00424 fla_ttmm_t* FLA_Cntl_ttmm_obj_create( FLA_Matrix_type matrix_type, 00425 int variant, 00426 fla_blocksize_t* blocksize, 00427 fla_ttmm_t* sub_ttmm, 00428 fla_herk_t* sub_herk, 00429 fla_trmm_t* sub_trmm, 00430 fla_gemm_t* sub_gemm ); 00431 fla_sylv_t* FLA_Cntl_sylv_obj_create( FLA_Matrix_type matrix_type, 00432 int variant, 00433 fla_blocksize_t* blocksize, 00434 fla_sylv_t* sub_sylv1, 00435 fla_sylv_t* sub_sylv2, 00436 fla_sylv_t* sub_sylv3, 00437 fla_gemm_t* sub_gemm1, 00438 fla_gemm_t* sub_gemm2, 00439 fla_gemm_t* sub_gemm3, 00440 fla_gemm_t* sub_gemm4, 00441 fla_gemm_t* sub_gemm5, 00442 fla_gemm_t* sub_gemm6, 00443 fla_gemm_t* sub_gemm7, 00444 fla_gemm_t* sub_gemm8 ); 00445 fla_lyap_t* FLA_Cntl_lyap_obj_create( FLA_Matrix_type matrix_type, 00446 int variant, 00447 fla_blocksize_t* blocksize, 00448 fla_scal_t* sub_scal, 00449 fla_lyap_t* sub_lyap, 00450 fla_sylv_t* sub_sylv, 00451 fla_gemm_t* sub_gemm1, 00452 fla_gemm_t* sub_gemm2, 00453 fla_hemm_t* sub_hemm, 00454 fla_her2k_t* sub_her2k ); 00455 fla_spdinv_t* FLA_Cntl_spdinv_obj_create( FLA_Matrix_type matrix_type, 00456 int variant, 00457 fla_blocksize_t* blocksize, 00458 fla_chol_t* sub_chol, 00459 fla_trinv_t* sub_trinv, 00460 fla_ttmm_t* sub_ttmm ); 00461 fla_apqut_t* FLA_Cntl_apqut_obj_create( FLA_Matrix_type matrix_type, 00462 int variant, 00463 fla_blocksize_t* blocksize, 00464 fla_apqut_t* sub_apqut, 00465 fla_trmm_t* sub_trmm1, 00466 fla_trmm_t* sub_trmm2, 00467 fla_gemm_t* sub_gemm1, 00468 fla_gemm_t* sub_gemm2, 00469 fla_trsm_t* sub_trsm, 00470 fla_copyt_t* sub_copyt, 00471 fla_axpyt_t* sub_axpyt ); 00472 fla_apq2ut_t* FLA_Cntl_apq2ut_obj_create( FLA_Matrix_type matrix_type, 00473 int variant, 00474 fla_blocksize_t* blocksize, 00475 fla_apq2ut_t* sub_apq2ut, 00476 fla_gemm_t* sub_gemm1, 00477 fla_gemm_t* sub_gemm2, 00478 fla_trsm_t* sub_trsm, 00479 fla_copyt_t* sub_copyt, 00480 fla_axpyt_t* sub_axpyt ); 00481 fla_qrutinc_t* FLA_Cntl_qrutinc_obj_create( FLA_Matrix_type matrix_type, 00482 int variant, 00483 fla_blocksize_t* blocksize, 00484 fla_qrut_t* sub_qrut, 00485 fla_apqut_t* sub_apqut, 00486 fla_qr2ut_t* sub_qr2ut, 00487 fla_apq2ut_t* sub_apq2ut ); 00488 fla_apqutinc_t* FLA_Cntl_apqutinc_obj_create( FLA_Matrix_type matrix_type, 00489 int variant, 00490 fla_blocksize_t* blocksize, 00491 fla_apqut_t* sub_apqut, 00492 fla_apq2ut_t* sub_apq2ut ); 00493 fla_uddateut_t* FLA_Cntl_uddateut_obj_create( FLA_Matrix_type matrix_type, 00494 int variant, 00495 fla_blocksize_t* blocksize, 00496 fla_uddateut_t* sub_uddateut, 00497 fla_apqudut_t* sub_apqudut ); 00498 fla_apqudut_t* FLA_Cntl_apqudut_obj_create( FLA_Matrix_type matrix_type, 00499 int variant, 00500 fla_blocksize_t* blocksize, 00501 fla_apqudut_t* sub_apq2ut, 00502 fla_gemm_t* sub_gemm1, 00503 fla_gemm_t* sub_gemm2, 00504 fla_gemm_t* sub_gemm3, 00505 fla_gemm_t* sub_gemm4, 00506 fla_trsm_t* sub_trsm, 00507 fla_copyt_t* sub_copyt, 00508 fla_axpyt_t* sub_axpyt ); 00509 fla_uddateutinc_t* FLA_Cntl_uddateutinc_obj_create( FLA_Matrix_type matrix_type, 00510 int variant, 00511 fla_blocksize_t* blocksize, 00512 fla_uddateut_t* sub_uddateut, 00513 fla_apqudut_t* sub_apqudut ); 00514 fla_apqudutinc_t* FLA_Cntl_apqudutinc_obj_create( FLA_Matrix_type matrix_type, 00515 int variant, 00516 fla_blocksize_t* blocksize, 00517 fla_apqudut_t* sub_apqudut ); 00518 fla_eig_gest_t* FLA_Cntl_eig_gest_obj_create( FLA_Matrix_type matrix_type, 00519 int variant, 00520 fla_blocksize_t* blocksize, 00521 fla_eig_gest_t* sub_eig_gest, 00522 fla_axpy_t* sub_axpy1, 00523 fla_axpy_t* sub_axpy2, 00524 fla_gemm_t* sub_gemm1, 00525 fla_gemm_t* sub_gemm2, 00526 fla_gemm_t* sub_gemm3, 00527 fla_hemm_t* sub_hemm, 00528 fla_her2k_t* sub_her2k, 00529 fla_trmm_t* sub_trmm1, 00530 fla_trmm_t* sub_trmm2, 00531 fla_trsm_t* sub_trsm1, 00532 fla_trsm_t* sub_trsm2 ); 00533