libflame
revision_anchor
|
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 #include "FLA_Bsvd_iteracc_v.h" 00034 #include "FLA_Bsvd_sinval_v.h" 00035 #include "FLA_Bsvd_francis_v.h" 00036 00037 // --- FLA_Bsvd_compute_shift() ------------------------------------------------ 00038 00039 FLA_Error FLA_Bsvd_compute_shift( FLA_Obj tol, FLA_Obj sminl, FLA_Obj smax, FLA_Obj d, FLA_Obj e, FLA_Obj shift ); 00040 FLA_Error FLA_Bsvd_compute_shift_ops( int m_A, 00041 float tol, 00042 float sminl, 00043 float smax, 00044 float* buff_d, int inc_d, 00045 float* buff_e, int inc_e, 00046 float* shift ); 00047 FLA_Error FLA_Bsvd_compute_shift_opd( int m_A, 00048 double tol, 00049 double sminl, 00050 double smax, 00051 double* buff_d, int inc_d, 00052 double* buff_e, int inc_e, 00053 double* shift ); 00054 00055 // --- FLA_Bsvd_compute_tol_thresh() ------------------------------------------- 00056 00057 FLA_Error FLA_Bsvd_compute_tol_thresh( FLA_Obj tolmul, FLA_Obj maxit, FLA_Obj d, FLA_Obj e, FLA_Obj tol, FLA_Obj thresh ); 00058 FLA_Error FLA_Bsvd_compute_tol_thresh_ops( int m_A, 00059 float tolmul, 00060 float maxit, 00061 float* buff_d, int inc_d, 00062 float* buff_e, int inc_e, 00063 float* tol, 00064 float* thresh ); 00065 FLA_Error FLA_Bsvd_compute_tol_thresh_opd( int m_A, 00066 double tolmul, 00067 double maxit, 00068 double* buff_d, int inc_d, 00069 double* buff_e, int inc_e, 00070 double* tol, 00071 double* thresh ); 00072 00073 // --- FLA_Bsvd_find_converged() ----------------------------------------------- 00074 00075 FLA_Error FLA_Bsvd_find_converged( FLA_Obj tol, FLA_Obj d, FLA_Obj e, FLA_Obj sminl ); 00076 FLA_Error FLA_Bsvd_find_converged_ops( int m_A, 00077 float tol, 00078 float* buff_d, int inc_d, 00079 float* buff_e, int inc_e, 00080 float* sminl ); 00081 FLA_Error FLA_Bsvd_find_converged_opd( int m_A, 00082 double tol, 00083 double* buff_d, int inc_d, 00084 double* buff_e, int inc_e, 00085 double* sminl ); 00086 00087 // --- FLA_Bsvd_find_max_min() ------------------------------------------------- 00088 00089 FLA_Error FLA_Bsvd_find_max_min( FLA_Obj d, FLA_Obj e, FLA_Obj smax, FLA_Obj smin ); 00090 FLA_Error FLA_Bsvd_find_max_min_ops( int m_A, 00091 float* buff_d, int inc_d, 00092 float* buff_e, int inc_e, 00093 float* smax, 00094 float* smin ); 00095 FLA_Error FLA_Bsvd_find_max_min_opd( int m_A, 00096 double* buff_d, int inc_d, 00097 double* buff_e, int inc_e, 00098 double* smax, 00099 double* smin ); 00100 00101 // --- FLA_Bsvd_find_submatrix() ----------------------------------------------- 00102 00103 FLA_Error FLA_Bsvd_find_submatrix_ops( int mn_A, 00104 int ij_begin, 00105 float* buff_d, int inc_d, 00106 float* buff_e, int inc_e, 00107 int* ijTL, 00108 int* ijBR ); 00109 FLA_Error FLA_Bsvd_find_submatrix_opd( int mn_A, 00110 int ij_begin, 00111 double* buff_d, int inc_d, 00112 double* buff_e, int inc_e, 00113 int* ijTL, 00114 int* ijBR ); 00115 00116 // --- FLA_Bsvd_v_opt_var1() --------------------------------------------------- 00117 00118 FLA_Error FLA_Bsvd_v_opt_var1( dim_t n_iter_max, FLA_Obj d, FLA_Obj e, FLA_Obj G, FLA_Obj H, FLA_Obj U, FLA_Obj V, dim_t b_alg ); 00119 FLA_Error FLA_Bsvd_v_ops_var1( int min_m_n, 00120 int m_U, 00121 int m_V, 00122 int n_GH, 00123 int n_iter_max, 00124 float* buff_d, int inc_d, 00125 float* buff_e, int inc_e, 00126 scomplex* buff_G, int rs_G, int cs_G, 00127 scomplex* buff_H, int rs_H, int cs_H, 00128 float* buff_U, int rs_U, int cs_U, 00129 float* buff_V, int rs_V, int cs_V, 00130 int b_alg ); 00131 FLA_Error FLA_Bsvd_v_opd_var1( int min_m_n, 00132 int m_U, 00133 int m_V, 00134 int n_GH, 00135 int n_iter_max, 00136 double* buff_d, int inc_d, 00137 double* buff_e, int inc_e, 00138 dcomplex* buff_G, int rs_G, int cs_G, 00139 dcomplex* buff_H, int rs_H, int cs_H, 00140 double* buff_U, int rs_U, int cs_U, 00141 double* buff_V, int rs_V, int cs_V, 00142 int b_alg ); 00143 FLA_Error FLA_Bsvd_v_opc_var1( int min_m_n, 00144 int m_U, 00145 int m_V, 00146 int n_GH, 00147 int n_iter_max, 00148 float* buff_d, int inc_d, 00149 float* buff_e, int inc_e, 00150 scomplex* buff_G, int rs_G, int cs_G, 00151 scomplex* buff_H, int rs_H, int cs_H, 00152 scomplex* buff_U, int rs_U, int cs_U, 00153 scomplex* buff_V, int rs_V, int cs_V, 00154 int b_alg ); 00155 FLA_Error FLA_Bsvd_v_opz_var1( int min_m_n, 00156 int m_U, 00157 int m_V, 00158 int n_GH, 00159 int n_iter_max, 00160 double* buff_d, int inc_d, 00161 double* buff_e, int inc_e, 00162 dcomplex* buff_G, int rs_G, int cs_G, 00163 dcomplex* buff_H, int rs_H, int cs_H, 00164 dcomplex* buff_U, int rs_U, int cs_U, 00165 dcomplex* buff_V, int rs_V, int cs_V, 00166 int b_alg ); 00167 00168 // --- FLA_Bsvd_v_opt_var2() --------------------------------------------------- 00169 00170 FLA_Error FLA_Bsvd_v_opt_var2( dim_t n_iter_max, FLA_Obj d, FLA_Obj e, FLA_Obj G, FLA_Obj H, FLA_Obj RG, FLA_Obj RH, FLA_Obj W, FLA_Obj U, FLA_Obj V, dim_t b_alg ); 00171 FLA_Error FLA_Bsvd_v_ops_var2( int min_m_n, 00172 int m_U, 00173 int m_V, 00174 int n_GH, 00175 int n_iter_max, 00176 float* buff_d, int inc_d, 00177 float* buff_e, int inc_e, 00178 scomplex* buff_G, int rs_G, int cs_G, 00179 scomplex* buff_H, int rs_H, int cs_H, 00180 float* buff_RG, int rs_RG, int cs_RG, 00181 float* buff_RH, int rs_RH, int cs_RH, 00182 float* buff_W, int rs_W, int cs_W, 00183 float* buff_U, int rs_U, int cs_U, 00184 float* buff_V, int rs_V, int cs_V, 00185 int b_alg ); 00186 FLA_Error FLA_Bsvd_v_opd_var2( int min_m_n, 00187 int m_U, 00188 int m_V, 00189 int n_GH, 00190 int n_iter_max, 00191 double* buff_d, int inc_d, 00192 double* buff_e, int inc_e, 00193 dcomplex* buff_G, int rs_G, int cs_G, 00194 dcomplex* buff_H, int rs_H, int cs_H, 00195 double* buff_RG, int rs_RG, int cs_RG, 00196 double* buff_RH, int rs_RH, int cs_RH, 00197 double* buff_W, int rs_W, int cs_W, 00198 double* buff_U, int rs_U, int cs_U, 00199 double* buff_V, int rs_V, int cs_V, 00200 int b_alg ); 00201 FLA_Error FLA_Bsvd_v_opc_var2( int min_m_n, 00202 int m_U, 00203 int m_V, 00204 int n_GH, 00205 int n_iter_max, 00206 float* buff_d, int inc_d, 00207 float* buff_e, int inc_e, 00208 scomplex* buff_G, int rs_G, int cs_G, 00209 scomplex* buff_H, int rs_H, int cs_H, 00210 float* buff_RG, int rs_RG, int cs_RG, 00211 float* buff_RH, int rs_RH, int cs_RH, 00212 scomplex* buff_W, int rs_W, int cs_W, 00213 scomplex* buff_U, int rs_U, int cs_U, 00214 scomplex* buff_V, int rs_V, int cs_V, 00215 int b_alg ); 00216 FLA_Error FLA_Bsvd_v_opz_var2( int min_m_n, 00217 int m_U, 00218 int m_V, 00219 int n_GH, 00220 int n_iter_max, 00221 double* buff_d, int inc_d, 00222 double* buff_e, int inc_e, 00223 dcomplex* buff_G, int rs_G, int cs_G, 00224 dcomplex* buff_H, int rs_H, int cs_H, 00225 double* buff_RG, int rs_RG, int cs_RG, 00226 double* buff_RH, int rs_RH, int cs_RH, 00227 dcomplex* buff_W, int rs_W, int cs_W, 00228 dcomplex* buff_U, int rs_U, int cs_U, 00229 dcomplex* buff_V, int rs_V, int cs_V, 00230 int b_alg ); 00231