libflame revision_anchor
Functions
FLA_Fused_Ahx_Ax_opt_var1.c File Reference

(r)

Functions

FLA_Error FLA_Fused_Ahx_Ax_opt_var1 (FLA_Obj A, FLA_Obj x, FLA_Obj v, FLA_Obj w)
FLA_Error FLA_Fused_Ahx_Ax_ops_var1 (int m_A, int n_A, float *buff_A, int rs_A, int cs_A, float *buff_x, int inc_x, float *buff_v, int inc_v, float *buff_w, int inc_w)
FLA_Error FLA_Fused_Ahx_Ax_opd_var1 (int m_A, int n_A, double *buff_A, int rs_A, int cs_A, double *buff_x, int inc_x, double *buff_v, int inc_v, double *buff_w, int inc_w)
FLA_Error FLA_Fused_Ahx_Ax_opc_var1 (int m_A, int n_A, scomplex *buff_A, int rs_A, int cs_A, scomplex *buff_x, int inc_x, scomplex *buff_v, int inc_v, scomplex *buff_w, int inc_w)
FLA_Error FLA_Fused_Ahx_Ax_opz_var1 (int m_A, int n_A, dcomplex *buff_A, int rs_A, int cs_A, dcomplex *buff_x, int inc_x, dcomplex *buff_v, int inc_v, dcomplex *buff_w, int inc_w)

Function Documentation

FLA_Error FLA_Fused_Ahx_Ax_opc_var1 ( int  m_A,
int  n_A,
scomplex buff_A,
int  rs_A,
int  cs_A,
scomplex buff_x,
int  inc_x,
scomplex buff_v,
int  inc_v,
scomplex buff_w,
int  inc_w 
)

References bli_cdot(), bli_csetv(), F77_caxpy(), and FLA_ZERO.

Referenced by FLA_Fused_Ahx_Ax_opt_var1(), FLA_Hess_UT_step_ofc_var2(), FLA_Hess_UT_step_ofc_var3(), and FLA_Hess_UT_step_ofc_var4().

{
  scomplex* buff_0  = FLA_COMPLEX_PTR( FLA_ZERO );
  int       i;

  bli_csetv( n_A,
             buff_0,
             buff_w, inc_w );

  for ( i = 0; i < n_A; ++i )
  {
    scomplex* a1       = buff_A + (i  )*cs_A + (0  )*rs_A;
    scomplex* nu1      = buff_v + (i  )*inc_v;
    scomplex* x        = buff_x;
    scomplex* chi1     = buff_x + (i  )*inc_x;
    scomplex* w        = buff_w;

    /*------------------------------------------------------------*/

    bli_cdot( BLIS_CONJUGATE,
              m_A,
              a1, rs_A,
              x,  inc_x,
              nu1 );

    // bli_caxpyv( BLIS_NO_CONJUGATE,
    //             m_A,
    //             chi1,
    //             a1, rs_A,
    //             w,  inc_w );
    F77_caxpy( &m_A,
               chi1,
               a1, &rs_A,
               w,  &inc_w );

    /*------------------------------------------------------------*/

  }

  return FLA_SUCCESS;
}
FLA_Error FLA_Fused_Ahx_Ax_opd_var1 ( int  m_A,
int  n_A,
double *  buff_A,
int  rs_A,
int  cs_A,
double *  buff_x,
int  inc_x,
double *  buff_v,
int  inc_v,
double *  buff_w,
int  inc_w 
)

References bli_dsetv(), F77_daxpy(), F77_ddot(), and FLA_ZERO.

Referenced by FLA_Fused_Ahx_Ax_opt_var1(), FLA_Hess_UT_step_ofd_var2(), FLA_Hess_UT_step_ofd_var3(), and FLA_Hess_UT_step_ofd_var4().

