Go to the source code of this file.
FLA_Error FLA_Gemm | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Gemm_check(), FLA_Gemm_external(), FLA_Gemm_internal(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_width().
Referenced by fla_gemm_f(), fla_gemp_f(), fla_gepm_f(), and fla_gepp_f().
00069 { 00070 FLA_Error r_val = FLA_SUCCESS; 00071 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00072 FLA_Datatype datatype; 00073 int m_C, n_C, k_AB; 00074 int FLA_GEMM_VAR1_BLOCKSIZE; 00075 int FLA_GEMM_VAR3_BLOCKSIZE; 00076 int FLA_GEMM_VAR5_BLOCKSIZE; 00077 #endif 00078 00079 // Check parameters. 00080 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00081 FLA_Gemm_check( transa, transb, alpha, A, B, beta, C ); 00082 00083 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00084 // Determine the datatype of the operation. 00085 datatype = FLA_Obj_datatype( A ); 00086 00087 // Extract the appropriate blocksize for the given datatype. 00088 FLA_GEMM_VAR1_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_gemm_var1_bsize ); 00089 FLA_GEMM_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_gemm_var3_bsize ); 00090 FLA_GEMM_VAR5_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_gemm_var5_bsize ); 00091 00092 // Determine the m and n dimensions from C. 00093 m_C = FLA_Obj_length( C ); 00094 n_C = FLA_Obj_width( C ); 00095 00096 // Determine the k dimension of A and B. 00097 if ( transa == FLA_NO_TRANSPOSE ) 00098 k_AB = FLA_Obj_width( A ); 00099 else 00100 k_AB = FLA_Obj_length( A ); 00101 00102 // Invoke FLA_Gemm_internal() with the appropriate control tree. 00103 if ( FLA_GEMM_VAR1_BLOCKSIZE < m_C && FLA_GEMM_VAR3_BLOCKSIZE < n_C && FLA_GEMM_VAR5_BLOCKSIZE < k_AB ) 00104 { 00105 r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mm_op ); 00106 //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mm_mp ); 00107 //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mm_pm ); 00108 } 00109 else if ( m_C <= FLA_GEMM_VAR1_BLOCKSIZE && FLA_GEMM_VAR3_BLOCKSIZE < n_C && FLA_GEMM_VAR5_BLOCKSIZE < k_AB ) 00110 { 00111 r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_pm_bp ); 00112 //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_pm_ip ); 00113 } 00114 else if ( FLA_GEMM_VAR1_BLOCKSIZE < m_C && n_C <= FLA_GEMM_VAR3_BLOCKSIZE && FLA_GEMM_VAR5_BLOCKSIZE < k_AB ) 00115 { 00116 r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mp_pb ); 00117 //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_mp_ip ); 00118 } 00119 else if ( FLA_GEMM_VAR1_BLOCKSIZE < m_C && FLA_GEMM_VAR3_BLOCKSIZE < n_C && k_AB <= FLA_GEMM_VAR5_BLOCKSIZE ) 00120 { 00121 r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_op_bp ); 00122 //r_val = FLA_Gemm_internal( transa, transb, alpha, A, B, beta, C, fla_gemm_cntl_op_pb ); 00123 } 00124 else 00125 { 00126 r_val = FLA_Gemm_external( transa, transb, alpha, A, B, beta, C ); 00127 } 00128 #else 00129 r_val = FLA_Gemm_external( transa, transb, alpha, A, B, beta, C ); 00130 #endif 00131 00132 return r_val; 00133 }
FLA_Error FLA_Gemm_check | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), and FLA_Check_valid_trans().
Referenced by FLA_Gemm(), FLA_Gemm_external(), and FLASH_Gemm().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_trans( transa ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_trans( transb ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_floating_object( A ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_nonconstant_object( A ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_identical_object_datatype( A, B ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_identical_object_datatype( A, C ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_consistent_object_datatype( A, beta ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_if_scalar( alpha ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_if_scalar( beta ); 00067 FLA_Check_error_code( e_val ); 00068 00069 e_val = FLA_Check_matrix_matrix_dims( transa, transb, A, B, C ); 00070 FLA_Check_error_code( e_val ); 00071 00072 return FLA_SUCCESS; 00073 }
FLA_Error FLA_Gemm_external | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References cblas_cgemm(), cblas_dgemm(), cblas_sgemm(), cblas_zgemm(), CblasColMajor, cgemm(), dgemm(), FLA_Check_error_level(), FLA_Copyt_external(), FLA_Gemm_check(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Scal_external(), sgemm(), and zgemm().
Referenced by FLA_Gemm(), fla_gemm_external_f(), FLA_Gemm_hh_task(), FLA_Gemm_hn_task(), FLA_Gemm_ht_task(), FLA_Gemm_nh_task(), FLA_Gemm_nn_task(), FLA_Gemm_nt_task(), FLA_Gemm_task(), FLA_Gemm_th_task(), FLA_Gemm_tn_task(), FLA_Gemm_tt_task(), FLA_Gemp(), FLA_Gepm(), FLA_Gepp(), FLA_LQ_UT_Accum_T_blk_var1(), FLA_LQ_UT_blk_var2(), FLA_QR_UT_Accum_T_blk_var1(), FLA_QR_UT_blk_var2(), FLA_SA_FS_blk(), and FLA_SA_LU_blk().
00036 { 00037 FLA_Datatype datatype; 00038 int k_AB; 00039 int m_A, n_A, ldim_A; 00040 int ldim_B; 00041 int m_C, n_C, ldim_C; 00042 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00043 CBLAS_ORDER cblas_order = CblasColMajor; 00044 CBLAS_TRANSPOSE blas_transa; 00045 CBLAS_TRANSPOSE blas_transb; 00046 #else 00047 char blas_transa; 00048 char blas_transb; 00049 #endif 00050 FLA_Obj A_copy; 00051 FLA_Obj B_copy; 00052 00053 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00054 FLA_Gemm_check( transa, transb, alpha, A, B, beta, C ); 00055 00056 if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS; 00057 00058 if ( FLA_Obj_has_zero_dim( A ) || FLA_Obj_has_zero_dim( B ) ) 00059 { 00060 FLA_Scal_external( beta, C ); 00061 return FLA_SUCCESS; 00062 } 00063 00064 datatype = FLA_Obj_datatype( A ); 00065 00066 m_A = FLA_Obj_length( A ); 00067 n_A = FLA_Obj_width( A ); 00068 ldim_A = FLA_Obj_ldim( A ); 00069 00070 ldim_B = FLA_Obj_ldim( B ); 00071 00072 m_C = FLA_Obj_length( C ); 00073 n_C = FLA_Obj_width( C ); 00074 ldim_C = FLA_Obj_ldim( C ); 00075 00076 if ( transa == FLA_NO_TRANSPOSE || transa == FLA_CONJ_NO_TRANSPOSE ) 00077 k_AB = n_A; 00078 else 00079 k_AB = m_A; 00080 00081 if ( transa == FLA_CONJ_NO_TRANSPOSE ) 00082 { 00083 FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &A_copy ); 00084 FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, A, A_copy ); 00085 00086 ldim_A = FLA_Obj_ldim( A_copy ); 00087 } 00088 else 00089 { 00090 A_copy = A; 00091 } 00092 00093 if ( transb == FLA_CONJ_NO_TRANSPOSE ) 00094 { 00095 FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, B, &B_copy ); 00096 FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, B, B_copy ); 00097 00098 ldim_B = FLA_Obj_ldim( B_copy ); 00099 } 00100 else 00101 { 00102 B_copy = B; 00103 } 00104 00105 FLA_Param_map_to_blas_trans( transa, &blas_transa ); 00106 FLA_Param_map_to_blas_trans( transb, &blas_transb ); 00107 00108 00109 switch( datatype ){ 00110 00111 case FLA_FLOAT: 00112 { 00113 float *buff_A = ( float * ) FLA_FLOAT_PTR( A ); 00114 float *buff_B = ( float * ) FLA_FLOAT_PTR( B ); 00115 float *buff_C = ( float * ) FLA_FLOAT_PTR( C ); 00116 float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha ); 00117 float *buff_beta = ( float * ) FLA_FLOAT_PTR( beta ); 00118 00119 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00120 cblas_sgemm( cblas_order, 00121 blas_transa, 00122 blas_transb, 00123 m_C, 00124 n_C, 00125 k_AB, 00126 *buff_alpha, 00127 buff_A, ldim_A, 00128 buff_B, ldim_B, 00129 *buff_beta, 00130 buff_C, ldim_C ); 00131 #else 00132 FLA_C2F( sgemm )( &blas_transa, 00133 &blas_transb, 00134 &m_C, 00135 &n_C, 00136 &k_AB, 00137 buff_alpha, 00138 buff_A, &ldim_A, 00139 buff_B, &ldim_B, 00140 buff_beta, 00141 buff_C, &ldim_C ); 00142 #endif 00143 break; 00144 } 00145 00146 case FLA_DOUBLE: 00147 { 00148 double *buff_A = ( double * ) FLA_DOUBLE_PTR( A ); 00149 double *buff_B = ( double * ) FLA_DOUBLE_PTR( B ); 00150 double *buff_C = ( double * ) FLA_DOUBLE_PTR( C ); 00151 double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha ); 00152 double *buff_beta = ( double * ) FLA_DOUBLE_PTR( beta ); 00153 00154 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00155 cblas_dgemm( cblas_order, 00156 blas_transa, 00157 blas_transb, 00158 m_C, 00159 n_C, 00160 k_AB, 00161 *buff_alpha, 00162 buff_A, ldim_A, 00163 buff_B, ldim_B, 00164 *buff_beta, 00165 buff_C, ldim_C ); 00166 #else 00167 FLA_C2F( dgemm )( &blas_transa, 00168 &blas_transb, 00169 &m_C, 00170 &n_C, 00171 &k_AB, 00172 buff_alpha, 00173 buff_A, &ldim_A, 00174 buff_B, &ldim_B, 00175 buff_beta, 00176 buff_C, &ldim_C ); 00177 #endif 00178 break; 00179 } 00180 00181 case FLA_COMPLEX: 00182 { 00183 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A_copy ); 00184 scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B_copy ); 00185 scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C ); 00186 scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha ); 00187 scomplex *buff_beta = ( scomplex * ) FLA_COMPLEX_PTR( beta ); 00188 00189 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00190 cblas_cgemm( cblas_order, 00191 blas_transa, 00192 blas_transb, 00193 m_C, 00194 n_C, 00195 k_AB, 00196 buff_alpha, 00197 buff_A, ldim_A, 00198 buff_B, ldim_B, 00199 buff_beta, 00200 buff_C, ldim_C ); 00201 #else 00202 FLA_C2F( cgemm )( &blas_transa, 00203 &blas_transb, 00204 &m_C, 00205 &n_C, 00206 &k_AB, 00207 buff_alpha, 00208 buff_A, &ldim_A, 00209 buff_B, &ldim_B, 00210 buff_beta, 00211 buff_C, &ldim_C ); 00212 #endif 00213 break; 00214 } 00215 00216 case FLA_DOUBLE_COMPLEX: 00217 { 00218 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A_copy ); 00219 dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B_copy ); 00220 dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C ); 00221 dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha ); 00222 dcomplex *buff_beta = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta ); 00223 00224 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00225 cblas_zgemm( cblas_order, 00226 blas_transa, 00227 blas_transb, 00228 m_C, 00229 n_C, 00230 k_AB, 00231 buff_alpha, 00232 buff_A, ldim_A, 00233 buff_B, ldim_B, 00234 buff_beta, 00235 buff_C, ldim_C ); 00236 #else 00237 FLA_C2F( zgemm )( &blas_transa, 00238 &blas_transb, 00239 &m_C, 00240 &n_C, 00241 &k_AB, 00242 buff_alpha, 00243 buff_A, &ldim_A, 00244 buff_B, &ldim_B, 00245 buff_beta, 00246 buff_C, &ldim_C ); 00247 #endif 00248 break; 00249 } 00250 00251 } 00252 00253 if ( transa == FLA_CONJ_NO_TRANSPOSE ) 00254 FLA_Obj_free( &A_copy ); 00255 00256 if ( transb == FLA_CONJ_NO_TRANSPOSE ) 00257 FLA_Obj_free( &B_copy ); 00258 00259 return FLA_SUCCESS; 00260 }
void FLA_F2C() fla_gemm_external_f | ( | F_INT * | transa, | |
F_INT * | transb, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Gemm_external().
00264 { 00265 *IERROR = FLA_Gemm_external( *( ( FLA_Trans * ) transa ), 00266 *( ( FLA_Trans * ) transb ), 00267 *( ( FLA_Obj * ) alpha ), 00268 *( ( FLA_Obj * ) A ), 00269 *( ( FLA_Obj * ) B ), 00270 *( ( FLA_Obj * ) beta ), 00271 *( ( FLA_Obj * ) C ) ); 00272 }
void FLA_F2C() fla_gemm_f | ( | F_INT * | transa, | |
F_INT * | transb, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Gemm_hh_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_hh().
00041 { 00042 return FLA_Gemm_external( FLA_CONJ_TRANSPOSE, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C ); 00043 }
FLA_Error FLA_Gemm_hn_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_hn().
00046 { 00047 return FLA_Gemm_external( FLA_CONJ_TRANSPOSE, FLA_NO_TRANSPOSE, alpha, A, B, beta, C ); 00048 }
FLA_Error FLA_Gemm_ht_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_ht().
00051 { 00052 return FLA_Gemm_external( FLA_CONJ_TRANSPOSE, FLA_TRANSPOSE, alpha, A, B, beta, C ); 00053 }
FLA_Error FLA_Gemm_internal | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
Referenced by FLA_Apply_Q_UT_lhc_blk_var1(), FLA_Apply_Q_UT_UD_lhc_blk_var1(), FLA_Chol_l_blk_var2(), FLA_Chol_u_blk_var2(), FLA_Gemm(), FLA_Gemm_hh_blk_var1(), FLA_Gemm_hh_blk_var2(), FLA_Gemm_hh_blk_var3(), FLA_Gemm_hh_blk_var4(), FLA_Gemm_hh_blk_var5(), FLA_Gemm_hh_blk_var6(), FLA_Gemm_hn_blk_var1(), FLA_Gemm_hn_blk_var2(), FLA_Gemm_hn_blk_var3(), FLA_Gemm_hn_blk_var4(), FLA_Gemm_hn_blk_var5(), FLA_Gemm_hn_blk_var6(), FLA_Gemm_ht_blk_var1(), FLA_Gemm_ht_blk_var2(), FLA_Gemm_ht_blk_var3(), FLA_Gemm_ht_blk_var4(), FLA_Gemm_ht_blk_var5(), FLA_Gemm_ht_blk_var6(), FLA_Gemm_internal(), FLA_Gemm_nh_blk_var1(), FLA_Gemm_nh_blk_var2(), FLA_Gemm_nh_blk_var3(), FLA_Gemm_nh_blk_var4(), FLA_Gemm_nh_blk_var5(), FLA_Gemm_nh_blk_var6(), FLA_Gemm_nn_blk_var1(), FLA_Gemm_nn_blk_var2(), FLA_Gemm_nn_blk_var3(), FLA_Gemm_nn_blk_var4(), FLA_Gemm_nn_blk_var5(), FLA_Gemm_nn_blk_var6(), FLA_Gemm_nt_blk_var1(), FLA_Gemm_nt_blk_var2(), FLA_Gemm_nt_blk_var3(), FLA_Gemm_nt_blk_var4(), FLA_Gemm_nt_blk_var5(), FLA_Gemm_nt_blk_var6(), FLA_Gemm_th_blk_var1(), FLA_Gemm_th_blk_var2(), FLA_Gemm_th_blk_var3(), FLA_Gemm_th_blk_var4(), FLA_Gemm_th_blk_var5(), FLA_Gemm_th_blk_var6(), FLA_Gemm_tn_blk_var1(), FLA_Gemm_tn_blk_var2(), FLA_Gemm_tn_blk_var3(), FLA_Gemm_tn_blk_var4(), FLA_Gemm_tn_blk_var5(), FLA_Gemm_tn_blk_var6(), FLA_Gemm_tt_blk_var1(), FLA_Gemm_tt_blk_var2(), FLA_Gemm_tt_blk_var3(), FLA_Gemm_tt_blk_var4(), FLA_Gemm_tt_blk_var5(), FLA_Gemm_tt_blk_var6(), FLA_Hemm_ll_blk_var1(), FLA_Hemm_ll_blk_var2(), FLA_Hemm_ll_blk_var3(), FLA_Hemm_ll_blk_var4(), FLA_Hemm_ll_blk_var5(), FLA_Hemm_ll_blk_var6(), FLA_Hemm_ll_blk_var7(), FLA_Hemm_ll_blk_var8(), FLA_Hemm_lu_blk_var1(), FLA_Hemm_lu_blk_var2(), FLA_Hemm_lu_blk_var3(), FLA_Hemm_lu_blk_var4(), FLA_Hemm_lu_blk_var5(), FLA_Hemm_lu_blk_var6(), FLA_Hemm_lu_blk_var7(), FLA_Hemm_lu_blk_var8(), FLA_Hemm_rl_blk_var1(), FLA_Hemm_rl_blk_var2(), FLA_Hemm_rl_blk_var3(), FLA_Hemm_rl_blk_var4(), FLA_Hemm_rl_blk_var5(), FLA_Hemm_rl_blk_var6(), FLA_Hemm_rl_blk_var7(), FLA_Hemm_rl_blk_var8(), FLA_Hemm_ru_blk_var1(), FLA_Hemm_ru_blk_var2(), FLA_Hemm_ru_blk_var3(), FLA_Hemm_ru_blk_var4(), FLA_Hemm_ru_blk_var5(), FLA_Hemm_ru_blk_var6(), FLA_Hemm_ru_blk_var7(), FLA_Hemm_ru_blk_var8(), FLA_Her2k_lh_blk_var1(), FLA_Her2k_lh_blk_var2(), FLA_Her2k_lh_blk_var3(), FLA_Her2k_lh_blk_var4(), FLA_Her2k_lh_blk_var5(), FLA_Her2k_lh_blk_var6(), FLA_Her2k_lh_blk_var7(), FLA_Her2k_lh_blk_var8(), FLA_Her2k_ln_blk_var1(), FLA_Her2k_ln_blk_var2(), FLA_Her2k_ln_blk_var3(), FLA_Her2k_ln_blk_var4(), FLA_Her2k_ln_blk_var5(), FLA_Her2k_ln_blk_var6(), FLA_Her2k_ln_blk_var7(), FLA_Her2k_ln_blk_var8(), FLA_Her2k_uh_blk_var1(), FLA_Her2k_uh_blk_var2(), FLA_Her2k_uh_blk_var3(), FLA_Her2k_uh_blk_var4(), FLA_Her2k_uh_blk_var5(), FLA_Her2k_uh_blk_var6(), FLA_Her2k_uh_blk_var7(), FLA_Her2k_uh_blk_var8(), FLA_Her2k_un_blk_var1(), FLA_Her2k_un_blk_var2(), FLA_Her2k_un_blk_var3(), FLA_Her2k_un_blk_var4(), FLA_Her2k_un_blk_var5(), FLA_Her2k_un_blk_var6(), FLA_Her2k_un_blk_var7(), FLA_Her2k_un_blk_var8(), FLA_Herk_lh_blk_var1(), FLA_Herk_lh_blk_var2(), FLA_Herk_lh_blk_var3(), FLA_Herk_lh_blk_var4(), FLA_Herk_ln_blk_var1(), FLA_Herk_ln_blk_var2(), FLA_Herk_ln_blk_var3(), FLA_Herk_ln_blk_var4(), FLA_Herk_uh_blk_var1(), FLA_Herk_uh_blk_var2(), FLA_Herk_uh_blk_var3(), FLA_Herk_uh_blk_var4(), FLA_Herk_un_blk_var1(), FLA_Herk_un_blk_var2(), FLA_Herk_un_blk_var3(), FLA_Herk_un_blk_var4(), FLA_LU_nopiv_blk_var1(), FLA_LU_nopiv_blk_var2(), FLA_LU_nopiv_blk_var3(), FLA_LU_nopiv_blk_var4(), FLA_LU_nopiv_blk_var5(), FLA_LU_piv_blk_var3(), FLA_LU_piv_blk_var4(), FLA_LU_piv_blk_var5(), FLA_QR_UT_UD_blk_var1(), FLA_Sylv_nn_blk_var1(), FLA_Sylv_nn_blk_var10(), FLA_Sylv_nn_blk_var11(), FLA_Sylv_nn_blk_var12(), FLA_Sylv_nn_blk_var13(), FLA_Sylv_nn_blk_var14(), FLA_Sylv_nn_blk_var15(), FLA_Sylv_nn_blk_var16(), FLA_Sylv_nn_blk_var17(), FLA_Sylv_nn_blk_var18(), FLA_Sylv_nn_blk_var2(), FLA_Sylv_nn_blk_var3(), FLA_Sylv_nn_blk_var4(), FLA_Sylv_nn_blk_var5(), FLA_Sylv_nn_blk_var6(), FLA_Sylv_nn_blk_var7(), FLA_Sylv_nn_blk_var8(), FLA_Sylv_nn_blk_var9(), FLA_Sylv_nt_blk_var1(), FLA_Sylv_nt_blk_var10(), FLA_Sylv_nt_blk_var11(), FLA_Sylv_nt_blk_var12(), FLA_Sylv_nt_blk_var13(), FLA_Sylv_nt_blk_var14(), FLA_Sylv_nt_blk_var15(), FLA_Sylv_nt_blk_var16(), FLA_Sylv_nt_blk_var17(), FLA_Sylv_nt_blk_var18(), FLA_Sylv_nt_blk_var2(), FLA_Sylv_nt_blk_var3(), FLA_Sylv_nt_blk_var4(), FLA_Sylv_nt_blk_var5(), FLA_Sylv_nt_blk_var6(), FLA_Sylv_nt_blk_var7(), FLA_Sylv_nt_blk_var8(), FLA_Sylv_nt_blk_var9(), FLA_Sylv_tn_blk_var1(), FLA_Sylv_tn_blk_var10(), FLA_Sylv_tn_blk_var11(), FLA_Sylv_tn_blk_var12(), FLA_Sylv_tn_blk_var13(), FLA_Sylv_tn_blk_var14(), FLA_Sylv_tn_blk_var15(), FLA_Sylv_tn_blk_var16(), FLA_Sylv_tn_blk_var17(), FLA_Sylv_tn_blk_var18(), FLA_Sylv_tn_blk_var2(), FLA_Sylv_tn_blk_var3(), FLA_Sylv_tn_blk_var4(), FLA_Sylv_tn_blk_var5(), FLA_Sylv_tn_blk_var6(), FLA_Sylv_tn_blk_var7(), FLA_Sylv_tn_blk_var8(), FLA_Sylv_tn_blk_var9(), FLA_Sylv_tt_blk_var1(), FLA_Sylv_tt_blk_var10(), FLA_Sylv_tt_blk_var11(), FLA_Sylv_tt_blk_var12(), FLA_Sylv_tt_blk_var13(), FLA_Sylv_tt_blk_var14(), FLA_Sylv_tt_blk_var15(), FLA_Sylv_tt_blk_var16(), FLA_Sylv_tt_blk_var17(), FLA_Sylv_tt_blk_var18(), FLA_Sylv_tt_blk_var2(), FLA_Sylv_tt_blk_var3(), FLA_Sylv_tt_blk_var4(), FLA_Sylv_tt_blk_var5(), FLA_Sylv_tt_blk_var6(), FLA_Sylv_tt_blk_var7(), FLA_Sylv_tt_blk_var8(), FLA_Sylv_tt_blk_var9(), FLA_Symm_ll_blk_var1(), FLA_Symm_ll_blk_var2(), FLA_Symm_ll_blk_var3(), FLA_Symm_ll_blk_var4(), FLA_Symm_ll_blk_var5(), FLA_Symm_ll_blk_var6(), FLA_Symm_ll_blk_var7(), FLA_Symm_ll_blk_var8(), FLA_Symm_lu_blk_var1(), FLA_Symm_lu_blk_var2(), FLA_Symm_lu_blk_var3(), FLA_Symm_lu_blk_var4(), FLA_Symm_lu_blk_var5(), FLA_Symm_lu_blk_var6(), FLA_Symm_lu_blk_var7(), FLA_Symm_lu_blk_var8(), FLA_Symm_rl_blk_var1(), FLA_Symm_rl_blk_var2(), FLA_Symm_rl_blk_var3(), FLA_Symm_rl_blk_var4(), FLA_Symm_rl_blk_var5(), FLA_Symm_rl_blk_var6(), FLA_Symm_rl_blk_var7(), FLA_Symm_rl_blk_var8(), FLA_Symm_ru_blk_var1(), FLA_Symm_ru_blk_var2(), FLA_Symm_ru_blk_var3(), FLA_Symm_ru_blk_var4(), FLA_Symm_ru_blk_var5(), FLA_Symm_ru_blk_var6(), FLA_Symm_ru_blk_var7(), FLA_Symm_ru_blk_var8(), FLA_Syr2k_ln_blk_var1(), FLA_Syr2k_ln_blk_var2(), FLA_Syr2k_ln_blk_var3(), FLA_Syr2k_ln_blk_var4(), FLA_Syr2k_ln_blk_var5(), FLA_Syr2k_ln_blk_var6(), FLA_Syr2k_ln_blk_var7(), FLA_Syr2k_ln_blk_var8(), FLA_Syr2k_lt_blk_var1(), FLA_Syr2k_lt_blk_var2(), FLA_Syr2k_lt_blk_var3(), FLA_Syr2k_lt_blk_var4(), FLA_Syr2k_lt_blk_var5(), FLA_Syr2k_lt_blk_var6(), FLA_Syr2k_lt_blk_var7(), FLA_Syr2k_lt_blk_var8(), FLA_Syr2k_un_blk_var1(), FLA_Syr2k_un_blk_var2(), FLA_Syr2k_un_blk_var3(), FLA_Syr2k_un_blk_var4(), FLA_Syr2k_un_blk_var5(), FLA_Syr2k_un_blk_var6(), FLA_Syr2k_un_blk_var7(), FLA_Syr2k_un_blk_var8(), FLA_Syr2k_ut_blk_var1(), FLA_Syr2k_ut_blk_var2(), FLA_Syr2k_ut_blk_var3(), FLA_Syr2k_ut_blk_var4(), FLA_Syr2k_ut_blk_var5(), FLA_Syr2k_ut_blk_var6(), FLA_Syr2k_ut_blk_var7(), FLA_Syr2k_ut_blk_var8(), FLA_Syrk_ln_blk_var1(), FLA_Syrk_ln_blk_var2(), FLA_Syrk_ln_blk_var3(), FLA_Syrk_ln_blk_var4(), FLA_Syrk_lt_blk_var1(), FLA_Syrk_lt_blk_var2(), FLA_Syrk_lt_blk_var3(), FLA_Syrk_lt_blk_var4(), FLA_Syrk_un_blk_var1(), FLA_Syrk_un_blk_var2(), FLA_Syrk_un_blk_var3(), FLA_Syrk_un_blk_var4(), FLA_Syrk_ut_blk_var1(), FLA_Syrk_ut_blk_var2(), FLA_Syrk_ut_blk_var3(), FLA_Syrk_ut_blk_var4(), FLA_Trinv_l_blk_var3(), FLA_Trinv_l_blk_var4(), FLA_Trinv_u_blk_var3(), FLA_Trinv_u_blk_var4(), FLA_Trmm_llh_blk_var1(), FLA_Trmm_llh_blk_var2(), FLA_Trmm_lln_blk_var1(), FLA_Trmm_lln_blk_var2(), FLA_Trmm_llt_blk_var1(), FLA_Trmm_llt_blk_var2(), FLA_Trmm_luh_blk_var1(), FLA_Trmm_luh_blk_var2(), FLA_Trmm_lun_blk_var1(), FLA_Trmm_lun_blk_var2(), FLA_Trmm_lut_blk_var1(), FLA_Trmm_lut_blk_var2(), FLA_Trmm_rlh_blk_var1(), FLA_Trmm_rlh_blk_var2(), FLA_Trmm_rln_blk_var1(), FLA_Trmm_rln_blk_var2(), FLA_Trmm_rlt_blk_var1(), FLA_Trmm_rlt_blk_var2(), FLA_Trmm_ruh_blk_var1(), FLA_Trmm_ruh_blk_var2(), FLA_Trmm_run_blk_var1(), FLA_Trmm_run_blk_var2(), FLA_Trmm_rut_blk_var1(), FLA_Trmm_rut_blk_var2(), FLA_Trsm_llh_blk_var1(), FLA_Trsm_llh_blk_var2(), FLA_Trsm_lln_blk_var1(), FLA_Trsm_lln_blk_var2(), FLA_Trsm_llt_blk_var1(), FLA_Trsm_llt_blk_var2(), FLA_Trsm_luh_blk_var1(), FLA_Trsm_luh_blk_var2(), FLA_Trsm_lun_blk_var1(), FLA_Trsm_lun_blk_var2(), FLA_Trsm_lut_blk_var1(), FLA_Trsm_lut_blk_var2(), FLA_Trsm_rlh_blk_var1(), FLA_Trsm_rlh_blk_var2(), FLA_Trsm_rln_blk_var1(), FLA_Trsm_rln_blk_var2(), FLA_Trsm_rlt_blk_var1(), FLA_Trsm_rlt_blk_var2(), FLA_Trsm_ruh_blk_var1(), FLA_Trsm_ruh_blk_var2(), FLA_Trsm_run_blk_var1(), FLA_Trsm_run_blk_var2(), FLA_Trsm_rut_blk_var1(), FLA_Trsm_rut_blk_var2(), FLA_Ttmm_l_blk_var2(), FLA_Ttmm_u_blk_var2(), and FLASH_Gemm().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Gemm_internal_check( transa, transb, alpha, A, B, beta, C, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Gemm_internal( transa, 00051 transb, 00052 alpha, 00053 *FLASH_OBJ_PTR_AT( A ), 00054 *FLASH_OBJ_PTR_AT( B ), 00055 beta, 00056 *FLASH_OBJ_PTR_AT( C ), 00057 flash_gemm_cntl_mm_op ); 00058 } 00059 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00060 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00061 FLASH_Queue_get_enabled( ) ) 00062 { 00063 // Enqueue 00064 ENQUEUE_FLASH_Gemm( transa, transb, alpha, A, B, beta, C, cntl ); 00065 } 00066 else 00067 { 00068 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00069 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00070 !FLASH_Queue_get_enabled( ) ) 00071 { 00072 // Execute leaf 00073 cntl = flash_gemm_cntl_blas; 00074 } 00075 00076 // Parameter combinations 00077 if ( transa == FLA_NO_TRANSPOSE ) 00078 { 00079 if ( transb == FLA_NO_TRANSPOSE ) 00080 r_val = FLA_Gemm_nn( alpha, A, B, beta, C, cntl ); 00081 else if ( transb == FLA_TRANSPOSE ) 00082 r_val = FLA_Gemm_nt( alpha, A, B, beta, C, cntl ); 00083 else if ( transb == FLA_CONJ_TRANSPOSE ) 00084 r_val = FLA_Gemm_nh( alpha, A, B, beta, C, cntl ); 00085 } 00086 else if ( transa == FLA_TRANSPOSE ) 00087 { 00088 if ( transb == FLA_NO_TRANSPOSE ) 00089 r_val = FLA_Gemm_tn( alpha, A, B, beta, C, cntl ); 00090 else if ( transb == FLA_TRANSPOSE ) 00091 r_val = FLA_Gemm_tt( alpha, A, B, beta, C, cntl ); 00092 else if ( transb == FLA_CONJ_TRANSPOSE ) 00093 r_val = FLA_Gemm_th( alpha, A, B, beta, C, cntl ); 00094 } 00095 else if ( transa == FLA_CONJ_TRANSPOSE ) 00096 { 00097 if ( transb == FLA_NO_TRANSPOSE ) 00098 r_val = FLA_Gemm_hn( alpha, A, B, beta, C, cntl ); 00099 else if ( transb == FLA_TRANSPOSE ) 00100 r_val = FLA_Gemm_ht( alpha, A, B, beta, C, cntl ); 00101 else if ( transb == FLA_CONJ_TRANSPOSE ) 00102 r_val = FLA_Gemm_hh( alpha, A, B, beta, C, cntl ); 00103 } 00104 } 00105 00106 return r_val; 00107 }
FLA_Error FLA_Gemm_internal_check | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Gemm_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, B ); 00045 FLA_Check_error_code( e_val ); 00046 00047 e_val = FLA_Check_identical_object_elemtype( A, C ); 00048 FLA_Check_error_code( e_val ); 00049 00050 // Verify conformality between all the objects. This check works regardless 00051 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00052 // element length and width are used instead of scalar length and width. 00053 e_val = FLA_Check_matrix_matrix_dims( transa, transb, A, B, C ); 00054 FLA_Check_error_code( e_val ); 00055 00056 return FLA_SUCCESS; 00057 }
FLA_Error FLA_Gemm_nh_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_nh().
00056 { 00057 return FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C ); 00058 }
FLA_Error FLA_Gemm_nn_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_nn().
00061 { 00062 return FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, alpha, A, B, beta, C ); 00063 }
FLA_Error FLA_Gemm_nt_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_nt().
00066 { 00067 return FLA_Gemm_external( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, alpha, A, B, beta, C ); 00068 }
FLA_Error FLA_Gemm_task | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Gemm_external( transa, transb, alpha, A, B, beta, C ); 00038 }
FLA_Error FLA_Gemm_th_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_th().
00071 { 00072 return FLA_Gemm_external( FLA_TRANSPOSE, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C ); 00073 }
FLA_Error FLA_Gemm_tn_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_tn().
00076 { 00077 return FLA_Gemm_external( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, alpha, A, B, beta, C ); 00078 }
FLA_Error FLA_Gemm_tt_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_gemm_t * | cntl | |||
) |
References FLA_Gemm_external().
Referenced by FLA_Gemm_tt().
00081 { 00082 return FLA_Gemm_external( FLA_TRANSPOSE, FLA_TRANSPOSE, alpha, A, B, beta, C ); 00083 }
FLA_Error FLA_Gemp | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Gemm_external().
00036 { 00037 return FLA_Gemm_external( transa, transb, alpha, A, B, beta, C ); 00038 }
void FLA_F2C() fla_gemp_f | ( | F_INT * | transa, | |
F_INT * | transb, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Gepm | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Gemm_external().
00036 { 00037 return FLA_Gemm_external( transa, transb, alpha, A, B, beta, C ); 00038 }
void FLA_F2C() fla_gepm_f | ( | F_INT * | transa, | |
F_INT * | transb, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Gepp | ( | FLA_Trans | transa, | |
FLA_Trans | transb, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Gemm_external().
00036 { 00037 return FLA_Gemm_external( transa, transb, alpha, A, B, beta, C ); 00038 }
void FLA_F2C() fla_gepp_f | ( | F_INT * | transa, | |
F_INT * | transb, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Hemm | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Hemm_check(), FLA_Hemm_external(), FLA_Hemm_internal(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_width().
Referenced by fla_hemm_f().
00042 { 00043 FLA_Error r_val = FLA_SUCCESS; 00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00045 FLA_Datatype datatype; 00046 int m_A, nrhs_B; 00047 int FLA_HEMM_VAR4_BLOCKSIZE; 00048 int FLA_HEMM_VAR9_BLOCKSIZE; 00049 #endif 00050 00051 // Check parameters. 00052 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00053 FLA_Hemm_check( side, uplo, alpha, A, B, beta, C ); 00054 00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00056 // Determine the datatype of the operation. 00057 datatype = FLA_Obj_datatype( A ); 00058 00059 // Extract the appropriate blocksize for the given datatype. 00060 FLA_HEMM_VAR4_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_hemm_var4_bsize ); 00061 FLA_HEMM_VAR9_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_hemm_var9_bsize ); 00062 00063 // Determine the dimensions of A. 00064 m_A = FLA_Obj_length( A ); 00065 00066 // Determine the number of "right-hand sides" of B (ie: the number of columns 00067 // when side == FLA_LEFT and rows when side == FLA_RIGHT). 00068 if ( side == FLA_LEFT ) 00069 nrhs_B = FLA_Obj_width( B ); 00070 else 00071 nrhs_B = FLA_Obj_length( B ); 00072 00073 // Invoke FLA_Hemm_internal() with the appropriate control tree. 00074 if ( FLA_HEMM_VAR4_BLOCKSIZE < m_A && FLA_HEMM_VAR9_BLOCKSIZE < nrhs_B ) 00075 { 00076 r_val = FLA_Hemm_internal( side, uplo, alpha, A, B, beta, C, fla_hemm_cntl_mm ); 00077 } 00078 else if ( FLA_HEMM_VAR4_BLOCKSIZE < m_A && nrhs_B <= FLA_HEMM_VAR9_BLOCKSIZE ) 00079 { 00080 r_val = FLA_Hemm_internal( side, uplo, alpha, A, B, beta, C, fla_hemm_cntl_mp ); 00081 } 00082 else if ( m_A <= FLA_HEMM_VAR4_BLOCKSIZE && FLA_HEMM_VAR9_BLOCKSIZE < nrhs_B ) 00083 { 00084 r_val = FLA_Hemm_internal( side, uplo, alpha, A, B, beta, C, fla_hemm_cntl_bp ); 00085 } 00086 else if ( m_A <= FLA_HEMM_VAR4_BLOCKSIZE && nrhs_B <= FLA_HEMM_VAR9_BLOCKSIZE ) 00087 { 00088 r_val = FLA_Hemm_external( side, uplo, alpha, A, B, beta, C ); 00089 } 00090 #else 00091 r_val = FLA_Hemm_external( side, uplo, alpha, A, B, beta, C ); 00092 #endif 00093 00094 return r_val; 00095 }
FLA_Error FLA_Hemm_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_complex_object(), FLA_Check_consistent_object_datatype(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_side(), and FLA_Check_valid_uplo().
Referenced by FLA_Hemm(), FLA_Hemm_external(), and FLASH_Hemm().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_side( side ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_uplo( uplo ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_complex_object( A ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_nonconstant_object( A ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_identical_object_datatype( A, B ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_identical_object_datatype( A, C ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_consistent_object_datatype( A, beta ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_if_scalar( alpha ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_if_scalar( beta ); 00067 FLA_Check_error_code( e_val ); 00068 00069 e_val = FLA_Check_square( A ); 00070 FLA_Check_error_code( e_val ); 00071 00072 if ( side == FLA_LEFT ) 00073 { 00074 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00075 FLA_Check_error_code( e_val ); 00076 } 00077 else 00078 { 00079 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C ); 00080 FLA_Check_error_code( e_val ); 00081 } 00082 00083 return FLA_SUCCESS; 00084 }
FLA_Error FLA_Hemm_external | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References cblas_chemm(), cblas_zhemm(), CblasColMajor, chemm(), FLA_Check_error_level(), FLA_Hemm_check(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_uplo(), and zhemm().
Referenced by FLA_Hemm(), fla_hemm_external_f(), FLA_Hemm_ll_task(), FLA_Hemm_lu_task(), FLA_Hemm_rl_task(), FLA_Hemm_ru_task(), and FLA_Hemm_task().
00036 { 00037 FLA_Datatype datatype; 00038 int ldim_A; 00039 int ldim_B; 00040 int m_C, n_C, ldim_C; 00041 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00042 CBLAS_ORDER cblas_order = CblasColMajor; 00043 CBLAS_SIDE blas_side; 00044 CBLAS_UPLO blas_uplo; 00045 #else 00046 char blas_side; 00047 char blas_uplo; 00048 #endif 00049 00050 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00051 FLA_Hemm_check( side, uplo, alpha, A, B, beta, C ); 00052 00053 if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS; 00054 00055 datatype = FLA_Obj_datatype( A ); 00056 00057 ldim_A = FLA_Obj_ldim( A ); 00058 00059 ldim_B = FLA_Obj_ldim( B ); 00060 00061 m_C = FLA_Obj_length( C ); 00062 n_C = FLA_Obj_width( C ); 00063 ldim_C = FLA_Obj_ldim( C ); 00064 00065 FLA_Param_map_to_blas_side( side, &blas_side ); 00066 FLA_Param_map_to_blas_uplo( uplo, &blas_uplo ); 00067 00068 00069 switch( datatype ){ 00070 00071 case FLA_COMPLEX: 00072 { 00073 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A ); 00074 scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B ); 00075 scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C ); 00076 scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha ); 00077 scomplex *buff_beta = ( scomplex * ) FLA_COMPLEX_PTR( beta ); 00078 00079 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00080 cblas_chemm( cblas_order, 00081 blas_side, 00082 blas_uplo, 00083 m_C, 00084 n_C, 00085 buff_alpha, 00086 buff_A, ldim_A, 00087 buff_B, ldim_B, 00088 buff_beta, 00089 buff_C, ldim_C ); 00090 #else 00091 FLA_C2F( chemm )( &blas_side, 00092 &blas_uplo, 00093 &m_C, 00094 &n_C, 00095 buff_alpha, 00096 buff_A, &ldim_A, 00097 buff_B, &ldim_B, 00098 buff_beta, 00099 buff_C, &ldim_C ); 00100 #endif 00101 break; 00102 } 00103 00104 case FLA_DOUBLE_COMPLEX: 00105 { 00106 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A ); 00107 dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B ); 00108 dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C ); 00109 dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha ); 00110 dcomplex *buff_beta = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta ); 00111 00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00113 cblas_zhemm( cblas_order, 00114 blas_side, 00115 blas_uplo, 00116 m_C, 00117 n_C, 00118 buff_alpha, 00119 buff_A, ldim_A, 00120 buff_B, ldim_B, 00121 buff_beta, 00122 buff_C, ldim_C ); 00123 #else 00124 FLA_C2F( zhemm )( &blas_side, 00125 &blas_uplo, 00126 &m_C, 00127 &n_C, 00128 buff_alpha, 00129 buff_A, &ldim_A, 00130 buff_B, &ldim_B, 00131 buff_beta, 00132 buff_C, &ldim_C ); 00133 #endif 00134 break; 00135 } 00136 00137 } 00138 00139 return FLA_SUCCESS; 00140 }
void FLA_F2C() fla_hemm_external_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Hemm_external().
00144 { 00145 *IERROR = FLA_Hemm_external( *( ( FLA_Side * ) side ), 00146 *( ( FLA_Uplo * ) uplo ), 00147 *( ( FLA_Obj * ) alpha ), 00148 *( ( FLA_Obj * ) A ), 00149 *( ( FLA_Obj * ) B ), 00150 *( ( FLA_Obj * ) beta ), 00151 *( ( FLA_Obj * ) C ) ); 00152 }
void FLA_F2C() fla_hemm_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Hemm_internal | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_hemm_t * | cntl | |||
) |
Referenced by FLA_Hemm(), FLA_Hemm_internal(), FLA_Hemm_ll_blk_var1(), FLA_Hemm_ll_blk_var10(), FLA_Hemm_ll_blk_var2(), FLA_Hemm_ll_blk_var3(), FLA_Hemm_ll_blk_var4(), FLA_Hemm_ll_blk_var5(), FLA_Hemm_ll_blk_var6(), FLA_Hemm_ll_blk_var7(), FLA_Hemm_ll_blk_var8(), FLA_Hemm_ll_blk_var9(), FLA_Hemm_lu_blk_var1(), FLA_Hemm_lu_blk_var10(), FLA_Hemm_lu_blk_var2(), FLA_Hemm_lu_blk_var3(), FLA_Hemm_lu_blk_var4(), FLA_Hemm_lu_blk_var5(), FLA_Hemm_lu_blk_var6(), FLA_Hemm_lu_blk_var7(), FLA_Hemm_lu_blk_var8(), FLA_Hemm_lu_blk_var9(), FLA_Hemm_rl_blk_var1(), FLA_Hemm_rl_blk_var10(), FLA_Hemm_rl_blk_var2(), FLA_Hemm_rl_blk_var3(), FLA_Hemm_rl_blk_var4(), FLA_Hemm_rl_blk_var5(), FLA_Hemm_rl_blk_var6(), FLA_Hemm_rl_blk_var7(), FLA_Hemm_rl_blk_var8(), FLA_Hemm_rl_blk_var9(), FLA_Hemm_ru_blk_var1(), FLA_Hemm_ru_blk_var10(), FLA_Hemm_ru_blk_var2(), FLA_Hemm_ru_blk_var3(), FLA_Hemm_ru_blk_var4(), FLA_Hemm_ru_blk_var5(), FLA_Hemm_ru_blk_var6(), FLA_Hemm_ru_blk_var7(), FLA_Hemm_ru_blk_var8(), FLA_Hemm_ru_blk_var9(), and FLASH_Hemm().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Hemm_internal_check( side, uplo, alpha, A, B, beta, C, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Hemm_internal( side, 00051 uplo, 00052 alpha, 00053 *FLASH_OBJ_PTR_AT( A ), 00054 *FLASH_OBJ_PTR_AT( B ), 00055 beta, 00056 *FLASH_OBJ_PTR_AT( C ), 00057 flash_hemm_cntl_mm ); 00058 } 00059 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00060 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00061 FLASH_Queue_get_enabled( ) ) 00062 { 00063 // Enqueue 00064 ENQUEUE_FLASH_Hemm( side, uplo, alpha, A, B, beta, C, cntl ); 00065 } 00066 else 00067 { 00068 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00069 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00070 !FLASH_Queue_get_enabled( ) ) 00071 { 00072 // Execute leaf 00073 cntl = flash_hemm_cntl_blas; 00074 } 00075 00076 // Parameter combinations 00077 if ( side == FLA_LEFT ) 00078 { 00079 if ( uplo == FLA_LOWER_TRIANGULAR ) 00080 r_val = FLA_Hemm_ll( alpha, A, B, beta, C, cntl ); 00081 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00082 r_val = FLA_Hemm_lu( alpha, A, B, beta, C, cntl ); 00083 } 00084 else if ( side == FLA_RIGHT ) 00085 { 00086 if ( uplo == FLA_LOWER_TRIANGULAR ) 00087 r_val = FLA_Hemm_rl( alpha, A, B, beta, C, cntl ); 00088 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00089 r_val = FLA_Hemm_ru( alpha, A, B, beta, C, cntl ); 00090 } 00091 } 00092 00093 return r_val; 00094 }
FLA_Error FLA_Hemm_internal_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_hemm_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Hemm_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, B ); 00045 FLA_Check_error_code( e_val ); 00046 00047 e_val = FLA_Check_identical_object_elemtype( A, C ); 00048 FLA_Check_error_code( e_val ); 00049 00050 // Verify conformality between all the objects. This check works regardless 00051 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00052 // element length and width are used instead of scalar length and width. 00053 if ( side == FLA_LEFT ) 00054 { 00055 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00056 FLA_Check_error_code( e_val ); 00057 } 00058 else 00059 { 00060 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C ); 00061 FLA_Check_error_code( e_val ); 00062 } 00063 00064 return FLA_SUCCESS; 00065 }
FLA_Error FLA_Hemm_ll_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_hemm_t * | cntl | |||
) |
References FLA_Hemm_external().
Referenced by FLA_Hemm_ll().
00041 { 00042 return FLA_Hemm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, alpha, A, B, beta, C ); 00043 }
FLA_Error FLA_Hemm_lu_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_hemm_t * | cntl | |||
) |
References FLA_Hemm_external().
Referenced by FLA_Hemm_lu().
00046 { 00047 return FLA_Hemm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, alpha, A, B, beta, C ); 00048 }
FLA_Error FLA_Hemm_rl_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_hemm_t * | cntl | |||
) |
References FLA_Hemm_external().
Referenced by FLA_Hemm_rl().
00051 { 00052 return FLA_Hemm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, alpha, A, B, beta, C ); 00053 }
FLA_Error FLA_Hemm_ru_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_hemm_t * | cntl | |||
) |
References FLA_Hemm_external().
Referenced by FLA_Hemm_ru().
00056 { 00057 return FLA_Hemm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, alpha, A, B, beta, C ); 00058 }
FLA_Error FLA_Hemm_task | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_hemm_t * | cntl | |||
) |
References FLA_Hemm_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Hemm_external( side, uplo, alpha, A, B, beta, C ); 00038 }
FLA_Error FLA_Her2k | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Her2k_check(), FLA_Her2k_external(), FLA_Her2k_internal(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_width().
Referenced by fla_her2k_f().
00042 { 00043 FLA_Error r_val = FLA_SUCCESS; 00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00045 FLA_Datatype datatype; 00046 int k_AB, m_AB; 00047 int FLA_HER2K_VAR3_BLOCKSIZE; 00048 int FLA_HER2K_VAR9_BLOCKSIZE; 00049 #endif 00050 00051 // Check parameters. 00052 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00053 FLA_Her2k_check( uplo, trans, alpha, A, B, beta, C ); 00054 00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00056 // Determine the datatype of the operation. 00057 datatype = FLA_Obj_datatype( A ); 00058 00059 // Extract the appropriate blocksize for the given datatype. 00060 FLA_HER2K_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_her2k_var3_bsize ); 00061 FLA_HER2K_VAR9_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_her2k_var9_bsize ); 00062 00063 // Determine the dimension of C. 00064 m_AB = FLA_Obj_length( C ); 00065 00066 // Determine the dimensions of A and B after transposition. 00067 if ( trans == FLA_NO_TRANSPOSE ) 00068 k_AB = FLA_Obj_width( A ); 00069 else 00070 k_AB = FLA_Obj_length( A ); 00071 00072 // Invoke FLA_Her2k_internal() with the appropriate control tree. 00073 if ( FLA_HER2K_VAR3_BLOCKSIZE < m_AB && FLA_HER2K_VAR9_BLOCKSIZE < k_AB ) 00074 { 00075 r_val = FLA_Her2k_internal( uplo, trans, alpha, A, B, beta, C, fla_her2k_cntl_sq ); 00076 } 00077 else if ( FLA_HER2K_VAR3_BLOCKSIZE < m_AB && k_AB <= FLA_HER2K_VAR9_BLOCKSIZE ) 00078 { 00079 r_val = FLA_Her2k_internal( uplo, trans, alpha, A, B, beta, C, fla_her2k_cntl_op ); 00080 } 00081 else if ( m_AB <= FLA_HER2K_VAR3_BLOCKSIZE && FLA_HER2K_VAR9_BLOCKSIZE < k_AB ) 00082 { 00083 r_val = FLA_Her2k_internal( uplo, trans, alpha, A, B, beta, C, fla_her2k_cntl_ip ); 00084 } 00085 else if ( m_AB <= FLA_HER2K_VAR3_BLOCKSIZE && k_AB <= FLA_HER2K_VAR9_BLOCKSIZE ) 00086 { 00087 r_val = FLA_Her2k_external( uplo, trans, alpha, A, B, beta, C ); 00088 } 00089 #else 00090 r_val = FLA_Her2k_external( uplo, trans, alpha, A, B, beta, C ); 00091 #endif 00092 00093 return r_val; 00094 }
FLA_Error FLA_Her2k_check | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_complex_object(), FLA_Check_consistent_object_datatype(), FLA_Check_identical_object_datatype(), FLA_Check_identical_object_precision(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_real_object(), FLA_Check_square(), FLA_Check_valid_complex_trans(), and FLA_Check_valid_uplo().
Referenced by FLA_Her2k(), FLA_Her2k_external(), and FLASH_Her2k().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_uplo( uplo ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_complex_trans( trans ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_complex_object( A ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_nonconstant_object( A ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_real_object( beta ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_identical_object_datatype( A, B ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_identical_object_datatype( A, C ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_identical_object_precision( A, beta ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_if_scalar( alpha ); 00067 FLA_Check_error_code( e_val ); 00068 00069 e_val = FLA_Check_if_scalar( beta ); 00070 FLA_Check_error_code( e_val ); 00071 00072 e_val = FLA_Check_square( C ); 00073 FLA_Check_error_code( e_val ); 00074 00075 if ( trans == FLA_NO_TRANSPOSE ) 00076 { 00077 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, B, C ); 00078 FLA_Check_error_code( e_val ); 00079 } 00080 else 00081 { 00082 e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00083 FLA_Check_error_code( e_val ); 00084 } 00085 00086 return FLA_SUCCESS; 00087 }
FLA_Error FLA_Her2k_external | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References cblas_cher2k(), cblas_zher2k(), CblasColMajor, cher2k(), FLA_Check_error_level(), FLA_Her2k_check(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), and zher2k().
Referenced by FLA_Her2k(), fla_her2k_external_f(), FLA_Her2k_lh_task(), FLA_Her2k_ln_task(), FLA_Her2k_task(), FLA_Her2k_uh_task(), and FLA_Her2k_un_task().
00036 { 00037 FLA_Datatype datatype; 00038 int k_AB; 00039 int m_A, n_A, ldim_A; 00040 int ldim_B; 00041 int m_C, ldim_C; 00042 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00043 CBLAS_ORDER cblas_order = CblasColMajor; 00044 CBLAS_UPLO blas_uplo; 00045 CBLAS_TRANSPOSE blas_trans; 00046 #else 00047 char blas_uplo; 00048 char blas_trans; 00049 #endif 00050 00051 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00052 FLA_Her2k_check( uplo, trans, alpha, A, B, beta, C ); 00053 00054 if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS; 00055 00056 datatype = FLA_Obj_datatype( A ); 00057 00058 m_A = FLA_Obj_length( A ); 00059 n_A = FLA_Obj_width( A ); 00060 ldim_A = FLA_Obj_ldim( A ); 00061 00062 ldim_B = FLA_Obj_ldim( B ); 00063 00064 m_C = FLA_Obj_length( C ); 00065 ldim_C = FLA_Obj_ldim( C ); 00066 00067 if ( trans == FLA_NO_TRANSPOSE ) 00068 k_AB = n_A; 00069 else 00070 k_AB = m_A; 00071 00072 FLA_Param_map_to_blas_uplo( uplo, &blas_uplo ); 00073 FLA_Param_map_to_blas_trans( trans, &blas_trans ); 00074 00075 00076 switch( datatype ){ 00077 00078 case FLA_COMPLEX: 00079 { 00080 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A ); 00081 scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B ); 00082 scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C ); 00083 scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha ); 00084 float *buff_beta = ( float * ) FLA_FLOAT_PTR( beta ); 00085 00086 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00087 cblas_cher2k( cblas_order, 00088 blas_uplo, 00089 blas_trans, 00090 m_C, 00091 k_AB, 00092 buff_alpha, 00093 buff_A, ldim_A, 00094 buff_B, ldim_B, 00095 *buff_beta, 00096 buff_C, ldim_C ); 00097 #else 00098 FLA_C2F( cher2k )( &blas_uplo, 00099 &blas_trans, 00100 &m_C, 00101 &k_AB, 00102 buff_alpha, 00103 buff_A, &ldim_A, 00104 buff_B, &ldim_B, 00105 buff_beta, 00106 buff_C, &ldim_C ); 00107 #endif 00108 break; 00109 } 00110 00111 case FLA_DOUBLE_COMPLEX: 00112 { 00113 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A ); 00114 dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B ); 00115 dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C ); 00116 dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha ); 00117 double *buff_beta = ( double * ) FLA_DOUBLE_PTR( beta ); 00118 00119 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00120 cblas_zher2k( cblas_order, 00121 blas_uplo, 00122 blas_trans, 00123 m_C, 00124 k_AB, 00125 buff_alpha, 00126 buff_A, ldim_A, 00127 buff_B, ldim_B, 00128 *buff_beta, 00129 buff_C, ldim_C ); 00130 #else 00131 FLA_C2F( zher2k )( &blas_uplo, 00132 &blas_trans, 00133 &m_C, 00134 &k_AB, 00135 buff_alpha, 00136 buff_A, &ldim_A, 00137 buff_B, &ldim_B, 00138 buff_beta, 00139 buff_C, &ldim_C ); 00140 #endif 00141 break; 00142 } 00143 00144 } 00145 00146 return FLA_SUCCESS; 00147 }
void FLA_F2C() fla_her2k_external_f | ( | F_INT * | uplo, | |
F_INT * | trans, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Her2k_external().
00151 { 00152 *IERROR = FLA_Her2k_external( *( ( FLA_Uplo * ) uplo ), 00153 *( ( FLA_Trans * ) trans ), 00154 *( ( FLA_Obj * ) alpha ), 00155 *( ( FLA_Obj * ) A ), 00156 *( ( FLA_Obj * ) B ), 00157 *( ( FLA_Obj * ) beta ), 00158 *( ( FLA_Obj * ) C ) ); 00159 }
void FLA_F2C() fla_her2k_f | ( | F_INT * | uplo, | |
F_INT * | trans, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Her2k_internal | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_her2k_t * | cntl | |||
) |
Referenced by FLA_Her2k(), FLA_Her2k_internal(), FLA_Her2k_lh_blk_var1(), FLA_Her2k_lh_blk_var10(), FLA_Her2k_lh_blk_var2(), FLA_Her2k_lh_blk_var3(), FLA_Her2k_lh_blk_var4(), FLA_Her2k_lh_blk_var5(), FLA_Her2k_lh_blk_var6(), FLA_Her2k_lh_blk_var7(), FLA_Her2k_lh_blk_var8(), FLA_Her2k_lh_blk_var9(), FLA_Her2k_ln_blk_var1(), FLA_Her2k_ln_blk_var10(), FLA_Her2k_ln_blk_var2(), FLA_Her2k_ln_blk_var3(), FLA_Her2k_ln_blk_var4(), FLA_Her2k_ln_blk_var5(), FLA_Her2k_ln_blk_var6(), FLA_Her2k_ln_blk_var7(), FLA_Her2k_ln_blk_var8(), FLA_Her2k_ln_blk_var9(), FLA_Her2k_uh_blk_var1(), FLA_Her2k_uh_blk_var10(), FLA_Her2k_uh_blk_var2(), FLA_Her2k_uh_blk_var3(), FLA_Her2k_uh_blk_var4(), FLA_Her2k_uh_blk_var5(), FLA_Her2k_uh_blk_var6(), FLA_Her2k_uh_blk_var7(), FLA_Her2k_uh_blk_var8(), FLA_Her2k_uh_blk_var9(), FLA_Her2k_un_blk_var1(), FLA_Her2k_un_blk_var10(), FLA_Her2k_un_blk_var2(), FLA_Her2k_un_blk_var3(), FLA_Her2k_un_blk_var4(), FLA_Her2k_un_blk_var5(), FLA_Her2k_un_blk_var6(), FLA_Her2k_un_blk_var7(), FLA_Her2k_un_blk_var8(), FLA_Her2k_un_blk_var9(), and FLASH_Her2k().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Her2k_internal_check( uplo, trans, alpha, A, B, beta, C, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Her2k_internal( uplo, 00051 trans, 00052 alpha, 00053 *FLASH_OBJ_PTR_AT( A ), 00054 *FLASH_OBJ_PTR_AT( B ), 00055 beta, 00056 *FLASH_OBJ_PTR_AT( C ), 00057 flash_her2k_cntl_sq ); 00058 } 00059 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00060 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00061 FLASH_Queue_get_enabled( ) ) 00062 { 00063 // Enqueue 00064 ENQUEUE_FLASH_Her2k( uplo, trans, alpha, A, B, beta, C, cntl ); 00065 } 00066 else 00067 { 00068 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00069 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00070 !FLASH_Queue_get_enabled( ) ) 00071 { 00072 // Execute leaf 00073 cntl = flash_her2k_cntl_blas; 00074 } 00075 00076 // Parameter combinations 00077 if ( uplo == FLA_LOWER_TRIANGULAR ) 00078 { 00079 if ( trans == FLA_NO_TRANSPOSE ) 00080 r_val = FLA_Her2k_ln( alpha, A, B, beta, C, cntl ); 00081 else if ( trans == FLA_CONJ_TRANSPOSE ) 00082 r_val = FLA_Her2k_lh( alpha, A, B, beta, C, cntl ); 00083 } 00084 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00085 { 00086 if ( trans == FLA_NO_TRANSPOSE ) 00087 r_val = FLA_Her2k_un( alpha, A, B, beta, C, cntl ); 00088 else if ( trans == FLA_CONJ_TRANSPOSE ) 00089 r_val = FLA_Her2k_uh( alpha, A, B, beta, C, cntl ); 00090 } 00091 } 00092 00093 return r_val; 00094 }
FLA_Error FLA_Her2k_internal_check | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_her2k_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Her2k_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, B ); 00045 FLA_Check_error_code( e_val ); 00046 00047 e_val = FLA_Check_identical_object_elemtype( A, C ); 00048 FLA_Check_error_code( e_val ); 00049 00050 // Verify conformality between all the objects. This check works regardless 00051 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00052 // element length and width are used instead of scalar length and width. 00053 if ( trans == FLA_NO_TRANSPOSE ) 00054 { 00055 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, B, C ); 00056 FLA_Check_error_code( e_val ); 00057 } 00058 else 00059 { 00060 e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00061 FLA_Check_error_code( e_val ); 00062 } 00063 00064 return FLA_SUCCESS; 00065 }
FLA_Error FLA_Her2k_lh_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_her2k_t * | cntl | |||
) |
References FLA_Her2k_external().
Referenced by FLA_Her2k_lh().
00046 { 00047 return FLA_Her2k_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C ); 00048 }
FLA_Error FLA_Her2k_ln_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_her2k_t * | cntl | |||
) |
References FLA_Her2k_external().
Referenced by FLA_Her2k_ln().
00041 { 00042 return FLA_Her2k_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, B, beta, C ); 00043 }
FLA_Error FLA_Her2k_task | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_her2k_t * | cntl | |||
) |
References FLA_Her2k_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Her2k_external( uplo, trans, alpha, A, B, beta, C ); 00038 }
FLA_Error FLA_Her2k_uh_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_her2k_t * | cntl | |||
) |
References FLA_Her2k_external().
Referenced by FLA_Her2k_uh().
00056 { 00057 return FLA_Her2k_external( FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, alpha, A, B, beta, C ); 00058 }
FLA_Error FLA_Her2k_un_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_her2k_t * | cntl | |||
) |
References FLA_Her2k_external().
Referenced by FLA_Her2k_un().
00051 { 00052 return FLA_Her2k_external( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, B, beta, C ); 00053 }
FLA_Error FLA_Herk | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Herk_check(), FLA_Herk_external(), FLA_Herk_internal(), FLA_Obj_datatype(), FLA_Obj_length(), and FLA_Obj_width().
Referenced by fla_herk_f().
00042 { 00043 FLA_Error r_val = FLA_SUCCESS; 00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00045 FLA_Datatype datatype; 00046 int m_C, k_A; 00047 int FLA_HERK_VAR2_BLOCKSIZE; 00048 int FLA_HERK_VAR5_BLOCKSIZE; 00049 #endif 00050 00051 // Check parameters. 00052 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00053 FLA_Herk_check( uplo, trans, alpha, A, beta, C ); 00054 00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00056 // Determine the datatype of the operation. 00057 datatype = FLA_Obj_datatype( A ); 00058 00059 // Extract the appropriate blocksize for the given datatype. 00060 FLA_HERK_VAR2_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_herk_var2_bsize ); 00061 FLA_HERK_VAR5_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_herk_var5_bsize ); 00062 00063 // Determine the dimension of C. 00064 m_C = FLA_Obj_length( C ); 00065 00066 // Determine the k dimension of A after transposition. 00067 if ( trans == FLA_NO_TRANSPOSE ) 00068 k_A = FLA_Obj_width( A ); 00069 else 00070 k_A = FLA_Obj_length( A ); 00071 00072 // Invoke FLA_Herk_internal() with the appropriate control tree. 00073 if ( FLA_HERK_VAR2_BLOCKSIZE < m_C && FLA_HERK_VAR5_BLOCKSIZE < k_A ) 00074 { 00075 r_val = FLA_Herk_internal( uplo, trans, alpha, A, beta, C, fla_herk_cntl_sq ); 00076 } 00077 else if ( FLA_HERK_VAR2_BLOCKSIZE < m_C && k_A <= FLA_HERK_VAR5_BLOCKSIZE ) 00078 { 00079 r_val = FLA_Herk_internal( uplo, trans, alpha, A, beta, C, fla_herk_cntl_op ); 00080 } 00081 else if ( m_C <= FLA_HERK_VAR2_BLOCKSIZE && FLA_HERK_VAR5_BLOCKSIZE < k_A ) 00082 { 00083 r_val = FLA_Herk_internal( uplo, trans, alpha, A, beta, C, fla_herk_cntl_ip ); 00084 } 00085 else if ( m_C <= FLA_HERK_VAR2_BLOCKSIZE && k_A <= FLA_HERK_VAR5_BLOCKSIZE ) 00086 { 00087 r_val = FLA_Herk_external( uplo, trans, alpha, A, beta, C ); 00088 } 00089 #else 00090 r_val = FLA_Herk_external( uplo, trans, alpha, A, beta, C ); 00091 #endif 00092 00093 return r_val; 00094 }
FLA_Error FLA_Herk_check | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_complex_object(), FLA_Check_identical_object_datatype(), FLA_Check_identical_object_precision(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_real_object(), FLA_Check_square(), FLA_Check_valid_complex_trans(), and FLA_Check_valid_uplo().
Referenced by FLA_Herk(), FLA_Herk_external(), and FLASH_Herk().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_uplo( uplo ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_complex_trans( trans ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_complex_object( A ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_nonconstant_object( A ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_real_object( alpha ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_real_object( beta ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_identical_object_datatype( A, C ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_identical_object_precision( A, alpha ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_identical_object_precision( A, beta ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_if_scalar( alpha ); 00067 FLA_Check_error_code( e_val ); 00068 00069 e_val = FLA_Check_if_scalar( beta ); 00070 FLA_Check_error_code( e_val ); 00071 00072 e_val = FLA_Check_square( C ); 00073 FLA_Check_error_code( e_val ); 00074 00075 if ( trans == FLA_NO_TRANSPOSE ) 00076 { 00077 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C ); 00078 FLA_Check_error_code( e_val ); 00079 } 00080 else 00081 { 00082 e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C ); 00083 FLA_Check_error_code( e_val ); 00084 } 00085 00086 return FLA_SUCCESS; 00087 }
FLA_Error FLA_Herk_external | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References cblas_cherk(), cblas_zherk(), CblasColMajor, cherk(), FLA_Check_error_level(), FLA_Herk_check(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), and zherk().
Referenced by FLA_Herk(), fla_herk_external_f(), FLA_Herk_lh_task(), FLA_Herk_ln_task(), FLA_Herk_task(), FLA_Herk_uh_task(), FLA_Herk_un_task(), and FLA_Random_spd_matrix().
00036 { 00037 FLA_Datatype datatype; 00038 int k_A; 00039 int m_A, n_A, ldim_A; 00040 int m_C, ldim_C; 00041 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00042 CBLAS_ORDER cblas_order = CblasColMajor; 00043 CBLAS_UPLO blas_uplo; 00044 CBLAS_TRANSPOSE blas_trans; 00045 #else 00046 char blas_uplo; 00047 char blas_trans; 00048 #endif 00049 00050 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00051 FLA_Herk_check( uplo, trans, alpha, A, beta, C ); 00052 00053 if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS; 00054 00055 datatype = FLA_Obj_datatype( A ); 00056 00057 m_A = FLA_Obj_length( A ); 00058 n_A = FLA_Obj_width( A ); 00059 ldim_A = FLA_Obj_ldim( A ); 00060 00061 m_C = FLA_Obj_length( C ); 00062 ldim_C = FLA_Obj_ldim( C ); 00063 00064 if ( trans == FLA_NO_TRANSPOSE ) 00065 k_A = n_A; 00066 else 00067 k_A = m_A; 00068 00069 FLA_Param_map_to_blas_uplo( uplo, &blas_uplo ); 00070 FLA_Param_map_to_blas_trans( trans, &blas_trans ); 00071 00072 00073 switch( datatype ){ 00074 00075 case FLA_COMPLEX: 00076 { 00077 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A ); 00078 scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C ); 00079 float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha ); 00080 float *buff_beta = ( float * ) FLA_FLOAT_PTR( beta ); 00081 00082 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00083 cblas_cherk( cblas_order, 00084 blas_uplo, 00085 blas_trans, 00086 m_C, 00087 k_A, 00088 *buff_alpha, 00089 buff_A, ldim_A, 00090 *buff_beta, 00091 buff_C, ldim_C ); 00092 #else 00093 FLA_C2F( cherk )( &blas_uplo, 00094 &blas_trans, 00095 &m_C, 00096 &k_A, 00097 buff_alpha, 00098 buff_A, &ldim_A, 00099 buff_beta, 00100 buff_C, &ldim_C ); 00101 #endif 00102 break; 00103 } 00104 00105 case FLA_DOUBLE_COMPLEX: 00106 { 00107 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A ); 00108 dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C ); 00109 double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha ); 00110 double *buff_beta = ( double * ) FLA_DOUBLE_PTR( beta ); 00111 00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00113 cblas_zherk( cblas_order, 00114 blas_uplo, 00115 blas_trans, 00116 m_C, 00117 k_A, 00118 *buff_alpha, 00119 buff_A, ldim_A, 00120 *buff_beta, 00121 buff_C, ldim_C ); 00122 #else 00123 FLA_C2F( zherk )( &blas_uplo, 00124 &blas_trans, 00125 &m_C, 00126 &k_A, 00127 buff_alpha, 00128 buff_A, &ldim_A, 00129 buff_beta, 00130 buff_C, &ldim_C ); 00131 #endif 00132 break; 00133 } 00134 00135 } 00136 00137 return FLA_SUCCESS; 00138 }
void FLA_F2C() fla_herk_external_f | ( | F_INT * | uplo, | |
F_INT * | trans, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Herk_external().
00142 { 00143 *IERROR = FLA_Herk_external( *( ( FLA_Uplo * ) uplo ), 00144 *( ( FLA_Trans * ) trans ), 00145 *( ( FLA_Obj * ) alpha ), 00146 *( ( FLA_Obj * ) A ), 00147 *( ( FLA_Obj * ) beta ), 00148 *( ( FLA_Obj * ) C ) ); 00149 }
void FLA_F2C() fla_herk_f | ( | F_INT * | uplo, | |
F_INT * | trans, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Herk_internal | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_herk_t * | cntl | |||
) |
Referenced by FLA_Chol_l_blk_var1(), FLA_Chol_l_blk_var2(), FLA_Chol_l_blk_var3(), FLA_Chol_u_blk_var1(), FLA_Chol_u_blk_var2(), FLA_Chol_u_blk_var3(), FLA_Herk(), FLA_Herk_internal(), FLA_Herk_lh_blk_var1(), FLA_Herk_lh_blk_var2(), FLA_Herk_lh_blk_var3(), FLA_Herk_lh_blk_var4(), FLA_Herk_lh_blk_var5(), FLA_Herk_lh_blk_var6(), FLA_Herk_ln_blk_var1(), FLA_Herk_ln_blk_var2(), FLA_Herk_ln_blk_var3(), FLA_Herk_ln_blk_var4(), FLA_Herk_ln_blk_var5(), FLA_Herk_ln_blk_var6(), FLA_Herk_uh_blk_var1(), FLA_Herk_uh_blk_var2(), FLA_Herk_uh_blk_var3(), FLA_Herk_uh_blk_var4(), FLA_Herk_uh_blk_var5(), FLA_Herk_uh_blk_var6(), FLA_Herk_un_blk_var1(), FLA_Herk_un_blk_var2(), FLA_Herk_un_blk_var3(), FLA_Herk_un_blk_var4(), FLA_Herk_un_blk_var5(), FLA_Herk_un_blk_var6(), FLA_Ttmm_l_blk_var1(), FLA_Ttmm_l_blk_var2(), FLA_Ttmm_l_blk_var3(), FLA_Ttmm_u_blk_var1(), FLA_Ttmm_u_blk_var2(), FLA_Ttmm_u_blk_var3(), and FLASH_Herk().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Herk_internal_check( uplo, trans, alpha, A, beta, C, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Herk_internal( uplo, 00051 trans, 00052 alpha, 00053 *FLASH_OBJ_PTR_AT( A ), 00054 beta, 00055 *FLASH_OBJ_PTR_AT( C ), 00056 flash_herk_cntl_sq ); 00057 } 00058 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00059 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00060 FLASH_Queue_get_enabled( ) ) 00061 { 00062 // Enqueue 00063 ENQUEUE_FLASH_Herk( uplo, trans, alpha, A, beta, C, cntl ); 00064 } 00065 else 00066 { 00067 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00068 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00069 !FLASH_Queue_get_enabled( ) ) 00070 { 00071 // Execute leaf 00072 cntl = flash_herk_cntl_blas; 00073 } 00074 00075 // Parameter combinations 00076 if ( uplo == FLA_LOWER_TRIANGULAR ) 00077 { 00078 if ( trans == FLA_NO_TRANSPOSE ) 00079 r_val = FLA_Herk_ln( alpha, A, beta, C, cntl ); 00080 else if ( trans == FLA_CONJ_TRANSPOSE ) 00081 r_val = FLA_Herk_lh( alpha, A, beta, C, cntl ); 00082 } 00083 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00084 { 00085 if ( trans == FLA_NO_TRANSPOSE ) 00086 r_val = FLA_Herk_un( alpha, A, beta, C, cntl ); 00087 else if ( trans == FLA_CONJ_TRANSPOSE ) 00088 r_val = FLA_Herk_uh( alpha, A, beta, C, cntl ); 00089 } 00090 } 00091 00092 return r_val; 00093 }
FLA_Error FLA_Herk_internal_check | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_herk_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Herk_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, C ); 00045 FLA_Check_error_code( e_val ); 00046 00047 // Verify conformality between all the objects. This check works regardless 00048 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00049 // element length and width are used instead of scalar length and width. 00050 if ( trans == FLA_NO_TRANSPOSE ) 00051 { 00052 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C ); 00053 FLA_Check_error_code( e_val ); 00054 } 00055 else 00056 { 00057 e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C ); 00058 FLA_Check_error_code( e_val ); 00059 } 00060 00061 return FLA_SUCCESS; 00062 }
References FLA_Herk_external().
Referenced by FLA_Herk_lh().
00046 { 00047 return FLA_Herk_external( FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, alpha, A, beta, C ); 00048 }
References FLA_Herk_external().
Referenced by FLA_Herk_ln().
00041 { 00042 return FLA_Herk_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, beta, C ); 00043 }
FLA_Error FLA_Herk_task | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_herk_t * | cntl | |||
) |
References FLA_Herk_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Herk_external( uplo, trans, alpha, A, beta, C ); 00038 }
References FLA_Herk_external().
Referenced by FLA_Herk_uh().
00056 { 00057 return FLA_Herk_external( FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, alpha, A, beta, C ); 00058 }
References FLA_Herk_external().
Referenced by FLA_Herk_un().
00051 { 00052 return FLA_Herk_external( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, beta, C ); 00053 }
FLA_Error FLA_Symm | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Symm_check(), FLA_Symm_external(), and FLA_Symm_internal().
Referenced by fla_symm_f().
00042 { 00043 FLA_Error r_val = FLA_SUCCESS; 00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00045 FLA_Datatype datatype; 00046 int m_A, nrhs_B; 00047 int FLA_SYMM_VAR4_BLOCKSIZE; 00048 int FLA_SYMM_VAR9_BLOCKSIZE; 00049 #endif 00050 00051 // Check parameters. 00052 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00053 FLA_Symm_check( side, uplo, alpha, A, B, beta, C ); 00054 00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00056 // Determine the datatype of the operation. 00057 datatype = FLA_Obj_datatype( A ); 00058 00059 // Extract the appropriate blocksize for the given datatype. 00060 FLA_SYMM_VAR4_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_symm_var4_bsize ); 00061 FLA_SYMM_VAR9_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_symm_var9_bsize ); 00062 00063 // Determine the dimensions of A. 00064 m_A = FLA_Obj_length( A ); 00065 00066 // Determine the number of "right-hand sides" of B (ie: the number of columns 00067 // when side == FLA_LEFT and rows when side == FLA_RIGHT). 00068 if ( side == FLA_LEFT ) 00069 nrhs_B = FLA_Obj_width( B ); 00070 else 00071 nrhs_B = FLA_Obj_length( B ); 00072 00073 // Invoke FLA_Symm_internal() with the appropriate control tree. 00074 if ( FLA_SYMM_VAR4_BLOCKSIZE < m_A && FLA_SYMM_VAR9_BLOCKSIZE < nrhs_B ) 00075 { 00076 r_val = FLA_Symm_internal( side, uplo, alpha, A, B, beta, C, fla_symm_cntl_mm ); 00077 } 00078 else if ( FLA_SYMM_VAR4_BLOCKSIZE < m_A && nrhs_B <= FLA_SYMM_VAR9_BLOCKSIZE ) 00079 { 00080 r_val = FLA_Symm_internal( side, uplo, alpha, A, B, beta, C, fla_symm_cntl_mp ); 00081 } 00082 else if ( m_A <= FLA_SYMM_VAR4_BLOCKSIZE && FLA_SYMM_VAR9_BLOCKSIZE < nrhs_B ) 00083 { 00084 r_val = FLA_Symm_internal( side, uplo, alpha, A, B, beta, C, fla_symm_cntl_bp ); 00085 } 00086 else if ( m_A <= FLA_SYMM_VAR4_BLOCKSIZE && nrhs_B <= FLA_SYMM_VAR9_BLOCKSIZE ) 00087 { 00088 r_val = FLA_Symm_external( side, uplo, alpha, A, B, beta, C ); 00089 } 00090 #else 00091 r_val = FLA_Symm_external( side, uplo, alpha, A, B, beta, C ); 00092 #endif 00093 00094 return r_val; 00095 }
FLA_Error FLA_Symm_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_side(), and FLA_Check_valid_uplo().
Referenced by FLA_Symm(), FLA_Symm_external(), and FLASH_Symm().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_side( side ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_uplo( uplo ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_floating_object( A ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_nonconstant_object( A ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_identical_object_datatype( A, B ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_identical_object_datatype( A, C ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_consistent_object_datatype( A, beta ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_if_scalar( alpha ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_if_scalar( beta ); 00067 FLA_Check_error_code( e_val ); 00068 00069 e_val = FLA_Check_square( A ); 00070 FLA_Check_error_code( e_val ); 00071 00072 if ( side == FLA_LEFT ) 00073 { 00074 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00075 FLA_Check_error_code( e_val ); 00076 } 00077 else 00078 { 00079 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C ); 00080 FLA_Check_error_code( e_val ); 00081 } 00082 00083 return FLA_SUCCESS; 00084 }
FLA_Error FLA_Symm_external | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References cblas_csymm(), cblas_dsymm(), cblas_ssymm(), cblas_zsymm(), CblasColMajor, csymm(), dsymm(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_uplo(), FLA_Symm_check(), ssymm(), and zsymm().
Referenced by FLA_Symm(), fla_symm_external_f(), FLA_Symm_ll_task(), FLA_Symm_lu_task(), FLA_Symm_rl_task(), FLA_Symm_ru_task(), and FLA_Symm_task().
00036 { 00037 FLA_Datatype datatype; 00038 int ldim_A; 00039 int ldim_B; 00040 int m_C, n_C, ldim_C; 00041 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00042 CBLAS_ORDER cblas_order = CblasColMajor; 00043 CBLAS_SIDE blas_side; 00044 CBLAS_UPLO blas_uplo; 00045 #else 00046 char blas_side; 00047 char blas_uplo; 00048 #endif 00049 00050 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00051 FLA_Symm_check( side, uplo, alpha, A, B, beta, C ); 00052 00053 if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS; 00054 00055 datatype = FLA_Obj_datatype( A ); 00056 00057 ldim_A = FLA_Obj_ldim( A ); 00058 00059 ldim_B = FLA_Obj_ldim( B ); 00060 00061 m_C = FLA_Obj_length( C ); 00062 n_C = FLA_Obj_width( C ); 00063 ldim_C = FLA_Obj_ldim( C ); 00064 00065 FLA_Param_map_to_blas_side( side, &blas_side ); 00066 FLA_Param_map_to_blas_uplo( uplo, &blas_uplo ); 00067 00068 00069 switch( datatype ){ 00070 00071 case FLA_FLOAT: 00072 { 00073 float *buff_A = ( float * ) FLA_FLOAT_PTR( A ); 00074 float *buff_B = ( float * ) FLA_FLOAT_PTR( B ); 00075 float *buff_C = ( float * ) FLA_FLOAT_PTR( C ); 00076 float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha ); 00077 float *buff_beta = ( float * ) FLA_FLOAT_PTR( beta ); 00078 00079 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00080 cblas_ssymm( cblas_order, 00081 blas_side, 00082 blas_uplo, 00083 m_C, 00084 n_C, 00085 *buff_alpha, 00086 buff_A, ldim_A, 00087 buff_B, ldim_B, 00088 *buff_beta, 00089 buff_C, ldim_C ); 00090 #else 00091 FLA_C2F( ssymm )( &blas_side, 00092 &blas_uplo, 00093 &m_C, 00094 &n_C, 00095 buff_alpha, 00096 buff_A, &ldim_A, 00097 buff_B, &ldim_B, 00098 buff_beta, 00099 buff_C, &ldim_C ); 00100 #endif 00101 break; 00102 } 00103 00104 case FLA_DOUBLE: 00105 { 00106 double *buff_A = ( double * ) FLA_DOUBLE_PTR( A ); 00107 double *buff_B = ( double * ) FLA_DOUBLE_PTR( B ); 00108 double *buff_C = ( double * ) FLA_DOUBLE_PTR( C ); 00109 double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha ); 00110 double *buff_beta = ( double * ) FLA_DOUBLE_PTR( beta ); 00111 00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00113 cblas_dsymm( cblas_order, 00114 blas_side, 00115 blas_uplo, 00116 m_C, 00117 n_C, 00118 *buff_alpha, 00119 buff_A, ldim_A, 00120 buff_B, ldim_B, 00121 *buff_beta, 00122 buff_C, ldim_C ); 00123 #else 00124 FLA_C2F( dsymm )( &blas_side, 00125 &blas_uplo, 00126 &m_C, 00127 &n_C, 00128 buff_alpha, 00129 buff_A, &ldim_A, 00130 buff_B, &ldim_B, 00131 buff_beta, 00132 buff_C, &ldim_C ); 00133 #endif 00134 break; 00135 } 00136 00137 case FLA_COMPLEX: 00138 { 00139 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A ); 00140 scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B ); 00141 scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C ); 00142 scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha ); 00143 scomplex *buff_beta = ( scomplex * ) FLA_COMPLEX_PTR( beta ); 00144 00145 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00146 cblas_csymm( cblas_order, 00147 blas_side, 00148 blas_uplo, 00149 m_C, 00150 n_C, 00151 buff_alpha, 00152 buff_A, ldim_A, 00153 buff_B, ldim_B, 00154 buff_beta, 00155 buff_C, ldim_C ); 00156 #else 00157 FLA_C2F( csymm )( &blas_side, 00158 &blas_uplo, 00159 &m_C, 00160 &n_C, 00161 buff_alpha, 00162 buff_A, &ldim_A, 00163 buff_B, &ldim_B, 00164 buff_beta, 00165 buff_C, &ldim_C ); 00166 #endif 00167 break; 00168 } 00169 00170 case FLA_DOUBLE_COMPLEX: 00171 { 00172 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A ); 00173 dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B ); 00174 dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C ); 00175 dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha ); 00176 dcomplex *buff_beta = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta ); 00177 00178 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00179 cblas_zsymm( cblas_order, 00180 blas_side, 00181 blas_uplo, 00182 m_C, 00183 n_C, 00184 buff_alpha, 00185 buff_A, ldim_A, 00186 buff_B, ldim_B, 00187 buff_beta, 00188 buff_C, ldim_C ); 00189 #else 00190 FLA_C2F( zsymm )( &blas_side, 00191 &blas_uplo, 00192 &m_C, 00193 &n_C, 00194 buff_alpha, 00195 buff_A, &ldim_A, 00196 buff_B, &ldim_B, 00197 buff_beta, 00198 buff_C, &ldim_C ); 00199 #endif 00200 break; 00201 } 00202 00203 } 00204 00205 return FLA_SUCCESS; 00206 }
void FLA_F2C() fla_symm_external_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Symm_external().
00210 { 00211 *IERROR = FLA_Symm_external( *( ( FLA_Side * ) side ), 00212 *( ( FLA_Uplo * ) uplo ), 00213 *( ( FLA_Obj * ) alpha ), 00214 *( ( FLA_Obj * ) A ), 00215 *( ( FLA_Obj * ) B ), 00216 *( ( FLA_Obj * ) beta ), 00217 *( ( FLA_Obj * ) C ) ); 00218 }
void FLA_F2C() fla_symm_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Symm_internal | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_symm_t * | cntl | |||
) |
Referenced by FLA_Symm(), FLA_Symm_internal(), FLA_Symm_ll_blk_var1(), FLA_Symm_ll_blk_var10(), FLA_Symm_ll_blk_var2(), FLA_Symm_ll_blk_var3(), FLA_Symm_ll_blk_var4(), FLA_Symm_ll_blk_var5(), FLA_Symm_ll_blk_var6(), FLA_Symm_ll_blk_var7(), FLA_Symm_ll_blk_var8(), FLA_Symm_ll_blk_var9(), FLA_Symm_lu_blk_var1(), FLA_Symm_lu_blk_var10(), FLA_Symm_lu_blk_var2(), FLA_Symm_lu_blk_var3(), FLA_Symm_lu_blk_var4(), FLA_Symm_lu_blk_var5(), FLA_Symm_lu_blk_var6(), FLA_Symm_lu_blk_var7(), FLA_Symm_lu_blk_var8(), FLA_Symm_lu_blk_var9(), FLA_Symm_rl_blk_var1(), FLA_Symm_rl_blk_var10(), FLA_Symm_rl_blk_var2(), FLA_Symm_rl_blk_var3(), FLA_Symm_rl_blk_var4(), FLA_Symm_rl_blk_var5(), FLA_Symm_rl_blk_var6(), FLA_Symm_rl_blk_var7(), FLA_Symm_rl_blk_var8(), FLA_Symm_rl_blk_var9(), FLA_Symm_ru_blk_var1(), FLA_Symm_ru_blk_var10(), FLA_Symm_ru_blk_var2(), FLA_Symm_ru_blk_var3(), FLA_Symm_ru_blk_var4(), FLA_Symm_ru_blk_var5(), FLA_Symm_ru_blk_var6(), FLA_Symm_ru_blk_var7(), FLA_Symm_ru_blk_var8(), FLA_Symm_ru_blk_var9(), and FLASH_Symm().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Symm_internal_check( side, uplo, alpha, A, B, beta, C, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Symm_internal( side, 00051 uplo, 00052 alpha, 00053 *FLASH_OBJ_PTR_AT( A ), 00054 *FLASH_OBJ_PTR_AT( B ), 00055 beta, 00056 *FLASH_OBJ_PTR_AT( C ), 00057 flash_symm_cntl_mm ); 00058 } 00059 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00060 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00061 FLASH_Queue_get_enabled( ) ) 00062 { 00063 // Enqueue 00064 ENQUEUE_FLASH_Symm( side, uplo, alpha, A, B, beta, C, cntl ); 00065 } 00066 else 00067 { 00068 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00069 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00070 !FLASH_Queue_get_enabled( ) ) 00071 { 00072 // Execute leaf 00073 cntl = flash_symm_cntl_blas; 00074 } 00075 00076 // Parameter combinations 00077 if ( side == FLA_LEFT ) 00078 { 00079 if ( uplo == FLA_LOWER_TRIANGULAR ) 00080 r_val = FLA_Symm_ll( alpha, A, B, beta, C, cntl ); 00081 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00082 r_val = FLA_Symm_lu( alpha, A, B, beta, C, cntl ); 00083 } 00084 else if ( side == FLA_RIGHT ) 00085 { 00086 if ( uplo == FLA_LOWER_TRIANGULAR ) 00087 r_val = FLA_Symm_rl( alpha, A, B, beta, C, cntl ); 00088 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00089 r_val = FLA_Symm_ru( alpha, A, B, beta, C, cntl ); 00090 } 00091 } 00092 00093 return r_val; 00094 }
FLA_Error FLA_Symm_internal_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_symm_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Symm_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, B ); 00045 FLA_Check_error_code( e_val ); 00046 00047 e_val = FLA_Check_identical_object_elemtype( A, C ); 00048 FLA_Check_error_code( e_val ); 00049 00050 // Verify conformality between all the objects. This check works regardless 00051 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00052 // element length and width are used instead of scalar length and width. 00053 if ( side == FLA_LEFT ) 00054 { 00055 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00056 FLA_Check_error_code( e_val ); 00057 } 00058 else 00059 { 00060 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C ); 00061 FLA_Check_error_code( e_val ); 00062 } 00063 00064 return FLA_SUCCESS; 00065 }
FLA_Error FLA_Symm_ll_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_symm_t * | cntl | |||
) |
References FLA_Symm_external().
Referenced by FLA_Symm_ll().
00041 { 00042 return FLA_Symm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, alpha, A, B, beta, C ); 00043 }
FLA_Error FLA_Symm_lu_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_symm_t * | cntl | |||
) |
References FLA_Symm_external().
Referenced by FLA_Symm_lu().
00046 { 00047 return FLA_Symm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, alpha, A, B, beta, C ); 00048 }
FLA_Error FLA_Symm_rl_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_symm_t * | cntl | |||
) |
References FLA_Symm_external().
Referenced by FLA_Symm_rl().
00051 { 00052 return FLA_Symm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, alpha, A, B, beta, C ); 00053 }
FLA_Error FLA_Symm_ru_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_symm_t * | cntl | |||
) |
References FLA_Symm_external().
Referenced by FLA_Symm_ru().
00056 { 00057 return FLA_Symm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, alpha, A, B, beta, C ); 00058 }
FLA_Error FLA_Symm_task | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_symm_t * | cntl | |||
) |
References FLA_Symm_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Symm_external( side, uplo, alpha, A, B, beta, C ); 00038 }
FLA_Error FLA_Syr2k | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Syr2k_check(), FLA_Syr2k_external(), and FLA_Syr2k_internal().
Referenced by fla_syr2k_f().
00042 { 00043 FLA_Error r_val = FLA_SUCCESS; 00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00045 FLA_Datatype datatype; 00046 int k_AB, m_AB; 00047 int FLA_SYR2K_VAR3_BLOCKSIZE; 00048 int FLA_SYR2K_VAR9_BLOCKSIZE; 00049 #endif 00050 00051 // Check parameters. 00052 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00053 FLA_Syr2k_check( uplo, trans, alpha, A, B, beta, C ); 00054 00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00056 // Determine the datatype of the operation. 00057 datatype = FLA_Obj_datatype( A ); 00058 00059 // Extract the appropriate blocksize for the given datatype. 00060 FLA_SYR2K_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_syr2k_var3_bsize ); 00061 FLA_SYR2K_VAR9_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_syr2k_var9_bsize ); 00062 00063 // Determine the dimension of C. 00064 m_AB = FLA_Obj_length( C ); 00065 00066 // Determine the dimensions of A and B after transposition. 00067 if ( trans == FLA_NO_TRANSPOSE ) 00068 k_AB = FLA_Obj_width( A ); 00069 else 00070 k_AB = FLA_Obj_length( A ); 00071 00072 // Invoke FLA_Syr2k_internal() with the appropriate control tree. 00073 if ( FLA_SYR2K_VAR3_BLOCKSIZE < m_AB && FLA_SYR2K_VAR9_BLOCKSIZE < k_AB ) 00074 { 00075 r_val = FLA_Syr2k_internal( uplo, trans, alpha, A, B, beta, C, fla_syr2k_cntl_sq ); 00076 } 00077 else if ( FLA_SYR2K_VAR3_BLOCKSIZE < m_AB && k_AB <= FLA_SYR2K_VAR9_BLOCKSIZE ) 00078 { 00079 r_val = FLA_Syr2k_internal( uplo, trans, alpha, A, B, beta, C, fla_syr2k_cntl_op ); 00080 } 00081 else if ( m_AB <= FLA_SYR2K_VAR3_BLOCKSIZE && FLA_SYR2K_VAR9_BLOCKSIZE < k_AB ) 00082 { 00083 r_val = FLA_Syr2k_internal( uplo, trans, alpha, A, B, beta, C, fla_syr2k_cntl_ip ); 00084 } 00085 else if ( m_AB <= FLA_SYR2K_VAR3_BLOCKSIZE && k_AB <= FLA_SYR2K_VAR9_BLOCKSIZE ) 00086 { 00087 r_val = FLA_Syr2k_external( uplo, trans, alpha, A, B, beta, C ); 00088 } 00089 #else 00090 r_val = FLA_Syr2k_external( uplo, trans, alpha, A, B, beta, C ); 00091 #endif 00092 00093 return r_val; 00094 }
FLA_Error FLA_Syr2k_check | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_real_trans(), and FLA_Check_valid_uplo().
Referenced by FLA_Syr2k(), FLA_Syr2k_external(), and FLASH_Syr2k().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_uplo( uplo ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_real_trans( trans ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_floating_object( A ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_nonconstant_object( A ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_identical_object_datatype( A, B ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_identical_object_datatype( A, C ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_consistent_object_datatype( A, beta ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_if_scalar( alpha ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_if_scalar( beta ); 00067 FLA_Check_error_code( e_val ); 00068 00069 e_val = FLA_Check_square( C ); 00070 FLA_Check_error_code( e_val ); 00071 00072 if ( trans == FLA_NO_TRANSPOSE ) 00073 { 00074 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, B, C ); 00075 FLA_Check_error_code( e_val ); 00076 } 00077 else 00078 { 00079 e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00080 FLA_Check_error_code( e_val ); 00081 } 00082 00083 return FLA_SUCCESS; 00084 }
FLA_Error FLA_Syr2k_external | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References cblas_csyr2k(), cblas_dsyr2k(), cblas_ssyr2k(), cblas_zsyr2k(), CblasColMajor, csyr2k(), dsyr2k(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Syr2k_check(), ssyr2k(), and zsyr2k().
Referenced by FLA_Syr2k(), fla_syr2k_external_f(), FLA_Syr2k_ln_task(), FLA_Syr2k_lt_task(), FLA_Syr2k_task(), FLA_Syr2k_un_task(), and FLA_Syr2k_ut_task().
00036 { 00037 FLA_Datatype datatype; 00038 int k_AB; 00039 int m_A, n_A, ldim_A; 00040 int ldim_B; 00041 int m_C, ldim_C; 00042 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00043 CBLAS_ORDER cblas_order = CblasColMajor; 00044 CBLAS_UPLO blas_uplo; 00045 CBLAS_TRANSPOSE blas_trans; 00046 #else 00047 char blas_uplo; 00048 char blas_trans; 00049 #endif 00050 00051 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00052 FLA_Syr2k_check( uplo, trans, alpha, A, B, beta, C ); 00053 00054 if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS; 00055 00056 datatype = FLA_Obj_datatype( A ); 00057 00058 m_A = FLA_Obj_length( A ); 00059 n_A = FLA_Obj_width( A ); 00060 ldim_A = FLA_Obj_ldim( A ); 00061 00062 ldim_B = FLA_Obj_ldim( B ); 00063 00064 m_C = FLA_Obj_length( C ); 00065 ldim_C = FLA_Obj_ldim( C ); 00066 00067 if ( trans == FLA_NO_TRANSPOSE ) 00068 k_AB = n_A; 00069 else 00070 k_AB = m_A; 00071 00072 FLA_Param_map_to_blas_uplo( uplo, &blas_uplo ); 00073 FLA_Param_map_to_blas_trans( trans, &blas_trans ); 00074 00075 00076 switch( datatype ){ 00077 00078 case FLA_FLOAT: 00079 { 00080 float *buff_A = ( float * ) FLA_FLOAT_PTR( A ); 00081 float *buff_B = ( float * ) FLA_FLOAT_PTR( B ); 00082 float *buff_C = ( float * ) FLA_FLOAT_PTR( C ); 00083 float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha ); 00084 float *buff_beta = ( float * ) FLA_FLOAT_PTR( beta ); 00085 00086 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00087 cblas_ssyr2k( cblas_order, 00088 blas_uplo, 00089 blas_trans, 00090 m_C, 00091 k_AB, 00092 *buff_alpha, 00093 buff_A, ldim_A, 00094 buff_B, ldim_B, 00095 *buff_beta, 00096 buff_C, ldim_C ); 00097 #else 00098 FLA_C2F( ssyr2k )( &blas_uplo, 00099 &blas_trans, 00100 &m_C, 00101 &k_AB, 00102 buff_alpha, 00103 buff_A, &ldim_A, 00104 buff_B, &ldim_B, 00105 buff_beta, 00106 buff_C, &ldim_C ); 00107 #endif 00108 break; 00109 } 00110 00111 case FLA_DOUBLE: 00112 { 00113 double *buff_A = ( double * ) FLA_DOUBLE_PTR( A ); 00114 double *buff_B = ( double * ) FLA_DOUBLE_PTR( B ); 00115 double *buff_C = ( double * ) FLA_DOUBLE_PTR( C ); 00116 double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha ); 00117 double *buff_beta = ( double * ) FLA_DOUBLE_PTR( beta ); 00118 00119 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00120 cblas_dsyr2k( cblas_order, 00121 blas_uplo, 00122 blas_trans, 00123 m_C, 00124 k_AB, 00125 *buff_alpha, 00126 buff_A, ldim_A, 00127 buff_B, ldim_B, 00128 *buff_beta, 00129 buff_C, ldim_C ); 00130 #else 00131 FLA_C2F( dsyr2k )( &blas_uplo, 00132 &blas_trans, 00133 &m_C, 00134 &k_AB, 00135 buff_alpha, 00136 buff_A, &ldim_A, 00137 buff_B, &ldim_B, 00138 buff_beta, 00139 buff_C, &ldim_C ); 00140 #endif 00141 break; 00142 } 00143 00144 case FLA_COMPLEX: 00145 { 00146 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A ); 00147 scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B ); 00148 scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C ); 00149 scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha ); 00150 scomplex *buff_beta = ( scomplex * ) FLA_COMPLEX_PTR( beta ); 00151 00152 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00153 cblas_csyr2k( cblas_order, 00154 blas_uplo, 00155 blas_trans, 00156 m_C, 00157 k_AB, 00158 buff_alpha, 00159 buff_A, ldim_A, 00160 buff_B, ldim_B, 00161 buff_beta, 00162 buff_C, ldim_C ); 00163 #else 00164 FLA_C2F( csyr2k )( &blas_uplo, 00165 &blas_trans, 00166 &m_C, 00167 &k_AB, 00168 buff_alpha, 00169 buff_A, &ldim_A, 00170 buff_B, &ldim_B, 00171 buff_beta, 00172 buff_C, &ldim_C ); 00173 #endif 00174 break; 00175 } 00176 case FLA_DOUBLE_COMPLEX: 00177 { 00178 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A ); 00179 dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B ); 00180 dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C ); 00181 dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha ); 00182 dcomplex *buff_beta = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta ); 00183 00184 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00185 cblas_zsyr2k( cblas_order, 00186 blas_uplo, 00187 blas_trans, 00188 m_C, 00189 k_AB, 00190 buff_alpha, 00191 buff_A, ldim_A, 00192 buff_B, ldim_B, 00193 buff_beta, 00194 buff_C, ldim_C ); 00195 #else 00196 FLA_C2F( zsyr2k )( &blas_uplo, 00197 &blas_trans, 00198 &m_C, 00199 &k_AB, 00200 buff_alpha, 00201 buff_A, &ldim_A, 00202 buff_B, &ldim_B, 00203 buff_beta, 00204 buff_C, &ldim_C ); 00205 #endif 00206 break; 00207 } 00208 00209 } 00210 00211 return FLA_SUCCESS; 00212 }
void FLA_F2C() fla_syr2k_external_f | ( | F_INT * | uplo, | |
F_INT * | trans, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Syr2k_external().
00216 { 00217 *IERROR = FLA_Syr2k_external( *( ( FLA_Uplo * ) uplo ), 00218 *( ( FLA_Trans * ) trans ), 00219 *( ( FLA_Obj * ) alpha ), 00220 *( ( FLA_Obj * ) A ), 00221 *( ( FLA_Obj * ) B ), 00222 *( ( FLA_Obj * ) beta ), 00223 *( ( FLA_Obj * ) C ) ); 00224 }
void FLA_F2C() fla_syr2k_f | ( | F_INT * | uplo, | |
F_INT * | trans, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Syr2k_internal | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syr2k_t * | cntl | |||
) |
Referenced by FLA_Syr2k(), FLA_Syr2k_internal(), FLA_Syr2k_ln_blk_var1(), FLA_Syr2k_ln_blk_var10(), FLA_Syr2k_ln_blk_var2(), FLA_Syr2k_ln_blk_var3(), FLA_Syr2k_ln_blk_var4(), FLA_Syr2k_ln_blk_var5(), FLA_Syr2k_ln_blk_var6(), FLA_Syr2k_ln_blk_var7(), FLA_Syr2k_ln_blk_var8(), FLA_Syr2k_ln_blk_var9(), FLA_Syr2k_lt_blk_var1(), FLA_Syr2k_lt_blk_var10(), FLA_Syr2k_lt_blk_var2(), FLA_Syr2k_lt_blk_var3(), FLA_Syr2k_lt_blk_var4(), FLA_Syr2k_lt_blk_var5(), FLA_Syr2k_lt_blk_var6(), FLA_Syr2k_lt_blk_var7(), FLA_Syr2k_lt_blk_var8(), FLA_Syr2k_lt_blk_var9(), FLA_Syr2k_un_blk_var1(), FLA_Syr2k_un_blk_var10(), FLA_Syr2k_un_blk_var2(), FLA_Syr2k_un_blk_var3(), FLA_Syr2k_un_blk_var4(), FLA_Syr2k_un_blk_var5(), FLA_Syr2k_un_blk_var6(), FLA_Syr2k_un_blk_var7(), FLA_Syr2k_un_blk_var8(), FLA_Syr2k_un_blk_var9(), FLA_Syr2k_ut_blk_var1(), FLA_Syr2k_ut_blk_var10(), FLA_Syr2k_ut_blk_var2(), FLA_Syr2k_ut_blk_var3(), FLA_Syr2k_ut_blk_var4(), FLA_Syr2k_ut_blk_var5(), FLA_Syr2k_ut_blk_var6(), FLA_Syr2k_ut_blk_var7(), FLA_Syr2k_ut_blk_var8(), FLA_Syr2k_ut_blk_var9(), and FLASH_Syr2k().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Syr2k_internal_check( uplo, trans, alpha, A, B, beta, C, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Syr2k_internal( uplo, 00051 trans, 00052 alpha, 00053 *FLASH_OBJ_PTR_AT( A ), 00054 *FLASH_OBJ_PTR_AT( B ), 00055 beta, 00056 *FLASH_OBJ_PTR_AT( C ), 00057 flash_syr2k_cntl_sq ); 00058 } 00059 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00060 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00061 FLASH_Queue_get_enabled( ) ) 00062 { 00063 // Enqueue 00064 ENQUEUE_FLASH_Syr2k( uplo, trans, alpha, A, B, beta, C, cntl ); 00065 } 00066 else 00067 { 00068 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00069 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00070 !FLASH_Queue_get_enabled( ) ) 00071 { 00072 // Execute leaf 00073 cntl = flash_syr2k_cntl_blas; 00074 } 00075 00076 // Parameter combinations 00077 if ( uplo == FLA_LOWER_TRIANGULAR ) 00078 { 00079 if ( trans == FLA_NO_TRANSPOSE ) 00080 r_val = FLA_Syr2k_ln( alpha, A, B, beta, C, cntl ); 00081 else if ( trans == FLA_TRANSPOSE ) 00082 r_val = FLA_Syr2k_lt( alpha, A, B, beta, C, cntl ); 00083 } 00084 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00085 { 00086 if ( trans == FLA_NO_TRANSPOSE ) 00087 r_val = FLA_Syr2k_un( alpha, A, B, beta, C, cntl ); 00088 else if ( trans == FLA_TRANSPOSE ) 00089 r_val = FLA_Syr2k_ut( alpha, A, B, beta, C, cntl ); 00090 } 00091 } 00092 00093 return r_val; 00094 }
FLA_Error FLA_Syr2k_internal_check | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syr2k_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Syr2k_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, B ); 00045 FLA_Check_error_code( e_val ); 00046 00047 e_val = FLA_Check_identical_object_elemtype( A, C ); 00048 FLA_Check_error_code( e_val ); 00049 00050 // Verify conformality between all the objects. This check works regardless 00051 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00052 // element length and width are used instead of scalar length and width. 00053 if ( trans == FLA_NO_TRANSPOSE ) 00054 { 00055 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, B, C ); 00056 FLA_Check_error_code( e_val ); 00057 } 00058 else 00059 { 00060 e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00061 FLA_Check_error_code( e_val ); 00062 } 00063 00064 return FLA_SUCCESS; 00065 }
FLA_Error FLA_Syr2k_ln_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syr2k_t * | cntl | |||
) |
References FLA_Syr2k_external().
Referenced by FLA_Syr2k_ln().
00041 { 00042 return FLA_Syr2k_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, B, beta, C ); 00043 }
FLA_Error FLA_Syr2k_lt_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syr2k_t * | cntl | |||
) |
References FLA_Syr2k_external().
Referenced by FLA_Syr2k_lt().
00046 { 00047 return FLA_Syr2k_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, alpha, A, B, beta, C ); 00048 }
FLA_Error FLA_Syr2k_task | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syr2k_t * | cntl | |||
) |
References FLA_Syr2k_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Syr2k_external( uplo, trans, alpha, A, B, beta, C ); 00038 }
FLA_Error FLA_Syr2k_un_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syr2k_t * | cntl | |||
) |
References FLA_Syr2k_external().
Referenced by FLA_Syr2k_un().
00051 { 00052 return FLA_Syr2k_external( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, B, beta, C ); 00053 }
FLA_Error FLA_Syr2k_ut_task | ( | FLA_Obj | alpha, | |
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syr2k_t * | cntl | |||
) |
References FLA_Syr2k_external().
Referenced by FLA_Syr2k_ut().
00056 { 00057 return FLA_Syr2k_external( FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, alpha, A, B, beta, C ); 00058 }
FLA_Error FLA_Syrk | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Syrk_check(), FLA_Syrk_external(), and FLA_Syrk_internal().
Referenced by fla_syrk_f().
00042 { 00043 FLA_Error r_val = FLA_SUCCESS; 00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00045 FLA_Datatype datatype; 00046 int m_C, k_A; 00047 int FLA_SYRK_VAR2_BLOCKSIZE; 00048 int FLA_SYRK_VAR5_BLOCKSIZE; 00049 #endif 00050 00051 // Check parameters. 00052 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00053 FLA_Syrk_check( uplo, trans, alpha, A, beta, C ); 00054 00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00056 // Determine the datatype of the operation. 00057 datatype = FLA_Obj_datatype( A ); 00058 00059 // Extract the appropriate blocksize for the given datatype. 00060 FLA_SYRK_VAR2_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_syrk_var2_bsize ); 00061 FLA_SYRK_VAR5_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_syrk_var5_bsize ); 00062 00063 // Determine the dimension of C. 00064 m_C = FLA_Obj_length( C ); 00065 00066 // Determine the k dimension of A after transposition. 00067 if ( trans == FLA_NO_TRANSPOSE ) 00068 k_A = FLA_Obj_width( A ); 00069 else 00070 k_A = FLA_Obj_length( A ); 00071 00072 // Invoke FLA_Syrk_internal() with the appropriate control tree. 00073 if ( FLA_SYRK_VAR2_BLOCKSIZE < m_C && FLA_SYRK_VAR5_BLOCKSIZE < k_A ) 00074 { 00075 r_val = FLA_Syrk_internal( uplo, trans, alpha, A, beta, C, fla_syrk_cntl_sq ); 00076 } 00077 else if ( FLA_SYRK_VAR2_BLOCKSIZE < m_C && k_A <= FLA_SYRK_VAR5_BLOCKSIZE ) 00078 { 00079 r_val = FLA_Syrk_internal( uplo, trans, alpha, A, beta, C, fla_syrk_cntl_op ); 00080 } 00081 else if ( m_C <= FLA_SYRK_VAR2_BLOCKSIZE && FLA_SYRK_VAR5_BLOCKSIZE < k_A ) 00082 { 00083 r_val = FLA_Syrk_internal( uplo, trans, alpha, A, beta, C, fla_syrk_cntl_ip ); 00084 } 00085 else if ( m_C <= FLA_SYRK_VAR2_BLOCKSIZE && k_A <= FLA_SYRK_VAR5_BLOCKSIZE ) 00086 { 00087 r_val = FLA_Syrk_external( uplo, trans, alpha, A, beta, C ); 00088 } 00089 #else 00090 //r_val = FLA_Syrk_internal( uplo, trans, alpha, A, beta, C, fla_syrk_cntl_op ); 00091 r_val = FLA_Syrk_external( uplo, trans, alpha, A, beta, C ); 00092 #endif 00093 00094 return r_val; 00095 }
FLA_Error FLA_Syrk_check | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_real_trans(), and FLA_Check_valid_uplo().
Referenced by FLA_Syrk(), FLA_Syrk_external(), and FLASH_Syrk().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_uplo( uplo ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_real_trans( trans ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_floating_object( A ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_nonconstant_object( A ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_identical_object_datatype( A, C ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_consistent_object_datatype( A, beta ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_if_scalar( alpha ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_if_scalar( beta ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_square( C ); 00067 FLA_Check_error_code( e_val ); 00068 00069 if ( trans == FLA_NO_TRANSPOSE ) 00070 { 00071 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C ); 00072 FLA_Check_error_code( e_val ); 00073 } 00074 else 00075 { 00076 e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C ); 00077 FLA_Check_error_code( e_val ); 00078 } 00079 00080 return FLA_SUCCESS; 00081 }
FLA_Error FLA_Syrk_external | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References cblas_csyrk(), cblas_dsyrk(), cblas_ssyrk(), cblas_zsyrk(), CblasColMajor, csyrk(), dsyrk(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Syrk_check(), ssyrk(), and zsyrk().
Referenced by FLA_Random_spd_matrix(), FLA_Syrk(), fla_syrk_external_f(), FLA_Syrk_ln_task(), FLA_Syrk_lt_task(), FLA_Syrk_task(), FLA_Syrk_un_task(), and FLA_Syrk_ut_task().
00036 { 00037 FLA_Datatype datatype; 00038 int k_A; 00039 int m_A, n_A, ldim_A; 00040 int m_C, ldim_C; 00041 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00042 CBLAS_ORDER cblas_order = CblasColMajor; 00043 CBLAS_UPLO blas_uplo; 00044 CBLAS_TRANSPOSE blas_trans; 00045 #else 00046 char blas_uplo; 00047 char blas_trans; 00048 #endif 00049 00050 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00051 FLA_Syrk_check( uplo, trans, alpha, A, beta, C ); 00052 00053 if ( FLA_Obj_has_zero_dim( C ) ) return FLA_SUCCESS; 00054 00055 datatype = FLA_Obj_datatype( A ); 00056 00057 m_A = FLA_Obj_length( A ); 00058 n_A = FLA_Obj_width( A ); 00059 ldim_A = FLA_Obj_ldim( A ); 00060 00061 m_C = FLA_Obj_length( C ); 00062 ldim_C = FLA_Obj_ldim( C ); 00063 00064 if ( trans == FLA_NO_TRANSPOSE ) 00065 k_A = n_A; 00066 else 00067 k_A = m_A; 00068 00069 FLA_Param_map_to_blas_uplo( uplo, &blas_uplo ); 00070 FLA_Param_map_to_blas_trans( trans, &blas_trans ); 00071 00072 00073 switch( datatype ){ 00074 00075 case FLA_FLOAT: 00076 { 00077 float *buff_A = ( float * ) FLA_FLOAT_PTR( A ); 00078 float *buff_C = ( float * ) FLA_FLOAT_PTR( C ); 00079 float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha ); 00080 float *buff_beta = ( float * ) FLA_FLOAT_PTR( beta ); 00081 00082 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00083 cblas_ssyrk( cblas_order, 00084 blas_uplo, 00085 blas_trans, 00086 m_C, 00087 k_A, 00088 *buff_alpha, 00089 buff_A, ldim_A, 00090 *buff_beta, 00091 buff_C, ldim_C ); 00092 #else 00093 FLA_C2F( ssyrk )( &blas_uplo, 00094 &blas_trans, 00095 &m_C, 00096 &k_A, 00097 buff_alpha, 00098 buff_A, &ldim_A, 00099 buff_beta, 00100 buff_C, &ldim_C ); 00101 #endif 00102 break; 00103 } 00104 00105 case FLA_DOUBLE: 00106 { 00107 double *buff_A = ( double * ) FLA_DOUBLE_PTR( A ); 00108 double *buff_C = ( double * ) FLA_DOUBLE_PTR( C ); 00109 double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha ); 00110 double *buff_beta = ( double * ) FLA_DOUBLE_PTR( beta ); 00111 00112 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00113 cblas_dsyrk( cblas_order, 00114 blas_uplo, 00115 blas_trans, 00116 m_C, 00117 k_A, 00118 *buff_alpha, 00119 buff_A, ldim_A, 00120 *buff_beta, 00121 buff_C, ldim_C ); 00122 #else 00123 FLA_C2F( dsyrk )( &blas_uplo, 00124 &blas_trans, 00125 &m_C, 00126 &k_A, 00127 buff_alpha, 00128 buff_A, &ldim_A, 00129 buff_beta, 00130 buff_C, &ldim_C ); 00131 #endif 00132 break; 00133 } 00134 00135 case FLA_COMPLEX: 00136 { 00137 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A ); 00138 scomplex *buff_C = ( scomplex * ) FLA_COMPLEX_PTR( C ); 00139 scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha ); 00140 scomplex *buff_beta = ( scomplex * ) FLA_COMPLEX_PTR( beta ); 00141 00142 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00143 cblas_csyrk( cblas_order, 00144 blas_uplo, 00145 blas_trans, 00146 m_C, 00147 k_A, 00148 buff_alpha, 00149 buff_A, ldim_A, 00150 buff_beta, 00151 buff_C, ldim_C ); 00152 #else 00153 FLA_C2F( csyrk )( &blas_uplo, 00154 &blas_trans, 00155 &m_C, 00156 &k_A, 00157 buff_alpha, 00158 buff_A, &ldim_A, 00159 buff_beta, 00160 buff_C, &ldim_C ); 00161 #endif 00162 break; 00163 } 00164 00165 case FLA_DOUBLE_COMPLEX: 00166 { 00167 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A ); 00168 dcomplex *buff_C = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( C ); 00169 dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha ); 00170 dcomplex *buff_beta = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta ); 00171 00172 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00173 cblas_zsyrk( cblas_order, 00174 blas_uplo, 00175 blas_trans, 00176 m_C, 00177 k_A, 00178 buff_alpha, 00179 buff_A, ldim_A, 00180 buff_beta, 00181 buff_C, ldim_C ); 00182 #else 00183 FLA_C2F( zsyrk )( &blas_uplo, 00184 &blas_trans, 00185 &m_C, 00186 &k_A, 00187 buff_alpha, 00188 buff_A, &ldim_A, 00189 buff_beta, 00190 buff_C, &ldim_C ); 00191 #endif 00192 break; 00193 } 00194 00195 } 00196 00197 return FLA_SUCCESS; 00198 }
void FLA_F2C() fla_syrk_external_f | ( | F_INT * | uplo, | |
F_INT * | trans, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Syrk_external().
00202 { 00203 *IERROR = FLA_Syrk_external( *( ( FLA_Uplo * ) uplo ), 00204 *( ( FLA_Trans * ) trans ), 00205 *( ( FLA_Obj * ) alpha ), 00206 *( ( FLA_Obj * ) A ), 00207 *( ( FLA_Obj * ) beta ), 00208 *( ( FLA_Obj * ) C ) ); 00209 }
void FLA_F2C() fla_syrk_f | ( | F_INT * | uplo, | |
F_INT * | trans, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Syrk_internal | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syrk_t * | cntl | |||
) |
Referenced by FLA_Chol_l_blk_var1(), FLA_Chol_l_blk_var2(), FLA_Chol_l_blk_var3(), FLA_Chol_u_blk_var1(), FLA_Chol_u_blk_var2(), FLA_Chol_u_blk_var3(), FLA_Syrk(), FLA_Syrk_internal(), FLA_Syrk_ln_blk_var1(), FLA_Syrk_ln_blk_var2(), FLA_Syrk_ln_blk_var3(), FLA_Syrk_ln_blk_var4(), FLA_Syrk_ln_blk_var5(), FLA_Syrk_ln_blk_var6(), FLA_Syrk_lt_blk_var1(), FLA_Syrk_lt_blk_var2(), FLA_Syrk_lt_blk_var3(), FLA_Syrk_lt_blk_var4(), FLA_Syrk_lt_blk_var5(), FLA_Syrk_lt_blk_var6(), FLA_Syrk_un_blk_var1(), FLA_Syrk_un_blk_var2(), FLA_Syrk_un_blk_var3(), FLA_Syrk_un_blk_var4(), FLA_Syrk_un_blk_var5(), FLA_Syrk_un_blk_var6(), FLA_Syrk_ut_blk_var1(), FLA_Syrk_ut_blk_var2(), FLA_Syrk_ut_blk_var3(), FLA_Syrk_ut_blk_var4(), FLA_Syrk_ut_blk_var5(), FLA_Syrk_ut_blk_var6(), FLA_Ttmm_l_blk_var1(), FLA_Ttmm_l_blk_var2(), FLA_Ttmm_l_blk_var3(), FLA_Ttmm_u_blk_var1(), FLA_Ttmm_u_blk_var2(), FLA_Ttmm_u_blk_var3(), and FLASH_Syrk().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Syrk_internal_check( uplo, trans, alpha, A, beta, C, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Syrk_internal( uplo, 00051 trans, 00052 alpha, 00053 *FLASH_OBJ_PTR_AT( A ), 00054 beta, 00055 *FLASH_OBJ_PTR_AT( C ), 00056 flash_syrk_cntl_sq ); 00057 } 00058 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00059 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00060 FLASH_Queue_get_enabled( ) ) 00061 { 00062 // Enqueue 00063 ENQUEUE_FLASH_Syrk( uplo, trans, alpha, A, beta, C, cntl ); 00064 } 00065 else 00066 { 00067 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00068 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00069 !FLASH_Queue_get_enabled( ) ) 00070 { 00071 // Execute leaf 00072 cntl = flash_syrk_cntl_blas; 00073 } 00074 00075 // Parameter combinations 00076 if ( uplo == FLA_LOWER_TRIANGULAR ) 00077 { 00078 if ( trans == FLA_NO_TRANSPOSE ) 00079 r_val = FLA_Syrk_ln( alpha, A, beta, C, cntl ); 00080 else if ( trans == FLA_TRANSPOSE ) 00081 r_val = FLA_Syrk_lt( alpha, A, beta, C, cntl ); 00082 } 00083 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00084 { 00085 if ( trans == FLA_NO_TRANSPOSE ) 00086 r_val = FLA_Syrk_un( alpha, A, beta, C, cntl ); 00087 else if ( trans == FLA_TRANSPOSE ) 00088 r_val = FLA_Syrk_ut( alpha, A, beta, C, cntl ); 00089 } 00090 } 00091 00092 return r_val; 00093 }
FLA_Error FLA_Syrk_internal_check | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syrk_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Syrk_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, C ); 00045 FLA_Check_error_code( e_val ); 00046 00047 // Verify conformality between all the objects. This check works regardless 00048 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00049 // element length and width are used instead of scalar length and width. 00050 if ( trans == FLA_NO_TRANSPOSE ) 00051 { 00052 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_TRANSPOSE, A, A, C ); 00053 FLA_Check_error_code( e_val ); 00054 } 00055 else 00056 { 00057 e_val = FLA_Check_matrix_matrix_dims( FLA_TRANSPOSE, FLA_NO_TRANSPOSE, A, A, C ); 00058 FLA_Check_error_code( e_val ); 00059 } 00060 00061 return FLA_SUCCESS; 00062 }
References FLA_Syrk_external().
Referenced by FLA_Syrk_ln().
00041 { 00042 return FLA_Syrk_external( FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, beta, C ); 00043 }
References FLA_Syrk_external().
Referenced by FLA_Syrk_lt().
00046 { 00047 return FLA_Syrk_external( FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, alpha, A, beta, C ); 00048 }
FLA_Error FLA_Syrk_task | ( | FLA_Uplo | uplo, | |
FLA_Trans | trans, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | beta, | |||
FLA_Obj | C, | |||
fla_syrk_t * | cntl | |||
) |
References FLA_Syrk_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Syrk_external( uplo, trans, alpha, A, beta, C ); 00038 }
References FLA_Syrk_external().
Referenced by FLA_Syrk_un().
00051 { 00052 return FLA_Syrk_external( FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, alpha, A, beta, C ); 00053 }
References FLA_Syrk_external().
Referenced by FLA_Syrk_ut().
00056 { 00057 return FLA_Syrk_external( FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, alpha, A, beta, C ); 00058 }
FLA_Error FLA_Trmm | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Trmm_check(), FLA_Trmm_external(), and FLA_Trmm_internal().
Referenced by fla_trmm_f().
00042 { 00043 FLA_Error r_val = FLA_SUCCESS; 00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00045 FLA_Datatype datatype; 00046 int m_A, nrhs_B; 00047 int FLA_TRMM_VAR2_BLOCKSIZE; 00048 int FLA_TRMM_VAR3_BLOCKSIZE; 00049 #endif 00050 00051 // Check parameters. 00052 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00053 FLA_Trmm_check( side, uplo, trans, diag, alpha, A, B ); 00054 00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00056 // Determine the datatype of the operation. 00057 datatype = FLA_Obj_datatype( A ); 00058 00059 // Extract the appropriate blocksize for the given datatype. 00060 FLA_TRMM_VAR2_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_trmm_var2_bsize ); 00061 FLA_TRMM_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_trmm_var3_bsize ); 00062 00063 // Determine the dimensions of A. 00064 m_A = FLA_Obj_length( A ); 00065 00066 // Determine the number of right-hand sides of B. 00067 if ( side == FLA_LEFT ) 00068 nrhs_B = FLA_Obj_width( B ); 00069 else 00070 nrhs_B = FLA_Obj_length( B ); 00071 00072 // Invoke FLA_Trmm_internal() with the appropriate control tree. 00073 if ( FLA_TRMM_VAR2_BLOCKSIZE < m_A && FLA_TRMM_VAR3_BLOCKSIZE < nrhs_B ) 00074 { 00075 r_val = FLA_Trmm_internal( side, uplo, trans, diag, alpha, A, B, fla_trmm_cntl_mm ); 00076 } 00077 else if ( FLA_TRMM_VAR2_BLOCKSIZE < m_A && nrhs_B <= FLA_TRMM_VAR3_BLOCKSIZE ) 00078 { 00079 r_val = FLA_Trmm_internal( side, uplo, trans, diag, alpha, A, B, fla_trmm_cntl_mp ); 00080 } 00081 else if ( m_A <= FLA_TRMM_VAR2_BLOCKSIZE && FLA_TRMM_VAR3_BLOCKSIZE < nrhs_B ) 00082 { 00083 r_val = FLA_Trmm_internal( side, uplo, trans, diag, alpha, A, B, fla_trmm_cntl_bp ); 00084 } 00085 else if ( m_A <= FLA_TRMM_VAR2_BLOCKSIZE && nrhs_B <= FLA_TRMM_VAR3_BLOCKSIZE ) 00086 { 00087 r_val = FLA_Trmm_external( side, uplo, trans, diag, alpha, A, B ); 00088 } 00089 #else 00090 r_val = FLA_Trmm_external( side, uplo, trans, diag, alpha, A, B ); 00091 #endif 00092 00093 return r_val; 00094 }
FLA_Error FLA_Trmm_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | transa, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B | |||
) |
References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_diag(), FLA_Check_valid_side(), FLA_Check_valid_trans(), and FLA_Check_valid_uplo().
Referenced by FLA_Trmm(), FLA_Trmm_external(), and FLASH_Trmm().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_side( side ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_uplo( uplo ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_valid_trans( trans ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_valid_diag( diag ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_floating_object( A ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_nonconstant_object( A ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_identical_object_datatype( A, B ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_if_scalar( alpha ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_square( A ); 00067 FLA_Check_error_code( e_val ); 00068 00069 if ( side == FLA_LEFT ) 00070 { 00071 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B ); 00072 FLA_Check_error_code( e_val ); 00073 } 00074 else 00075 { 00076 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B ); 00077 FLA_Check_error_code( e_val ); 00078 } 00079 00080 return FLA_SUCCESS; 00081 }
FLA_Error FLA_Trmm_external | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B | |||
) |
References cblas_ctrmm(), cblas_dtrmm(), cblas_strmm(), cblas_ztrmm(), CblasColMajor, ctrmm(), dtrmm(), FLA_Check_error_level(), FLA_Copyt_external(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_diag(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Trmm_check(), strmm(), and ztrmm().
Referenced by FLA_LQ_UT_Accum_T_blk_var1(), FLA_LQ_UT_blk_var2(), FLA_QR_UT_Accum_T_blk_var1(), FLA_QR_UT_blk_var2(), FLA_Trmm(), fla_trmm_external_f(), FLA_Trmm_llh_task(), FLA_Trmm_lln_task(), FLA_Trmm_llt_task(), FLA_Trmm_luh_task(), FLA_Trmm_lun_task(), FLA_Trmm_lut_task(), FLA_Trmm_rlh_task(), FLA_Trmm_rln_task(), FLA_Trmm_rlt_task(), FLA_Trmm_ruh_task(), FLA_Trmm_run_task(), FLA_Trmm_rut_task(), FLA_Trmm_task(), and FLA_Trmmsx_external().
00036 { 00037 FLA_Datatype datatype; 00038 int ldim_A; 00039 int m_B, n_B, ldim_B; 00040 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00041 CBLAS_ORDER cblas_order = CblasColMajor; 00042 CBLAS_SIDE blas_side; 00043 CBLAS_UPLO blas_uplo; 00044 CBLAS_TRANSPOSE blas_trans; 00045 CBLAS_DIAG blas_diag; 00046 #else 00047 char blas_side; 00048 char blas_uplo; 00049 char blas_trans; 00050 char blas_diag; 00051 #endif 00052 FLA_Obj A_copy; 00053 00054 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00055 FLA_Trmm_check( side, uplo, trans, diag, alpha, A, B ); 00056 00057 if ( FLA_Obj_has_zero_dim( B ) ) return FLA_SUCCESS; 00058 00059 datatype = FLA_Obj_datatype( A ); 00060 00061 ldim_A = FLA_Obj_ldim( A ); 00062 00063 m_B = FLA_Obj_length( B ); 00064 n_B = FLA_Obj_width( B ); 00065 ldim_B = FLA_Obj_ldim( B ); 00066 00067 if ( trans == FLA_CONJ_NO_TRANSPOSE ) 00068 { 00069 FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &A_copy ); 00070 FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, A, A_copy ); 00071 00072 ldim_A = FLA_Obj_ldim( A_copy ); 00073 } 00074 else 00075 { 00076 A_copy = A; 00077 } 00078 00079 FLA_Param_map_to_blas_side( side, &blas_side ); 00080 FLA_Param_map_to_blas_uplo( uplo, &blas_uplo ); 00081 FLA_Param_map_to_blas_trans( trans, &blas_trans ); 00082 FLA_Param_map_to_blas_diag( diag, &blas_diag ); 00083 00084 00085 switch( datatype ){ 00086 00087 case FLA_FLOAT: 00088 { 00089 float *buff_A = ( float * ) FLA_FLOAT_PTR( A ); 00090 float *buff_B = ( float * ) FLA_FLOAT_PTR( B ); 00091 float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha ); 00092 00093 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00094 cblas_strmm( cblas_order, 00095 blas_side, 00096 blas_uplo, 00097 blas_trans, 00098 blas_diag, 00099 m_B, 00100 n_B, 00101 *buff_alpha, 00102 buff_A, ldim_A, 00103 buff_B, ldim_B ); 00104 #else 00105 FLA_C2F( strmm )( &blas_side, 00106 &blas_uplo, 00107 &blas_trans, 00108 &blas_diag, 00109 &m_B, 00110 &n_B, 00111 buff_alpha, 00112 buff_A, &ldim_A, 00113 buff_B, &ldim_B ); 00114 #endif 00115 break; 00116 } 00117 00118 case FLA_DOUBLE: 00119 { 00120 double *buff_A = ( double * ) FLA_DOUBLE_PTR( A ); 00121 double *buff_B = ( double * ) FLA_DOUBLE_PTR( B ); 00122 double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha ); 00123 00124 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00125 cblas_dtrmm( cblas_order, 00126 blas_side, 00127 blas_uplo, 00128 blas_trans, 00129 blas_diag, 00130 m_B, 00131 n_B, 00132 *buff_alpha, 00133 buff_A, ldim_A, 00134 buff_B, ldim_B ); 00135 #else 00136 FLA_C2F( dtrmm )( &blas_side, 00137 &blas_uplo, 00138 &blas_trans, 00139 &blas_diag, 00140 &m_B, 00141 &n_B, 00142 buff_alpha, 00143 buff_A, &ldim_A, 00144 buff_B, &ldim_B ); 00145 #endif 00146 break; 00147 } 00148 00149 case FLA_COMPLEX: 00150 { 00151 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A_copy ); 00152 scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B ); 00153 scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha ); 00154 00155 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00156 cblas_ctrmm( cblas_order, 00157 blas_side, 00158 blas_uplo, 00159 blas_trans, 00160 blas_diag, 00161 m_B, 00162 n_B, 00163 buff_alpha, 00164 buff_A, ldim_A, 00165 buff_B, ldim_B ); 00166 #else 00167 FLA_C2F( ctrmm )( &blas_side, 00168 &blas_uplo, 00169 &blas_trans, 00170 &blas_diag, 00171 &m_B, 00172 &n_B, 00173 buff_alpha, 00174 buff_A, &ldim_A, 00175 buff_B, &ldim_B ); 00176 #endif 00177 break; 00178 } 00179 00180 00181 case FLA_DOUBLE_COMPLEX: 00182 { 00183 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A_copy ); 00184 dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B ); 00185 dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha ); 00186 00187 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00188 cblas_ztrmm( cblas_order, 00189 blas_side, 00190 blas_uplo, 00191 blas_trans, 00192 blas_diag, 00193 m_B, 00194 n_B, 00195 buff_alpha, 00196 buff_A, ldim_A, 00197 buff_B, ldim_B ); 00198 #else 00199 FLA_C2F( ztrmm )( &blas_side, 00200 &blas_uplo, 00201 &blas_trans, 00202 &blas_diag, 00203 &m_B, 00204 &n_B, 00205 buff_alpha, 00206 buff_A, &ldim_A, 00207 buff_B, &ldim_B ); 00208 #endif 00209 break; 00210 } 00211 00212 } 00213 00214 if ( trans == FLA_CONJ_NO_TRANSPOSE ) 00215 FLA_Obj_free( &A_copy ); 00216 00217 return FLA_SUCCESS; 00218 }
void FLA_F2C() fla_trmm_external_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | trans, | |||
F_INT * | diag, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | IERROR | |||
) |
References FLA_Trmm_external().
00222 { 00223 *IERROR = FLA_Trmm_external( *( ( FLA_Side * ) side ), 00224 *( ( FLA_Uplo * ) uplo ), 00225 *( ( FLA_Trans * ) trans ), 00226 *( ( FLA_Diag * ) diag ), 00227 *( ( FLA_Obj * ) alpha ), 00228 *( ( FLA_Obj * ) A ), 00229 *( ( FLA_Obj * ) B ) ); 00230 }
void FLA_F2C() fla_trmm_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | trans, | |||
F_INT * | diag, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Trmm_internal | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
Referenced by FLA_Apply_Q_UT_lhc_blk_var1(), FLA_Trinv_l_blk_var1(), FLA_Trinv_l_blk_var4(), FLA_Trinv_u_blk_var1(), FLA_Trinv_u_blk_var4(), FLA_Trmm(), FLA_Trmm_internal(), FLA_Trmm_llh_blk_var1(), FLA_Trmm_llh_blk_var2(), FLA_Trmm_llh_blk_var3(), FLA_Trmm_llh_blk_var4(), FLA_Trmm_lln_blk_var1(), FLA_Trmm_lln_blk_var2(), FLA_Trmm_lln_blk_var3(), FLA_Trmm_lln_blk_var4(), FLA_Trmm_llt_blk_var1(), FLA_Trmm_llt_blk_var2(), FLA_Trmm_llt_blk_var3(), FLA_Trmm_llt_blk_var4(), FLA_Trmm_luh_blk_var1(), FLA_Trmm_luh_blk_var2(), FLA_Trmm_luh_blk_var3(), FLA_Trmm_luh_blk_var4(), FLA_Trmm_lun_blk_var1(), FLA_Trmm_lun_blk_var2(), FLA_Trmm_lun_blk_var3(), FLA_Trmm_lun_blk_var4(), FLA_Trmm_lut_blk_var1(), FLA_Trmm_lut_blk_var2(), FLA_Trmm_lut_blk_var3(), FLA_Trmm_lut_blk_var4(), FLA_Trmm_rlh_blk_var1(), FLA_Trmm_rlh_blk_var2(), FLA_Trmm_rlh_blk_var3(), FLA_Trmm_rlh_blk_var4(), FLA_Trmm_rln_blk_var1(), FLA_Trmm_rln_blk_var2(), FLA_Trmm_rln_blk_var3(), FLA_Trmm_rln_blk_var4(), FLA_Trmm_rlt_blk_var1(), FLA_Trmm_rlt_blk_var2(), FLA_Trmm_rlt_blk_var3(), FLA_Trmm_rlt_blk_var4(), FLA_Trmm_ruh_blk_var1(), FLA_Trmm_ruh_blk_var2(), FLA_Trmm_ruh_blk_var3(), FLA_Trmm_ruh_blk_var4(), FLA_Trmm_run_blk_var1(), FLA_Trmm_run_blk_var2(), FLA_Trmm_run_blk_var3(), FLA_Trmm_run_blk_var4(), FLA_Trmm_rut_blk_var1(), FLA_Trmm_rut_blk_var2(), FLA_Trmm_rut_blk_var3(), FLA_Trmm_rut_blk_var4(), FLA_Ttmm_l_blk_var1(), FLA_Ttmm_l_blk_var2(), FLA_Ttmm_l_blk_var3(), FLA_Ttmm_u_blk_var1(), FLA_Ttmm_u_blk_var2(), FLA_Ttmm_u_blk_var3(), and FLASH_Trmm().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Trmm_internal_check( side, uplo, transa, diag, alpha, A, B, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Trmm_internal( side, 00051 uplo, 00052 transa, 00053 diag, 00054 alpha, 00055 *FLASH_OBJ_PTR_AT( A ), 00056 *FLASH_OBJ_PTR_AT( B ), 00057 flash_trmm_cntl_mm ); 00058 } 00059 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00060 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00061 FLASH_Queue_get_enabled( ) ) 00062 { 00063 // Enqueue 00064 ENQUEUE_FLASH_Trmm( side, uplo, transa, diag, alpha, A, B, cntl ); 00065 } 00066 else 00067 { 00068 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00069 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00070 !FLASH_Queue_get_enabled( ) ) 00071 { 00072 // Execute leaf 00073 cntl = flash_trmm_cntl_blas; 00074 } 00075 00076 // Parameter combinations 00077 if ( side == FLA_LEFT ) 00078 { 00079 if ( uplo == FLA_LOWER_TRIANGULAR ) 00080 { 00081 if ( transa == FLA_NO_TRANSPOSE ) 00082 r_val = FLA_Trmm_lln( diag, alpha, A, B, cntl ); 00083 else if ( transa == FLA_TRANSPOSE ) 00084 r_val = FLA_Trmm_llt( diag, alpha, A, B, cntl ); 00085 else if ( transa == FLA_CONJ_TRANSPOSE ) 00086 r_val = FLA_Trmm_llh( diag, alpha, A, B, cntl ); 00087 } 00088 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00089 { 00090 if ( transa == FLA_NO_TRANSPOSE ) 00091 r_val = FLA_Trmm_lun( diag, alpha, A, B, cntl ); 00092 else if ( transa == FLA_TRANSPOSE ) 00093 r_val = FLA_Trmm_lut( diag, alpha, A, B, cntl ); 00094 else if ( transa == FLA_CONJ_TRANSPOSE ) 00095 r_val = FLA_Trmm_luh( diag, alpha, A, B, cntl ); 00096 } 00097 } 00098 else if ( side == FLA_RIGHT ) 00099 { 00100 if ( uplo == FLA_LOWER_TRIANGULAR ) 00101 { 00102 if ( transa == FLA_NO_TRANSPOSE ) 00103 r_val = FLA_Trmm_rln( diag, alpha, A, B, cntl ); 00104 else if ( transa == FLA_TRANSPOSE ) 00105 r_val = FLA_Trmm_rlt( diag, alpha, A, B, cntl ); 00106 else if ( transa == FLA_CONJ_TRANSPOSE ) 00107 r_val = FLA_Trmm_rlh( diag, alpha, A, B, cntl ); 00108 } 00109 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00110 { 00111 if ( transa == FLA_NO_TRANSPOSE ) 00112 r_val = FLA_Trmm_run( diag, alpha, A, B, cntl ); 00113 else if ( transa == FLA_TRANSPOSE ) 00114 r_val = FLA_Trmm_rut( diag, alpha, A, B, cntl ); 00115 else if ( transa == FLA_CONJ_TRANSPOSE ) 00116 r_val = FLA_Trmm_ruh( diag, alpha, A, B, cntl ); 00117 } 00118 } 00119 } 00120 00121 return r_val; 00122 }
FLA_Error FLA_Trmm_internal_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Trmm_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, B ); 00045 FLA_Check_error_code( e_val ); 00046 00047 // Verify conformality between all the objects. This check works regardless 00048 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00049 // element length and width are used instead of scalar length and width. 00050 if ( side == FLA_LEFT ) 00051 { 00052 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B ); 00053 FLA_Check_error_code( e_val ); 00054 } 00055 else 00056 { 00057 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B ); 00058 FLA_Check_error_code( e_val ); 00059 } 00060 00061 return FLA_SUCCESS; 00062 }
FLA_Error FLA_Trmm_llh_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_llh().
00041 { 00042 return FLA_Trmm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B ); 00043 }
FLA_Error FLA_Trmm_lln_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_lln().
00046 { 00047 return FLA_Trmm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B ); 00048 }
FLA_Error FLA_Trmm_llt_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_llt().
00051 { 00052 return FLA_Trmm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B ); 00053 }
FLA_Error FLA_Trmm_luh_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_luh().
00056 { 00057 return FLA_Trmm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B ); 00058 }
FLA_Error FLA_Trmm_lun_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_lun().
00061 { 00062 return FLA_Trmm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B ); 00063 }
FLA_Error FLA_Trmm_lut_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_lut().
00066 { 00067 return FLA_Trmm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B ); 00068 }
FLA_Error FLA_Trmm_rlh_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_rlh().
00071 { 00072 return FLA_Trmm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B ); 00073 }
FLA_Error FLA_Trmm_rln_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_rln().
00076 { 00077 return FLA_Trmm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B ); 00078 }
FLA_Error FLA_Trmm_rlt_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_rlt().
00081 { 00082 return FLA_Trmm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B ); 00083 }
FLA_Error FLA_Trmm_ruh_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_ruh().
00086 { 00087 return FLA_Trmm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B ); 00088 }
FLA_Error FLA_Trmm_run_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_run().
00091 { 00092 return FLA_Trmm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B ); 00093 }
FLA_Error FLA_Trmm_rut_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLA_Trmm_rut().
00096 { 00097 return FLA_Trmm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B ); 00098 }
FLA_Error FLA_Trmm_task | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trmm_t * | cntl | |||
) |
References FLA_Trmm_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Trmm_external( side, uplo, trans, diag, alpha, A, B ); 00038 }
FLA_Error FLA_Trmmsx | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | transa, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
FLA_Error FLA_Trmmsx_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | transa, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_diag(), FLA_Check_valid_side(), FLA_Check_valid_trans(), and FLA_Check_valid_uplo().
Referenced by FLA_Trmmsx_external().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_side( side ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_uplo( uplo ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_valid_trans( trans ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_valid_diag( diag ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_floating_object( A ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_nonconstant_object( A ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_identical_object_datatype( A, B ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_identical_object_datatype( A, C ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_consistent_object_datatype( A, beta ); 00067 FLA_Check_error_code( e_val ); 00068 00069 e_val = FLA_Check_if_scalar( alpha ); 00070 FLA_Check_error_code( e_val ); 00071 00072 e_val = FLA_Check_if_scalar( beta ); 00073 FLA_Check_error_code( e_val ); 00074 00075 e_val = FLA_Check_square( A ); 00076 FLA_Check_error_code( e_val ); 00077 00078 if ( side == FLA_LEFT ) 00079 { 00080 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00081 FLA_Check_error_code( e_val ); 00082 } 00083 else 00084 { 00085 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C ); 00086 FLA_Check_error_code( e_val ); 00087 } 00088 00089 return FLA_SUCCESS; 00090 }
FLA_Error FLA_Trmmsx_external | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | transa, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Axpy_external(), FLA_Check_error_level(), FLA_Copy_external(), FLA_Obj_create_conf_to(), FLA_Obj_free(), FLA_ONE, FLA_Scal_external(), FLA_Trmm_external(), and FLA_Trmmsx_check().
Referenced by fla_trmmsx_external_f().
00036 { 00037 FLA_Obj B_copy; 00038 00039 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00040 FLA_Trmmsx_check( side, uplo, transa, diag, alpha, A, B, beta, C ); 00041 00042 FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, B, &B_copy ); 00043 00044 FLA_Copy_external( B, B_copy ); 00045 00046 FLA_Trmm_external( side, uplo, transa, diag, FLA_ONE, A, B_copy ); 00047 00048 FLA_Scal_external( beta, C ); 00049 00050 FLA_Axpy_external( alpha, B_copy, C ); 00051 00052 FLA_Obj_free( &B_copy ); 00053 00054 return FLA_SUCCESS; 00055 }
void FLA_F2C() fla_trmmsx_external_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | transa, | |||
F_INT * | diag, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Trmmsx_external().
00059 { 00060 *IERROR = FLA_Trmmsx_external( *( ( FLA_Side * ) side ), 00061 *( ( FLA_Uplo * ) uplo ), 00062 *( ( FLA_Trans * ) transa ), 00063 *( ( FLA_Diag * ) diag ), 00064 *( ( FLA_Obj * ) alpha ), 00065 *( ( FLA_Obj * ) A ), 00066 *( ( FLA_Obj * ) B ), 00067 *( ( FLA_Obj * ) beta ), 00068 *( ( FLA_Obj * ) C ) ); 00069 }
void FLA_F2C() fla_trmmsx_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | trans, | |||
F_INT * | diag, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Trsm | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B | |||
) |
References FLA_Blocksize_extract(), FLA_Check_error_level(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_width(), FLA_Trsm_check(), FLA_Trsm_external(), and FLA_Trsm_internal().
Referenced by fla_trsm_f().
00042 { 00043 FLA_Error r_val = FLA_SUCCESS; 00044 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00045 FLA_Datatype datatype; 00046 int m_A, nrhs_B; 00047 int FLA_TRSM_VAR2_BLOCKSIZE; 00048 int FLA_TRSM_VAR3_BLOCKSIZE; 00049 #endif 00050 00051 // Check parameters. 00052 if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING ) 00053 FLA_Trsm_check( side, uplo, trans, diag, alpha, A, B ); 00054 00055 #ifdef FLA_ENABLE_BLAS3_FRONT_END_CNTL_TREES 00056 // Determine the datatype of the operation. 00057 datatype = FLA_Obj_datatype( A ); 00058 00059 // Extract the appropriate blocksize for the given datatype. 00060 FLA_TRSM_VAR2_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_trsm_var2_bsize ); 00061 FLA_TRSM_VAR3_BLOCKSIZE = FLA_Blocksize_extract( datatype, fla_trsm_var3_bsize ); 00062 00063 // Determine the dimensions of A. 00064 m_A = FLA_Obj_length( A ); 00065 00066 // Determine the number of right-hand sides of B. 00067 if ( side == FLA_LEFT ) 00068 nrhs_B = FLA_Obj_width( B ); 00069 else 00070 nrhs_B = FLA_Obj_length( B ); 00071 00072 // Invoke FLA_Trsm_internal() with the appropriate control tree. 00073 if ( FLA_TRSM_VAR2_BLOCKSIZE < m_A && FLA_TRSM_VAR3_BLOCKSIZE < nrhs_B ) 00074 { 00075 r_val = FLA_Trsm_internal( side, uplo, trans, diag, alpha, A, B, fla_trsm_cntl_mm ); 00076 } 00077 else if ( FLA_TRSM_VAR2_BLOCKSIZE < m_A && nrhs_B <= FLA_TRSM_VAR3_BLOCKSIZE ) 00078 { 00079 r_val = FLA_Trsm_internal( side, uplo, trans, diag, alpha, A, B, fla_trsm_cntl_mp ); 00080 } 00081 else if ( m_A <= FLA_TRSM_VAR2_BLOCKSIZE && FLA_TRSM_VAR3_BLOCKSIZE < nrhs_B ) 00082 { 00083 r_val = FLA_Trsm_internal( side, uplo, trans, diag, alpha, A, B, fla_trsm_cntl_bp ); 00084 } 00085 else if ( m_A <= FLA_TRSM_VAR2_BLOCKSIZE && nrhs_B <= FLA_TRSM_VAR3_BLOCKSIZE ) 00086 { 00087 r_val = FLA_Trsm_external( side, uplo, trans, diag, alpha, A, B ); 00088 } 00089 #else 00090 r_val = FLA_Trsm_external( side, uplo, trans, diag, alpha, A, B ); 00091 #endif 00092 00093 return r_val; 00094 }
FLA_Error FLA_Trsm_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | transa, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B | |||
) |
References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_diag(), FLA_Check_valid_side(), FLA_Check_valid_trans(), and FLA_Check_valid_uplo().
Referenced by FLA_Trsm(), FLA_Trsm_external(), and FLASH_Trsm().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_side( side ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_uplo( uplo ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_valid_trans( trans ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_valid_diag( diag ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_floating_object( A ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_nonconstant_object( A ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_identical_object_datatype( A, B ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_if_scalar( alpha ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_square( A ); 00067 FLA_Check_error_code( e_val ); 00068 00069 if ( side == FLA_LEFT ) 00070 { 00071 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B ); 00072 FLA_Check_error_code( e_val ); 00073 } 00074 else 00075 { 00076 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B ); 00077 FLA_Check_error_code( e_val ); 00078 } 00079 00080 return FLA_SUCCESS; 00081 }
FLA_Error FLA_Trsm_external | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B | |||
) |
References cblas_ctrsm(), cblas_dtrsm(), cblas_strsm(), cblas_ztrsm(), CblasColMajor, ctrsm(), dtrsm(), FLA_Check_error_level(), FLA_Copyt_external(), FLA_Obj_create_conf_to(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_has_zero_dim(), FLA_Obj_ldim(), FLA_Obj_length(), FLA_Obj_width(), FLA_Param_map_to_blas_diag(), FLA_Param_map_to_blas_side(), FLA_Param_map_to_blas_trans(), FLA_Param_map_to_blas_uplo(), FLA_Trsm_check(), strsm(), and ztrsm().
Referenced by FLA_LQ_UT_Accum_T_blk_var1(), FLA_LQ_UT_blk_var2(), FLA_LU_nopiv_blk_var1(), FLA_LU_nopiv_blk_var2(), FLA_LU_nopiv_blk_var3(), FLA_LU_nopiv_unb_var1(), FLA_LU_nopiv_unb_var2(), FLA_LU_nopiv_unb_var3(), FLA_LU_piv_blk_var3(), FLA_LU_piv_unb_var3(), FLA_LU_piv_unb_var3b(), FLA_QR_UT_Accum_T_blk_var1(), FLA_QR_UT_blk_var2(), FLA_SA_FS_blk(), FLA_SA_LU_blk(), FLA_Trsm(), fla_trsm_external_f(), FLA_Trsm_llh_task(), FLA_Trsm_lln_task(), FLA_Trsm_llt_task(), FLA_Trsm_luh_task(), FLA_Trsm_lun_task(), FLA_Trsm_lut_task(), FLA_Trsm_piv_task(), FLA_Trsm_rlh_task(), FLA_Trsm_rln_task(), FLA_Trsm_rlt_task(), FLA_Trsm_ruh_task(), FLA_Trsm_run_task(), FLA_Trsm_rut_task(), FLA_Trsm_task(), and FLA_Trsmsx_external().
00036 { 00037 FLA_Datatype datatype; 00038 int ldim_A; 00039 int m_B, n_B, ldim_B; 00040 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00041 CBLAS_ORDER cblas_order = CblasColMajor; 00042 CBLAS_SIDE blas_side; 00043 CBLAS_UPLO blas_uplo; 00044 CBLAS_TRANSPOSE blas_trans; 00045 CBLAS_DIAG blas_diag; 00046 #else 00047 char blas_side; 00048 char blas_uplo; 00049 char blas_trans; 00050 char blas_diag; 00051 #endif 00052 FLA_Obj A_copy; 00053 00054 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00055 FLA_Trsm_check( side, uplo, trans, diag, alpha, A, B ); 00056 00057 if ( FLA_Obj_has_zero_dim( B ) ) return FLA_SUCCESS; 00058 00059 datatype = FLA_Obj_datatype( A ); 00060 00061 ldim_A = FLA_Obj_ldim( A ); 00062 00063 m_B = FLA_Obj_length( B ); 00064 n_B = FLA_Obj_width( B ); 00065 ldim_B = FLA_Obj_ldim( B ); 00066 00067 if ( trans == FLA_CONJ_NO_TRANSPOSE ) 00068 { 00069 FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &A_copy ); 00070 FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, A, A_copy ); 00071 00072 ldim_A = FLA_Obj_ldim( A_copy ); 00073 } 00074 else 00075 { 00076 A_copy = A; 00077 } 00078 00079 FLA_Param_map_to_blas_side( side, &blas_side ); 00080 FLA_Param_map_to_blas_uplo( uplo, &blas_uplo ); 00081 FLA_Param_map_to_blas_trans( trans, &blas_trans ); 00082 FLA_Param_map_to_blas_diag( diag, &blas_diag ); 00083 00084 00085 switch( datatype ){ 00086 00087 case FLA_FLOAT: 00088 { 00089 float *buff_A = ( float * ) FLA_FLOAT_PTR( A ); 00090 float *buff_B = ( float * ) FLA_FLOAT_PTR( B ); 00091 float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha ); 00092 00093 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00094 cblas_strsm( cblas_order, 00095 blas_side, 00096 blas_uplo, 00097 blas_trans, 00098 blas_diag, 00099 m_B, 00100 n_B, 00101 *buff_alpha, 00102 buff_A, ldim_A, 00103 buff_B, ldim_B ); 00104 #else 00105 FLA_C2F( strsm )( &blas_side, 00106 &blas_uplo, 00107 &blas_trans, 00108 &blas_diag, 00109 &m_B, 00110 &n_B, 00111 buff_alpha, 00112 buff_A, &ldim_A, 00113 buff_B, &ldim_B ); 00114 #endif 00115 break; 00116 } 00117 00118 case FLA_DOUBLE: 00119 { 00120 double *buff_A = ( double * ) FLA_DOUBLE_PTR( A ); 00121 double *buff_B = ( double * ) FLA_DOUBLE_PTR( B ); 00122 double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha ); 00123 00124 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00125 cblas_dtrsm( cblas_order, 00126 blas_side, 00127 blas_uplo, 00128 blas_trans, 00129 blas_diag, 00130 m_B, 00131 n_B, 00132 *buff_alpha, 00133 buff_A, ldim_A, 00134 buff_B, ldim_B ); 00135 #else 00136 FLA_C2F( dtrsm )( &blas_side, 00137 &blas_uplo, 00138 &blas_trans, 00139 &blas_diag, 00140 &m_B, 00141 &n_B, 00142 buff_alpha, 00143 buff_A, &ldim_A, 00144 buff_B, &ldim_B ); 00145 #endif 00146 break; 00147 } 00148 00149 case FLA_COMPLEX: 00150 { 00151 scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A_copy ); 00152 scomplex *buff_B = ( scomplex * ) FLA_COMPLEX_PTR( B ); 00153 scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha ); 00154 00155 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00156 cblas_ctrsm( cblas_order, 00157 blas_side, 00158 blas_uplo, 00159 blas_trans, 00160 blas_diag, 00161 m_B, 00162 n_B, 00163 buff_alpha, 00164 buff_A, ldim_A, 00165 buff_B, ldim_B ); 00166 #else 00167 FLA_C2F( ctrsm )( &blas_side, 00168 &blas_uplo, 00169 &blas_trans, 00170 &blas_diag, 00171 &m_B, 00172 &n_B, 00173 buff_alpha, 00174 buff_A, &ldim_A, 00175 buff_B, &ldim_B ); 00176 #endif 00177 break; 00178 } 00179 00180 case FLA_DOUBLE_COMPLEX: 00181 { 00182 dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A_copy ); 00183 dcomplex *buff_B = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( B ); 00184 dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha ); 00185 00186 #ifdef FLA_ENABLE_CBLAS_INTERFACE 00187 cblas_ztrsm( cblas_order, 00188 blas_side, 00189 blas_uplo, 00190 blas_trans, 00191 blas_diag, 00192 m_B, 00193 n_B, 00194 buff_alpha, 00195 buff_A, ldim_A, 00196 buff_B, ldim_B ); 00197 #else 00198 FLA_C2F( ztrsm )( &blas_side, 00199 &blas_uplo, 00200 &blas_trans, 00201 &blas_diag, 00202 &m_B, 00203 &n_B, 00204 buff_alpha, 00205 buff_A, &ldim_A, 00206 buff_B, &ldim_B ); 00207 #endif 00208 break; 00209 } 00210 00211 } 00212 00213 if ( trans == FLA_CONJ_NO_TRANSPOSE ) 00214 FLA_Obj_free( &A_copy ); 00215 00216 return FLA_SUCCESS; 00217 }
void FLA_F2C() fla_trsm_external_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | trans, | |||
F_INT * | diag, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | IERROR | |||
) |
References FLA_Trsm_external().
00221 { 00222 *IERROR = FLA_Trsm_external( *( ( FLA_Side * ) side ), 00223 *( ( FLA_Uplo * ) uplo ), 00224 *( ( FLA_Trans * ) trans ), 00225 *( ( FLA_Diag * ) diag ), 00226 *( ( FLA_Obj * ) alpha ), 00227 *( ( FLA_Obj * ) A ), 00228 *( ( FLA_Obj * ) B ) ); 00229 }
void FLA_F2C() fla_trsm_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | trans, | |||
F_INT * | diag, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | IERROR | |||
) |
FLA_Error FLA_Trsm_internal | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
Referenced by FLA_Apply_Q_UT_lhc_blk_var1(), FLA_Apply_Q_UT_UD_lhc_blk_var1(), FLA_Chol_l_blk_var1(), FLA_Chol_l_blk_var2(), FLA_Chol_l_blk_var3(), FLA_Chol_u_blk_var1(), FLA_Chol_u_blk_var2(), FLA_Chol_u_blk_var3(), FLA_LU_nopiv_blk_var1(), FLA_LU_nopiv_blk_var2(), FLA_LU_nopiv_blk_var3(), FLA_LU_nopiv_blk_var4(), FLA_LU_nopiv_blk_var5(), FLA_LU_piv_blk_var3(), FLA_LU_piv_blk_var4(), FLA_LU_piv_blk_var5(), FLA_QR_UT_UD_blk_var1(), FLA_Trinv_l_blk_var1(), FLA_Trinv_l_blk_var2(), FLA_Trinv_l_blk_var3(), FLA_Trinv_l_blk_var4(), FLA_Trinv_u_blk_var1(), FLA_Trinv_u_blk_var2(), FLA_Trinv_u_blk_var3(), FLA_Trinv_u_blk_var4(), FLA_Trsm(), FLA_Trsm_internal(), FLA_Trsm_llh_blk_var1(), FLA_Trsm_llh_blk_var2(), FLA_Trsm_llh_blk_var3(), FLA_Trsm_llh_blk_var4(), FLA_Trsm_lln_blk_var1(), FLA_Trsm_lln_blk_var2(), FLA_Trsm_lln_blk_var3(), FLA_Trsm_lln_blk_var4(), FLA_Trsm_llt_blk_var1(), FLA_Trsm_llt_blk_var2(), FLA_Trsm_llt_blk_var3(), FLA_Trsm_llt_blk_var4(), FLA_Trsm_luh_blk_var1(), FLA_Trsm_luh_blk_var2(), FLA_Trsm_luh_blk_var3(), FLA_Trsm_luh_blk_var4(), FLA_Trsm_lun_blk_var1(), FLA_Trsm_lun_blk_var2(), FLA_Trsm_lun_blk_var3(), FLA_Trsm_lun_blk_var4(), FLA_Trsm_lut_blk_var1(), FLA_Trsm_lut_blk_var2(), FLA_Trsm_lut_blk_var3(), FLA_Trsm_lut_blk_var4(), FLA_Trsm_rlh_blk_var1(), FLA_Trsm_rlh_blk_var2(), FLA_Trsm_rlh_blk_var3(), FLA_Trsm_rlh_blk_var4(), FLA_Trsm_rln_blk_var1(), FLA_Trsm_rln_blk_var2(), FLA_Trsm_rln_blk_var3(), FLA_Trsm_rln_blk_var4(), FLA_Trsm_rlt_blk_var1(), FLA_Trsm_rlt_blk_var2(), FLA_Trsm_rlt_blk_var3(), FLA_Trsm_rlt_blk_var4(), FLA_Trsm_ruh_blk_var1(), FLA_Trsm_ruh_blk_var2(), FLA_Trsm_ruh_blk_var3(), FLA_Trsm_ruh_blk_var4(), FLA_Trsm_run_blk_var1(), FLA_Trsm_run_blk_var2(), FLA_Trsm_run_blk_var3(), FLA_Trsm_run_blk_var4(), FLA_Trsm_rut_blk_var1(), FLA_Trsm_rut_blk_var2(), FLA_Trsm_rut_blk_var3(), FLA_Trsm_rut_blk_var4(), and FLASH_Trsm().
00039 { 00040 FLA_Error r_val = FLA_SUCCESS; 00041 00042 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00043 FLA_Trsm_internal_check( side, uplo, transa, diag, alpha, A, B, cntl ); 00044 00045 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00046 FLA_Obj_elemtype( A ) == FLA_MATRIX && 00047 FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM ) 00048 { 00049 // Recurse 00050 r_val = FLA_Trsm_internal( side, 00051 uplo, 00052 transa, 00053 diag, 00054 alpha, 00055 *FLASH_OBJ_PTR_AT( A ), 00056 *FLASH_OBJ_PTR_AT( B ), 00057 flash_trsm_cntl_mm ); 00058 } 00059 else if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00060 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00061 FLASH_Queue_get_enabled( ) ) 00062 { 00063 // Enqueue 00064 ENQUEUE_FLASH_Trsm( side, uplo, transa, diag, alpha, A, B, cntl ); 00065 } 00066 else 00067 { 00068 if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER && 00069 FLA_Obj_elemtype( A ) == FLA_SCALAR && 00070 !FLASH_Queue_get_enabled( ) ) 00071 { 00072 // Execute leaf 00073 cntl = flash_trsm_cntl_blas; 00074 } 00075 00076 // Parameter combinations 00077 if ( side == FLA_LEFT ) 00078 { 00079 if ( uplo == FLA_LOWER_TRIANGULAR ) 00080 { 00081 if ( transa == FLA_NO_TRANSPOSE ) 00082 r_val = FLA_Trsm_lln( diag, alpha, A, B, cntl ); 00083 else if ( transa == FLA_TRANSPOSE ) 00084 r_val = FLA_Trsm_llt( diag, alpha, A, B, cntl ); 00085 else if ( transa == FLA_CONJ_TRANSPOSE ) 00086 r_val = FLA_Trsm_llh( diag, alpha, A, B, cntl ); 00087 } 00088 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00089 { 00090 if ( transa == FLA_NO_TRANSPOSE ) 00091 r_val = FLA_Trsm_lun( diag, alpha, A, B, cntl ); 00092 else if ( transa == FLA_TRANSPOSE ) 00093 r_val = FLA_Trsm_lut( diag, alpha, A, B, cntl ); 00094 else if ( transa == FLA_CONJ_TRANSPOSE ) 00095 r_val = FLA_Trsm_luh( diag, alpha, A, B, cntl ); 00096 } 00097 } 00098 else if ( side == FLA_RIGHT ) 00099 { 00100 if ( uplo == FLA_LOWER_TRIANGULAR ) 00101 { 00102 if ( transa == FLA_NO_TRANSPOSE ) 00103 r_val = FLA_Trsm_rln( diag, alpha, A, B, cntl ); 00104 else if ( transa == FLA_TRANSPOSE ) 00105 r_val = FLA_Trsm_rlt( diag, alpha, A, B, cntl ); 00106 else if ( transa == FLA_CONJ_TRANSPOSE ) 00107 r_val = FLA_Trsm_rlh( diag, alpha, A, B, cntl ); 00108 } 00109 else if ( uplo == FLA_UPPER_TRIANGULAR ) 00110 { 00111 if ( transa == FLA_NO_TRANSPOSE ) 00112 r_val = FLA_Trsm_run( diag, alpha, A, B, cntl ); 00113 else if ( transa == FLA_TRANSPOSE ) 00114 r_val = FLA_Trsm_rut( diag, alpha, A, B, cntl ); 00115 else if ( transa == FLA_CONJ_TRANSPOSE ) 00116 r_val = FLA_Trsm_ruh( diag, alpha, A, B, cntl ); 00117 } 00118 } 00119 } 00120 00121 return r_val; 00122 }
FLA_Error FLA_Trsm_internal_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Check_identical_object_elemtype(), FLA_Check_matrix_matrix_dims(), and FLA_Check_null_pointer().
Referenced by FLA_Trsm_internal().
00036 { 00037 FLA_Error e_val; 00038 00039 // Abort if the control structure is NULL. 00040 e_val = FLA_Check_null_pointer( ( void* ) cntl ); 00041 FLA_Check_error_code( e_val ); 00042 00043 // Verify that the object element types are identical. 00044 e_val = FLA_Check_identical_object_elemtype( A, B ); 00045 FLA_Check_error_code( e_val ); 00046 00047 // Verify conformality between all the objects. This check works regardless 00048 // of whether the element type is FLA_MATRIX or FLA_SCALAR because the 00049 // element length and width are used instead of scalar length and width. 00050 if ( side == FLA_LEFT ) 00051 { 00052 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, B ); 00053 FLA_Check_error_code( e_val ); 00054 } 00055 else 00056 { 00057 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, B ); 00058 FLA_Check_error_code( e_val ); 00059 } 00060 00061 return FLA_SUCCESS; 00062 }
FLA_Error FLA_Trsm_llh_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_llh().
00041 { 00042 return FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B ); 00043 }
FLA_Error FLA_Trsm_lln_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_lln().
00046 { 00047 return FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B ); 00048 }
FLA_Error FLA_Trsm_llt_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_llt().
00051 { 00052 return FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B ); 00053 }
FLA_Error FLA_Trsm_luh_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_luh().
00056 { 00057 return FLA_Trsm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B ); 00058 }
FLA_Error FLA_Trsm_lun_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_lun().
00061 { 00062 return FLA_Trsm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B ); 00063 }
FLA_Error FLA_Trsm_lut_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_lut().
00066 { 00067 return FLA_Trsm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B ); 00068 }
FLA_Error FLA_Trsm_rlh_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_rlh().
00071 { 00072 return FLA_Trsm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B ); 00073 }
FLA_Error FLA_Trsm_rln_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_rln().
00076 { 00077 return FLA_Trsm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B ); 00078 }
FLA_Error FLA_Trsm_rlt_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_rlt().
00081 { 00082 return FLA_Trsm_external( FLA_RIGHT, FLA_LOWER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B ); 00083 }
FLA_Error FLA_Trsm_ruh_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_ruh().
00086 { 00087 return FLA_Trsm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_CONJ_TRANSPOSE, diag, alpha, A, B ); 00088 }
FLA_Error FLA_Trsm_run_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_run().
00091 { 00092 return FLA_Trsm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE, diag, alpha, A, B ); 00093 }
FLA_Error FLA_Trsm_rut_task | ( | FLA_Diag | diag, | |
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLA_Trsm_rut().
00096 { 00097 return FLA_Trsm_external( FLA_RIGHT, FLA_UPPER_TRIANGULAR, FLA_TRANSPOSE, diag, alpha, A, B ); 00098 }
FLA_Error FLA_Trsm_task | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | trans, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
fla_trsm_t * | cntl | |||
) |
References FLA_Trsm_external().
Referenced by FLASH_Queue_exec_task().
00036 { 00037 return FLA_Trsm_external( side, uplo, trans, diag, alpha, A, B ); 00038 }
FLA_Error FLA_Trsmsx | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | transa, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
FLA_Error FLA_Trsmsx_check | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | transa, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Check_consistent_object_datatype(), FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_if_scalar(), FLA_Check_matrix_matrix_dims(), FLA_Check_nonconstant_object(), FLA_Check_square(), FLA_Check_valid_diag(), FLA_Check_valid_side(), FLA_Check_valid_trans(), and FLA_Check_valid_uplo().
Referenced by FLA_Trsmsx_external().
00036 { 00037 FLA_Error e_val; 00038 00039 e_val = FLA_Check_valid_side( side ); 00040 FLA_Check_error_code( e_val ); 00041 00042 e_val = FLA_Check_valid_uplo( uplo ); 00043 FLA_Check_error_code( e_val ); 00044 00045 e_val = FLA_Check_valid_trans( trans ); 00046 FLA_Check_error_code( e_val ); 00047 00048 e_val = FLA_Check_valid_diag( diag ); 00049 FLA_Check_error_code( e_val ); 00050 00051 e_val = FLA_Check_floating_object( A ); 00052 FLA_Check_error_code( e_val ); 00053 00054 e_val = FLA_Check_nonconstant_object( A ); 00055 FLA_Check_error_code( e_val ); 00056 00057 e_val = FLA_Check_identical_object_datatype( A, B ); 00058 FLA_Check_error_code( e_val ); 00059 00060 e_val = FLA_Check_identical_object_datatype( A, C ); 00061 FLA_Check_error_code( e_val ); 00062 00063 e_val = FLA_Check_consistent_object_datatype( A, alpha ); 00064 FLA_Check_error_code( e_val ); 00065 00066 e_val = FLA_Check_consistent_object_datatype( A, beta ); 00067 FLA_Check_error_code( e_val ); 00068 00069 e_val = FLA_Check_if_scalar( alpha ); 00070 FLA_Check_error_code( e_val ); 00071 00072 e_val = FLA_Check_if_scalar( beta ); 00073 FLA_Check_error_code( e_val ); 00074 00075 e_val = FLA_Check_square( A ); 00076 FLA_Check_error_code( e_val ); 00077 00078 if ( side == FLA_LEFT ) 00079 { 00080 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, A, B, C ); 00081 FLA_Check_error_code( e_val ); 00082 } 00083 else 00084 { 00085 e_val = FLA_Check_matrix_matrix_dims( FLA_NO_TRANSPOSE, FLA_NO_TRANSPOSE, B, A, C ); 00086 FLA_Check_error_code( e_val ); 00087 } 00088 00089 return FLA_SUCCESS; 00090 }
FLA_Error FLA_Trsmsx_external | ( | FLA_Side | side, | |
FLA_Uplo | uplo, | |||
FLA_Trans | transa, | |||
FLA_Diag | diag, | |||
FLA_Obj | alpha, | |||
FLA_Obj | A, | |||
FLA_Obj | B, | |||
FLA_Obj | beta, | |||
FLA_Obj | C | |||
) |
References FLA_Axpy_external(), FLA_Check_error_level(), FLA_Copy_external(), FLA_Obj_create_conf_to(), FLA_Obj_free(), FLA_ONE, FLA_Scal_external(), FLA_Trsm_external(), and FLA_Trsmsx_check().
Referenced by fla_trsmsx_external_f().
00036 { 00037 FLA_Obj B_copy; 00038 00039 if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 00040 FLA_Trsmsx_check( side, uplo, transa, diag, alpha, A, B, beta, C ); 00041 00042 FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, B, &B_copy ); 00043 00044 FLA_Copy_external( B, B_copy ); 00045 00046 FLA_Trsm_external( side, uplo, transa, diag, FLA_ONE, A, B_copy ); 00047 00048 FLA_Scal_external( beta, C ); 00049 00050 FLA_Axpy_external( alpha, B_copy, C ); 00051 00052 FLA_Obj_free( &B_copy ); 00053 00054 return FLA_SUCCESS; 00055 }
void FLA_F2C() fla_trsmsx_external_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | transa, | |||
F_INT * | diag, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |
References FLA_Trsmsx_external().
00059 { 00060 *IERROR = FLA_Trsmsx_external( *( ( FLA_Side * ) side ), 00061 *( ( FLA_Uplo * ) uplo ), 00062 *( ( FLA_Trans * ) transa ), 00063 *( ( FLA_Diag * ) diag ), 00064 *( ( FLA_Obj * ) alpha ), 00065 *( ( FLA_Obj * ) A ), 00066 *( ( FLA_Obj * ) B ), 00067 *( ( FLA_Obj * ) beta ), 00068 *( ( FLA_Obj * ) C ) ); 00069 }
void FLA_F2C() fla_trsmsx_f | ( | F_INT * | side, | |
F_INT * | uplo, | |||
F_INT * | trans, | |||
F_INT * | diag, | |||
F_INT * | alpha, | |||
F_INT * | A, | |||
F_INT * | B, | |||
F_INT * | beta, | |||
F_INT * | C, | |||
F_INT * | IERROR | |||
) |