FLA_Gemv_external.c File Reference

(r)


Functions

FLA_Error FLA_Gemv_external (FLA_Trans transa, FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
void FLA_F2C() fla_gemv_external_f (F_INT *trans, F_INT *alpha, F_INT *A, F_INT *x, F_INT *beta, F_INT *y, F_INT *IERROR)
FLA_Error FLA_Gemv_c_external (FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
FLA_Error FLA_Gemv_n_external (FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)
FLA_Error FLA_Gemv_t_external (FLA_Obj alpha, FLA_Obj A, FLA_Obj x, FLA_Obj beta, FLA_Obj y)

Function Documentation

FLA_Error FLA_Gemv_c_external ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  x,
FLA_Obj  beta,
FLA_Obj  y 
)

References FLA_Gemv_external().

00227 {
00228   return FLA_Gemv_external( FLA_CONJ_TRANSPOSE, alpha, A, x, beta, y );
00229 }

FLA_Error FLA_Gemv_external ( FLA_Trans  transa,
FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  x,
FLA_Obj  beta,
FLA_Obj  y 
)

References cblas_cgemv(), cblas_dgemv(), cblas_sgemv(), cblas_zgemv(), CblasColMajor, cgemv(), dgemv(), FLA_Check_error_level(), FLA_Copyt_external(), FLA_Gemv_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(), sgemv(), and zgemv().

Referenced by FLA_Accum_T_UT_fc_unb_var1(), FLA_Chol_l_unb_var2(), FLA_Chol_u_unb_var2(), FLA_Gemm_hn_unb_var3(), FLA_Gemm_hn_unb_var4(), FLA_Gemm_ht_unb_var3(), FLA_Gemm_ht_unb_var4(), FLA_Gemm_nh_unb_var1(), FLA_Gemm_nh_unb_var2(), FLA_Gemm_nn_unb_var1(), FLA_Gemm_nn_unb_var2(), FLA_Gemm_nn_unb_var3(), FLA_Gemm_nn_unb_var4(), FLA_Gemm_nt_unb_var1(), FLA_Gemm_nt_unb_var2(), FLA_Gemm_nt_unb_var3(), FLA_Gemm_nt_unb_var4(), FLA_Gemm_th_unb_var1(), FLA_Gemm_th_unb_var2(), FLA_Gemm_th_unb_var3(), FLA_Gemm_th_unb_var4(), FLA_Gemm_tn_unb_var1(), FLA_Gemm_tn_unb_var2(), FLA_Gemm_tn_unb_var3(), FLA_Gemm_tn_unb_var4(), FLA_Gemm_tt_unb_var1(), FLA_Gemm_tt_unb_var2(), FLA_Gemm_tt_unb_var3(), FLA_Gemm_tt_unb_var4(), FLA_Gemv(), FLA_Gemv_c_external(), FLA_Gemv_c_task(), fla_gemv_external_f(), FLA_Gemv_n_external(), FLA_Gemv_n_task(), FLA_Gemv_t_external(), FLA_Gemv_t_task(), FLA_Gemv_task(), FLA_Hemm_ll_unb_var1(), FLA_Hemm_ll_unb_var2(), FLA_Hemm_ll_unb_var6(), FLA_Hemm_ll_unb_var7(), FLA_Hemm_lu_unb_var2(), FLA_Hemm_lu_unb_var3(), FLA_Hemm_lu_unb_var5(), FLA_Hemm_lu_unb_var6(), FLA_Hemm_rl_unb_var2(), FLA_Hemm_rl_unb_var3(), FLA_Hemm_rl_unb_var5(), FLA_Hemm_rl_unb_var6(), FLA_Hemm_ru_unb_var1(), FLA_Hemm_ru_unb_var2(), FLA_Hemm_ru_unb_var6(), FLA_Hemm_ru_unb_var7(), FLA_Her2k_lh_unb_var2(), FLA_Her2k_lh_unb_var3(), FLA_Her2k_lh_unb_var4(), FLA_Her2k_lh_unb_var5(), FLA_Her2k_lh_unb_var6(), FLA_Her2k_lh_unb_var7(), FLA_Her2k_ln_unb_var1(), FLA_Her2k_ln_unb_var2(), FLA_Her2k_ln_unb_var3(), FLA_Her2k_ln_unb_var6(), FLA_Her2k_ln_unb_var7(), FLA_Her2k_ln_unb_var8(), FLA_Her2k_uh_unb_var2(), FLA_Her2k_uh_unb_var3(), FLA_Her2k_uh_unb_var4(), FLA_Her2k_uh_unb_var5(), FLA_Her2k_uh_unb_var6(), FLA_Her2k_uh_unb_var7(), FLA_Her2k_un_unb_var1(), FLA_Her2k_un_unb_var2(), FLA_Her2k_un_unb_var3(), FLA_Her2k_un_unb_var6(), FLA_Her2k_un_unb_var7(), FLA_Her2k_un_unb_var8(), FLA_Herk_lh_unb_var2(), FLA_Herk_lh_unb_var3(), FLA_Herk_ln_unb_var1(), FLA_Herk_ln_unb_var4(), FLA_Herk_uh_unb_var2(), FLA_Herk_uh_unb_var4(), FLA_Herk_un_unb_var1(), FLA_Herk_un_unb_var3(), FLA_LU_nopiv_unb_var2(), FLA_LU_nopiv_unb_var3(), FLA_LU_nopiv_unb_var4(), FLA_LU_piv_unb_var3(), FLA_LU_piv_unb_var3b(), FLA_LU_piv_unb_var4(), FLA_QR_UT_Accum_T_unb_var1(), FLA_QR_UT_UD_Accum_T_unb_var1(), FLA_Symm_ll_unb_var1(), FLA_Symm_ll_unb_var2(), FLA_Symm_ll_unb_var3(), FLA_Symm_ll_unb_var5(), FLA_Symm_ll_unb_var6(), FLA_Symm_ll_unb_var7(), FLA_Symm_lu_unb_var1(), FLA_Symm_lu_unb_var2(), FLA_Symm_lu_unb_var3(), FLA_Symm_lu_unb_var5(), FLA_Symm_lu_unb_var6(), FLA_Symm_lu_unb_var7(), FLA_Symm_rl_unb_var1(), FLA_Symm_rl_unb_var2(), FLA_Symm_rl_unb_var3(), FLA_Symm_rl_unb_var5(), FLA_Symm_rl_unb_var6(), FLA_Symm_rl_unb_var7(), FLA_Symm_ru_unb_var1(), FLA_Symm_ru_unb_var2(), FLA_Symm_ru_unb_var3(), FLA_Symm_ru_unb_var5(), FLA_Symm_ru_unb_var6(), FLA_Symm_ru_unb_var7(), FLA_Syr2k_ln_unb_var1(), FLA_Syr2k_ln_unb_var2(), FLA_Syr2k_ln_unb_var3(), FLA_Syr2k_ln_unb_var4(), FLA_Syr2k_ln_unb_var5(), FLA_Syr2k_ln_unb_var6(), FLA_Syr2k_ln_unb_var7(), FLA_Syr2k_ln_unb_var8(), FLA_Syr2k_lt_unb_var1(), FLA_Syr2k_lt_unb_var2(), FLA_Syr2k_lt_unb_var3(), FLA_Syr2k_lt_unb_var4(), FLA_Syr2k_lt_unb_var5(), FLA_Syr2k_lt_unb_var6(), FLA_Syr2k_lt_unb_var7(), FLA_Syr2k_lt_unb_var8(), FLA_Syr2k_un_unb_var1(), FLA_Syr2k_un_unb_var2(), FLA_Syr2k_un_unb_var3(), FLA_Syr2k_un_unb_var4(), FLA_Syr2k_un_unb_var5(), FLA_Syr2k_un_unb_var6(), FLA_Syr2k_un_unb_var7(), FLA_Syr2k_un_unb_var8(), FLA_Syr2k_ut_unb_var1(), FLA_Syr2k_ut_unb_var2(), FLA_Syr2k_ut_unb_var3(), FLA_Syr2k_ut_unb_var4(), FLA_Syr2k_ut_unb_var5(), FLA_Syr2k_ut_unb_var6(), FLA_Syr2k_ut_unb_var7(), FLA_Syr2k_ut_unb_var8(), FLA_Syrk_ln_unb_var1(), FLA_Syrk_ln_unb_var2(), FLA_Syrk_ln_unb_var3(), FLA_Syrk_ln_unb_var4(), FLA_Syrk_lt_unb_var1(), FLA_Syrk_lt_unb_var2(), FLA_Syrk_lt_unb_var3(), FLA_Syrk_lt_unb_var4(), FLA_Syrk_un_unb_var1(), FLA_Syrk_un_unb_var2(), FLA_Syrk_un_unb_var3(), FLA_Syrk_un_unb_var4(), FLA_Syrk_ut_unb_var1(), FLA_Syrk_ut_unb_var2(), FLA_Syrk_ut_unb_var3(), FLA_Syrk_ut_unb_var4(), FLA_Trmm_lln_unb_var1(), FLA_Trmm_llt_unb_var1(), FLA_Trmm_lun_unb_var1(), FLA_Trmm_lut_unb_var1(), FLA_Trmm_rln_unb_var1(), FLA_Trmm_rlt_unb_var1(), FLA_Trmm_run_unb_var1(), FLA_Trmm_rut_unb_var1(), FLA_Trsm_lln_unb_var1(), FLA_Trsm_llt_unb_var1(), FLA_Trsm_lun_unb_var1(), FLA_Trsm_lut_unb_var1(), FLA_Trsm_rln_unb_var1(), FLA_Trsm_rlt_unb_var1(), FLA_Trsm_run_unb_var1(), FLA_Trsm_rut_unb_var1(), FLA_Ttmm_l_unb_var2(), and FLA_Ttmm_u_unb_var2().

00036 {
00037   FLA_Datatype datatype;
00038   int          m_A, n_A, ldim_A;
00039   int          m_x, ldim_x;
00040   int          m_y, ldim_y;
00041   int          inc_x, inc_y;
00042 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00043   CBLAS_ORDER     cblas_order = CblasColMajor;
00044   CBLAS_TRANSPOSE blas_transa;
00045 #else
00046   char         blas_transa;
00047 #endif
00048   FLA_Obj      A_copy;
00049   FLA_Trans    transa_copy;
00050 
00051   if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING ) 
00052     FLA_Gemv_check( transa, alpha, A, x, beta, y );
00053 
00054   if ( FLA_Obj_has_zero_dim( A ) ) 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   m_x      = FLA_Obj_length( x );
00063   ldim_x   = FLA_Obj_ldim( x );
00064 
00065   m_y      = FLA_Obj_length( y );
00066   ldim_y   = FLA_Obj_ldim( y );
00067 
00068   inc_x    = ( m_x == 1 ? ldim_x : 1 );
00069   inc_y    = ( m_y == 1 ? ldim_y : 1 );
00070 
00071   if ( transa == FLA_CONJ_NO_TRANSPOSE )
00072   {
00073     FLA_Obj_create_conf_to( FLA_NO_TRANSPOSE, A, &A_copy );
00074     FLA_Copyt_external( FLA_CONJ_NO_TRANSPOSE, A, A_copy );
00075     transa_copy = FLA_NO_TRANSPOSE;
00076 
00077     ldim_A      = FLA_Obj_ldim( A_copy );
00078   }
00079   else
00080   {
00081     A_copy      = A;
00082     transa_copy = transa;
00083   }
00084 
00085   FLA_Param_map_to_blas_trans( transa_copy, &blas_transa );
00086 
00087 
00088   switch( datatype ){
00089   
00090   case FLA_FLOAT:
00091   {
00092     float *buff_A     = ( float * ) FLA_FLOAT_PTR( A );
00093     float *buff_x     = ( float * ) FLA_FLOAT_PTR( x );
00094     float *buff_y     = ( float * ) FLA_FLOAT_PTR( y );
00095     float *buff_alpha = ( float * ) FLA_FLOAT_PTR( alpha );
00096     float *buff_beta  = ( float * ) FLA_FLOAT_PTR( beta );
00097 
00098 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00099     cblas_sgemv( cblas_order,
00100                  blas_transa,
00101                  m_A, n_A, 
00102                  *buff_alpha,  
00103                  buff_A, ldim_A, 
00104                  buff_x, inc_x,
00105                  *buff_beta,  
00106                  buff_y, inc_y );
00107 #else
00108     FLA_C2F( sgemv )( &blas_transa,
00109                       &m_A, &n_A, 
00110                       buff_alpha,  
00111                       buff_A, &ldim_A, 
00112                       buff_x, &inc_x,
00113                       buff_beta,  
00114                       buff_y, &inc_y );
00115 #endif
00116     break;
00117   }
00118 
00119   case FLA_DOUBLE:
00120   {
00121     double *buff_A     = ( double * ) FLA_DOUBLE_PTR( A );
00122     double *buff_x     = ( double * ) FLA_DOUBLE_PTR( x );
00123     double *buff_y     = ( double * ) FLA_DOUBLE_PTR( y );
00124     double *buff_alpha = ( double * ) FLA_DOUBLE_PTR( alpha );
00125     double *buff_beta  = ( double * ) FLA_DOUBLE_PTR( beta );
00126 
00127 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00128     cblas_dgemv( cblas_order,
00129                  blas_transa,
00130                  m_A, n_A, 
00131                  *buff_alpha,  
00132                  buff_A, ldim_A, 
00133                  buff_x, inc_x,
00134                  *buff_beta,  
00135                  buff_y, inc_y );
00136 #else
00137     FLA_C2F( dgemv )( &blas_transa,
00138                       &m_A, &n_A, 
00139                       buff_alpha,  
00140                       buff_A, &ldim_A, 
00141                       buff_x, &inc_x,
00142                       buff_beta,  
00143                       buff_y, &inc_y );
00144 #endif
00145     break;
00146   }
00147 
00148   case FLA_COMPLEX:
00149   {
00150     scomplex *buff_A     = ( scomplex * ) FLA_COMPLEX_PTR( A_copy );
00151     scomplex *buff_x     = ( scomplex * ) FLA_COMPLEX_PTR( x );
00152     scomplex *buff_y     = ( scomplex * ) FLA_COMPLEX_PTR( y );
00153     scomplex *buff_alpha = ( scomplex * ) FLA_COMPLEX_PTR( alpha );
00154     scomplex *buff_beta  = ( scomplex * ) FLA_COMPLEX_PTR( beta );
00155 
00156 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00157     cblas_cgemv( cblas_order,
00158                  blas_transa,
00159                  m_A, n_A, 
00160                  buff_alpha,  
00161                  buff_A, ldim_A, 
00162                  buff_x, inc_x,
00163                  buff_beta,  
00164                  buff_y, inc_y );
00165 #else
00166     FLA_C2F( cgemv )( &blas_transa,
00167                       &m_A, &n_A, 
00168                       buff_alpha,  
00169                       buff_A, &ldim_A, 
00170                       buff_x, &inc_x,
00171                       buff_beta,  
00172                       buff_y, &inc_y );
00173 #endif
00174     break;
00175   }
00176 
00177   case FLA_DOUBLE_COMPLEX:
00178   {
00179     dcomplex *buff_A     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A_copy );
00180     dcomplex *buff_x     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( x );
00181     dcomplex *buff_y     = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( y );
00182     dcomplex *buff_alpha = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( alpha );
00183     dcomplex *buff_beta  = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( beta );
00184 
00185 #ifdef FLA_ENABLE_CBLAS_INTERFACE
00186     cblas_zgemv( cblas_order,
00187                  blas_transa,
00188                  m_A, n_A, 
00189                  buff_alpha,  
00190                  buff_A, ldim_A, 
00191                  buff_x, inc_x,
00192                  buff_beta,  
00193                  buff_y, inc_y );
00194 #else
00195     FLA_C2F( zgemv )( &blas_transa,
00196                       &m_A, &n_A, 
00197                       buff_alpha,  
00198                       buff_A, &ldim_A, 
00199                       buff_x, &inc_x,
00200                       buff_beta,  
00201                       buff_y, &inc_y );
00202 #endif
00203     break;
00204   }
00205 
00206   }
00207 
00208   if ( transa == FLA_CONJ_NO_TRANSPOSE )
00209     FLA_Obj_free( &A_copy );
00210 
00211   return FLA_SUCCESS;
00212 }