{
  double*   buff_0  = FLA_DOUBLE_PTR( FLA_ZERO );
  int       i;

  bli_dsetv( n_A,
             buff_0,
             buff_w, inc_w );

  for ( i = 0; i < n_A; ++i )
  {
    double*   a1       = buff_A + (i  )*cs_A + (0  )*rs_A;
    double*   nu1      = buff_v + (i  )*inc_v;
    double*   x        = buff_x;
    double*   chi1     = buff_x + (i  )*inc_x;
    double*   w        = buff_w;

    /*------------------------------------------------------------*/

    // bli_ddot( BLIS_CONJUGATE,
    //           m_A,
    //           a1, rs_A,
    //           x,  inc_x,
    //           nu1 );
    *nu1 = F77_ddot( &m_A,
                     a1, &rs_A,
                     x,  &inc_x );

    // bli_daxpyv( BLIS_NO_CONJUGATE,
    //             m_A,
    //             chi1,
    //             a1, rs_A,
    //             w,  inc_w );
    F77_daxpy( &m_A,
               chi1,
               a1, &rs_A,
               w,  &inc_w );

    /*------------------------------------------------------------*/

  }


  return FLA_SUCCESS;
}
FLA_Error FLA_Fused_Ahx_Ax_ops_var1 ( int  m_A,
int  n_A,
float *  buff_A,
int  rs_A,
int  cs_A,
float *  buff_x,
int  inc_x,
float *  buff_v,
int  inc_v,
float *  buff_w,
int  inc_w 
)

References bli_ssetv(), F77_saxpy(), F77_sdot(), and FLA_ZERO.

Referenced by FLA_Fused_Ahx_Ax_opt_var1(), FLA_Hess_UT_step_ofs_var2(), FLA_Hess_UT_step_ofs_var3(), and FLA_Hess_UT_step_ofs_var4().

{
  float*    buff_0  = FLA_FLOAT_PTR( FLA_ZERO );
  int       i;

  bli_ssetv( n_A,
             buff_0,
             buff_w, inc_w );

  for ( i = 0; i < n_A; ++i )
  {
    float*    a1       = buff_A + (i  )*cs_A + (0  )*rs_A;
    float*    nu1      = buff_v + (i  )*inc_v;
    float*    x        = buff_x;
    float*    chi1     = buff_x + (i  )*inc_x;
    float*    w        = buff_w;

    /*------------------------------------------------------------*/

    // bli_sdot( BLIS_CONJUGATE,
    //           m_A,
    //           a1, rs_A,
    //           x,  inc_x,
    //           nu1 );
    *nu1 = F77_sdot( &m_A,
                     a1, &rs_A,
                     x,  &inc_x );

    // bli_saxpyv( BLIS_NO_CONJUGATE,
    //             m_A,
    //             chi1,
    //             a1, rs_A,
    //             w,  inc_w );
    F77_saxpy( &m_A,
               chi1,
               a1, &rs_A,
               w,  &inc_w );

    /*------------------------------------------------------------*/

  }


  return FLA_SUCCESS;
}
FLA_Error FLA_Fused_Ahx_Ax_opt_var1 ( FLA_Obj  A,
FLA_Obj  x,
FLA_Obj  v,
FLA_Obj  w 
)

References FLA_Fused_Ahx_Ax_opc_var1(), FLA_Fused_Ahx_Ax_opd_var1(), FLA_Fused_Ahx_Ax_ops_var1(), FLA_Fused_Ahx_Ax_opz_var1(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), and FLA_Obj_width().

