Functions

atlas Namespace Reference

namespace for ATLAS functions (imported from the global namespace) More...

Functions

template<typename eT >
static const eT & tmp_real (const eT &X)
template<typename T >
static const T & tmp_real (const std::complex< T > &X)
template<typename eT >
arma_inline eT cblas_dot (const int N, const eT *X, const eT *Y)
template<typename eT >
arma_inline eT cx_cblas_dot (const int N, const eT *X, const eT *Y)
template<typename eT >
void cblas_gemv (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const eT alpha, const eT *A, const int lda, const eT *X, const int incX, const eT beta, eT *Y, const int incY)
template<typename eT >
void cblas_gemm (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const eT alpha, const eT *A, const int lda, const eT *B, const int ldb, const eT beta, eT *C, const int ldc)
template<typename eT >
int clapack_getrf (const enum CBLAS_ORDER Order, const int M, const int N, eT *A, const int lda, int *ipiv)
template<typename eT >
int clapack_getri (const enum CBLAS_ORDER Order, const int N, eT *A, const int lda, const int *ipiv)

Detailed Description

namespace for ATLAS functions (imported from the global namespace)


Function Documentation

template<typename eT >
static const eT& atlas::tmp_real ( const eT &  X  )  [inline, static]

Definition at line 54 of file atlas_proto.hpp.

Referenced by cblas_gemm(), cblas_gemv(), auxlib::inv_inplace(), auxlib::inv_noalias(), and auxlib::qr().

{ return X; }

template<typename T >
static const T& atlas::tmp_real ( const std::complex< T > &  X  )  [inline, static]

Definition at line 57 of file atlas_proto.hpp.

{ return X.real(); }

template<typename eT >
arma_inline eT atlas::cblas_dot ( const int  N,
const eT *  X,
const eT *  Y 
)

Definition at line 64 of file atlas_proto.hpp.

Referenced by op_dot::direct_dot().

    {
    arma_type_check<is_supported_blas_type<eT>::value == false>::apply();
    
    if(is_float<eT>::value == true)
      {
      typedef float T;
      return eT( cblas_sdot(N, (const T*)X, 1, (const T*)Y, 1) );
      }
    else
    if(is_double<eT>::value == true)
      {
      typedef double T;
      return eT( cblas_ddot(N, (const T*)X, 1, (const T*)Y, 1) );
      }
    else
      {
      return eT(0);
      }
    }

template<typename eT >
arma_inline eT atlas::cx_cblas_dot ( const int  N,
const eT *  X,
const eT *  Y 
)

Definition at line 90 of file atlas_proto.hpp.

    {
    arma_type_check<is_supported_blas_type<eT>::value == false>::apply();
    
    if(is_supported_complex_float<eT>::value == true)
      {
      typedef typename std::complex<float> T;
      
      T out;    
      cblas_cdotu_sub(N, (const T*)X, 1, (const T*)Y, 1, &out);
      
      return eT(out);
      }
    else
    if(is_supported_complex_double<eT>::value == true)
      {
      typedef typename std::complex<double> T;
      
      T out;
      cblas_zdotu_sub(N, (const T*)X, 1, (const T*)Y, 1, &out);
      
      return eT(out);
      }
    else
      {
      return eT(0);
      }
    }

template<typename eT >
void atlas::cblas_gemv ( const enum CBLAS_ORDER  Order,
const enum CBLAS_TRANSPOSE  TransA,
const int  M,
const int  N,
const eT  alpha,
const eT *  A,
const int  lda,
const eT *  X,
const int  incX,
const eT  beta,
eT *  Y,
const int  incY 
) [inline]

Definition at line 125 of file atlas_proto.hpp.

References tmp_real().

    {
    arma_type_check<is_supported_blas_type<eT>::value == false>::apply();
    
    if(is_float<eT>::value == true)
      {
      typedef float T;
      cblas_sgemv(Order, TransA, M, N, (const T)tmp_real(alpha), (const T*)A, lda, (const T*)X, incX, (const T)tmp_real(beta), (T*)Y, incY);
      }
    else
    if(is_double<eT>::value == true)
      {
      typedef double T;
      cblas_dgemv(Order, TransA, M, N, (const T)tmp_real(alpha), (const T*)A, lda, (const T*)X, incX, (const T)tmp_real(beta), (T*)Y, incY);
      }
    else
    if(is_supported_complex_float<eT>::value == true)
      {
      typedef std::complex<float> T;
      cblas_cgemv(Order, TransA, M, N, (const T*)&alpha, (const T*)A, lda, (const T*)X, incX, (const T*)&beta, (T*)Y, incY);
      }
    else
    if(is_supported_complex_double<eT>::value == true)
      {
      typedef std::complex<double> T;
      cblas_zgemv(Order, TransA, M, N, (const T*)&alpha, (const T*)A, lda, (const T*)X, incX, (const T*)&beta, (T*)Y, incY);
      }
    }