void FLA_F2C() fla_gemv_external_f ( F_INT *  trans,
F_INT *  alpha,
F_INT *  A,
F_INT *  x,
F_INT *  beta,
F_INT *  y,
F_INT *  IERROR 
)

References FLA_Gemv_external().

00217 {
00218   *IERROR = FLA_Gemv_external( *( ( FLA_Trans * ) trans ), 
00219                                *( ( FLA_Obj   * ) alpha ),
00220                                *( ( FLA_Obj   * ) A     ),
00221                                *( ( FLA_Obj   * ) x     ),
00222                                *( ( FLA_Obj   * ) beta  ),
00223                                *( ( FLA_Obj   * ) y     ) );
00224 }

FLA_Error FLA_Gemv_n_external ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  x,
FLA_Obj  beta,
FLA_Obj  y 
)

References FLA_Gemv_external().

00232 {
00233   return FLA_Gemv_external( FLA_NO_TRANSPOSE, alpha, A, x, beta, y );
00234 }

FLA_Error FLA_Gemv_t_external ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  x,
FLA_Obj  beta,
FLA_Obj  y 
)

References FLA_Gemv_external().

00237 {
00238   return FLA_Gemv_external( FLA_TRANSPOSE, alpha, A, x, beta, y );
00239 }


Generated on Mon Jul 6 05:45:53 2009 for libflame by  doxygen 1.5.9