{
/*
   Effective computation:
   v = A' * x;
   w = A  * x;
*/
  FLA_Datatype datatype;
  int          m_A, n_A;
  int          rs_A, cs_A;
  int          inc_x, inc_v, inc_w;

  datatype = FLA_Obj_datatype( A );

  m_A      = FLA_Obj_length( A );
  n_A      = FLA_Obj_width( A );

  rs_A     = FLA_Obj_row_stride( A );
  cs_A     = FLA_Obj_col_stride( A );

  inc_x    = FLA_Obj_vector_inc( x );

  inc_v    = FLA_Obj_vector_inc( v );

  inc_w    = FLA_Obj_vector_inc( w );
  

  switch ( datatype )
  {
    case FLA_FLOAT:
    {
      float* buff_A = FLA_FLOAT_PTR( A );
      float* buff_x = FLA_FLOAT_PTR( x );
      float* buff_v = FLA_FLOAT_PTR( v );
      float* buff_w = FLA_FLOAT_PTR( w );

      FLA_Fused_Ahx_Ax_ops_var1( m_A,
                                 n_A,
                                 buff_A, rs_A, cs_A,
                                 buff_x, inc_x,
                                 buff_v, inc_v,
                                 buff_w, inc_w );

      break;
    }

    case FLA_DOUBLE:
    {
      double* buff_A = FLA_DOUBLE_PTR( A );
      double* buff_x = FLA_DOUBLE_PTR( x );
      double* buff_v = FLA_DOUBLE_PTR( v );
      double* buff_w = FLA_DOUBLE_PTR( w );

      FLA_Fused_Ahx_Ax_opd_var1( m_A,
                                 n_A,
                                 buff_A, rs_A, cs_A,
                                 buff_x, inc_x,
                                 buff_v, inc_v,
                                 buff_w, inc_w );

      break;
    }

    case FLA_COMPLEX:
    {
      scomplex* buff_A = FLA_COMPLEX_PTR( A );
      scomplex* buff_x = FLA_COMPLEX_PTR( x );
      scomplex* buff_v = FLA_COMPLEX_PTR( v );
      scomplex* buff_w = FLA_COMPLEX_PTR( w );

      FLA_Fused_Ahx_Ax_opc_var1( m_A,
                                 n_A,
                                 buff_A, rs_A, cs_A,
                                 buff_x, inc_x,
                                 buff_v, inc_v,
                                 buff_w, inc_w );

      break;
    }

    case FLA_DOUBLE_COMPLEX:
    {
      dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
      dcomplex* buff_x = FLA_DOUBLE_COMPLEX_PTR( x );
      dcomplex* buff_v = FLA_DOUBLE_COMPLEX_PTR( v );
      dcomplex* buff_w = FLA_DOUBLE_COMPLEX_PTR( w );

      FLA_Fused_Ahx_Ax_opz_var1( m_A,
                                 n_A,
                                 buff_A, rs_A, cs_A,
                                 buff_x, inc_x,
                                 buff_v, inc_v,
                                 buff_w, inc_w );

      break;
    }
  }

  return FLA_SUCCESS;
}
FLA_Error FLA_Fused_Ahx_Ax_opz_var1 ( int  m_A,
int  n_A,
dcomplex buff_A,
int  rs_A,
int  cs_A,
dcomplex buff_x,
int  inc_x,
dcomplex buff_v,
int  inc_v,
dcomplex buff_w,
int  inc_w 
)

References bli_zdot(), bli_zsetv(), F77_zaxpy(), and FLA_ZERO.

Referenced by FLA_Fused_Ahx_Ax_opt_var1(), FLA_Hess_UT_step_ofz_var2(), FLA_Hess_UT_step_ofz_var3(), and FLA_Hess_UT_step_ofz_var4().

{
  dcomplex* buff_0  = FLA_DOUBLE_COMPLEX_PTR( FLA_ZERO );
  int       i;

  bli_zsetv( n_A,
             buff_0,
             buff_w, inc_w );

  for ( i = 0; i < n_A; ++i )
  {
    dcomplex* a1       = buff_A + (i  )*cs_A + (0  )*rs_A;
    dcomplex* nu1      = buff_v + (i  )*inc_v;
    dcomplex* x        = buff_x;
    dcomplex* chi1     = buff_x + (i  )*inc_x;
    dcomplex* w        = buff_w;

    /*------------------------------------------------------------*/

    bli_zdot( BLIS_CONJUGATE,
              m_A,
              a1, rs_A,
              x,  inc_x,
              nu1 );

    // bli_zaxpyv( BLIS_NO_CONJUGATE,
    //             m_A,
    //             chi1,
    //             a1, rs_A,
    //             w,  inc_w );
    F77_zaxpy( &m_A,
               chi1,
               a1, &rs_A,
               w,  &inc_w );

    /*------------------------------------------------------------*/

  }

  return FLA_SUCCESS;
}