template<typename eT >
void atlas::cblas_gemm ( const enum CBLAS_ORDER  Order,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_TRANSPOSE  TransB,
const int  M,
const int  N,
const int  K,
const eT  alpha,
const eT *  A,
const int  lda,
const eT *  B,
const int  ldb,
const eT  beta,
eT *  C,
const int  ldc 
) [inline]

Definition at line 168 of file atlas_proto.hpp.

References tmp_real().

    {
    arma_type_check<is_supported_blas_type<eT>::value == false>::apply();
    
    if(is_float<eT>::value == true)
      {
      typedef float T;
      cblas_sgemm(Order, TransA, TransB, M, N, K, (const T)tmp_real(alpha), (const T*)A, lda, (const T*)B, ldb, (const T)tmp_real(beta), (T*)C, ldc);
      }
    else
    if(is_double<eT>::value == true)
      {
      typedef double T;
      cblas_dgemm(Order, TransA, TransB, M, N, K, (const T)tmp_real(alpha), (const T*)A, lda, (const T*)B, ldb, (const T)tmp_real(beta), (T*)C, ldc);
      }
    else
    if(is_supported_complex_float<eT>::value == true)
      {
      typedef std::complex<float> T;
      cblas_cgemm(Order, TransA, TransB, M, N, K, (const T*)&alpha, (const T*)A, lda, (const T*)B, ldb, (const T*)&beta, (T*)C, ldc);
      }
    else
    if(is_supported_complex_double<eT>::value == true)
      {
      typedef std::complex<double> T;
      cblas_zgemm(Order, TransA, TransB, M, N, K, (const T*)&alpha, (const T*)A, lda, (const T*)B, ldb, (const T*)&beta, (T*)C, ldc);
      }
    }

template<typename eT >
int atlas::clapack_getrf ( const enum CBLAS_ORDER  Order,
const int  M,
const int  N,
eT *  A,
const int  lda,
int *  ipiv 
) [inline]

Definition at line 209 of file atlas_proto.hpp.

Referenced by auxlib::det(), auxlib::inv_inplace(), auxlib::inv_noalias(), auxlib::log_det(), and auxlib::lu().

    {
    arma_type_check<is_supported_blas_type<eT>::value == false>::apply();
    
    if(is_float<eT>::value == true)
      {
      typedef float T;
      return clapack_sgetrf(Order, M, N, (T*)A, lda, ipiv);
      }
    else
    if(is_double<eT>::value == true)
      {
      typedef double T;
      return clapack_dgetrf(Order, M, N, (T*)A, lda, ipiv);
      }
    else
    if(is_supported_complex_float<eT>::value == true)
      {
      typedef std::complex<float> T;
      return clapack_cgetrf(Order, M, N, (T*)A, lda, ipiv);
      }
    else
    if(is_supported_complex_double<eT>::value == true)
      {
      typedef std::complex<double> T;
      return clapack_zgetrf(Order, M, N, (T*)A, lda, ipiv);
      }
    else
      {
      return -1;
      }
    }

template<typename eT >
int atlas::clapack_getri ( const enum CBLAS_ORDER  Order,
const int  N,
eT *  A,
const int  lda,
const int *  ipiv 
) [inline]

Definition at line 251 of file atlas_proto.hpp.

Referenced by auxlib::inv_inplace(), and auxlib::inv_noalias().

    {
    arma_type_check<is_supported_blas_type<eT>::value == false>::apply();
    
    if(is_float<eT>::value == true)
      {
      typedef float T;
      return clapack_sgetri(Order, N, (T*)A, lda, ipiv);
      }
    else
    if(is_double<eT>::value == true)
      {
      typedef double T;
      return clapack_dgetri(Order, N, (T*)A, lda, ipiv);
      }
    else
    if(is_supported_complex_float<eT>::value == true)
      {
      typedef std::complex<float> T;
      return clapack_cgetri(Order, N, (T*)A, lda, ipiv);
      }
    else
    if(is_supported_complex_double<eT>::value == true)
      {
      typedef std::complex<double> T;
      return clapack_zgetri(Order, N, (T*)A, lda, ipiv);
      }
    else
      {
      return -1;
      }
    }