QUDA  1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Classes | Namespaces | Functions
quda_matrix.h File Reference
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <register_traits.h>
#include <float_vector.h>
#include <complex_quda.h>
Include dependency graph for quda_matrix.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  quda::Zero< T >
 
struct  quda::Identity< T >
 
struct  quda::gauge_wrapper< Float, T >
 gauge_wrapper is an internal class that is used to wrap instances of gauge accessors, currying in a specific location on the field. The operator() accessors in gauge-field accessors return instances to this class, allowing us to then use operator overloading upon this class to interact with the Matrix class. As a result we can include gauge-field accessors directly in Matrix expressions in kernels without having to declare temporaries with explicit calls to the load/save methods in the gauge-field accessors. More...
 
struct  quda::gauge_ghost_wrapper< Float, T >
 gauge_ghost_wrapper is an internal class that is used to wrap instances of gauge ghost accessors, currying in a specific location and dimension on the field. The Ghost() accessors in gauge-field accessors return instances to this class, allowing us to then use operator overloading upon this class to interact with the Matrix class. As a result we can include gauge-field ghost accessors directly in Matrix expressions in kernels without having to declare temporaries with explicit calls to the load/save methods in the gauge-field accessors. More...
 
struct  quda::clover_wrapper< Float, T >
 clover_wrapper is an internal class that is used to wrap instances of colorspinor accessors, currying in a specifc location and chirality on the field. The operator() accessors in clover-field accessors return instances to this class, allowing us to then use operator overloading upon this class to interact with the HMatrix class. As a result we can include clover-field accessors directly in HMatrix expressions in kernels without having to declare temporaries with explicit calls to the load/save methods in the clover-field accessors. More...
 
class  quda::HMatrix< T, N >
 Specialized container for Hermitian matrices (e.g., used for wrapping clover matrices) More...
 
class  quda::Matrix< T, N >
 
struct  quda::HMatrix_wrapper< T, Hmat >
 wrapper class that enables us to write to Hmatrices in packed format More...
 
class  quda::HMatrix< T, N >
 Specialized container for Hermitian matrices (e.g., used for wrapping clover matrices) More...
 
class  quda::Array< T, N >
 

Namespaces

 quda
 

Functions

template<class T >
__device__ __host__ T quda::getTrace (const Matrix< T, 3 > &a)
 
template<template< typename, int > class Mat, class T >
__device__ __host__ T quda::getDeterminant (const Mat< T, 3 > &a)
 
template<template< typename, int > class Mat, class T , int N>
__device__ __host__ Mat< T, N > quda::operator+ (const Mat< T, N > &a, const Mat< T, N > &b)
 
template<template< typename, int > class Mat, class T , int N>
__device__ __host__ Mat< T, N > quda::operator+= (Mat< T, N > &a, const Mat< T, N > &b)
 
template<template< typename, int > class Mat, class T , int N>
__device__ __host__ Mat< T, N > quda::operator+= (Mat< T, N > &a, const T &b)
 
template<template< typename, int > class Mat, class T , int N>
__device__ __host__ Mat< T, N > quda::operator-= (Mat< T, N > &a, const Mat< T, N > &b)
 
template<template< typename, int > class Mat, class T , int N>
__device__ __host__ Mat< T, N > quda::operator- (const Mat< T, N > &a, const Mat< T, N > &b)
 
template<template< typename, int > class Mat, class T , int N, class S >
__device__ __host__ Mat< T, N > quda::operator* (const S &scalar, const Mat< T, N > &a)
 
template<template< typename, int > class Mat, class T , int N, class S >
__device__ __host__ Mat< T, N > quda::operator* (const Mat< T, N > &a, const S &scalar)
 
template<template< typename, int > class Mat, class T , int N, class S >
__device__ __host__ Mat< T, N > quda::operator*= (Mat< T, N > &a, const S &scalar)
 
template<template< typename, int > class Mat, class T , int N>
__device__ __host__ Mat< T, N > quda::operator- (const Mat< T, N > &a)
 
template<template< typename, int > class Mat, class T , int N>
__device__ __host__ Mat< T, N > quda::operator* (const Mat< T, N > &a, const Mat< T, N > &b)
 Generic implementation of matrix multiplication. More...
 
template<template< typename > class complex, typename T , int N>
__device__ __host__ Matrix< complex< T >, N > quda::operator* (const Matrix< complex< T >, N > &a, const Matrix< complex< T >, N > &b)
 Specialization of complex matrix multiplication that will issue optimal fma instructions. More...
 
template<class T , int N>
__device__ __host__ Matrix< T, N > quda::operator*= (Matrix< T, N > &a, const Matrix< T, N > &b)
 
template<class T , class U , int N>
__device__ __host__ Matrix< typename PromoteTypeId< T, U >::Type, N > quda::operator* (const Matrix< T, N > &a, const Matrix< U, N > &b)
 
template<class T >
__device__ __host__ Matrix< T, 2 > quda::operator* (const Matrix< T, 2 > &a, const Matrix< T, 2 > &b)
 
template<class T , int N>
__device__ __host__ Matrix< T, N > quda::conj (const Matrix< T, N > &other)
 
template<class T >
__device__ __host__ Matrix< T, 3 > quda::inverse (const Matrix< T, 3 > &u)
 
template<class T , int N>
__device__ __host__ void quda::setIdentity (Matrix< T, N > *m)
 
template<int N>
__device__ __host__ void quda::setIdentity (Matrix< float2, N > *m)
 
template<int N>
__device__ __host__ void quda::setIdentity (Matrix< double2, N > *m)
 
template<class T , int N>
__device__ __host__ void quda::setZero (Matrix< T, N > *m)
 
template<int N>
__device__ __host__ void quda::setZero (Matrix< float2, N > *m)
 
template<int N>
__device__ __host__ void quda::setZero (Matrix< double2, N > *m)
 
template<typename Complex , int N>
__device__ __host__ void quda::makeAntiHerm (Matrix< Complex, N > &m)
 
template<class T , int N>
__device__ __host__ void quda::copyColumn (const Matrix< T, N > &m, int c, Array< T, N > *a)
 
template<class T , int N>
__device__ __host__ void quda::outerProd (const Array< T, N > &a, const Array< T, N > &b, Matrix< T, N > *m)
 
template<class T , int N>
__device__ __host__ void quda::outerProd (const T(&a)[N], const T(&b)[N], Matrix< T, N > *m)
 
template<class T , int N>
std::ostream & quda::operator<< (std::ostream &os, const Matrix< T, N > &m)
 
template<class T , int N>
std::ostream & quda::operator<< (std::ostream &os, const Array< T, N > &a)
 
template<class T , class U >
__device__ void quda::loadLinkVariableFromArray (const T *const array, const int dir, const int idx, const int stride, Matrix< U, 3 > *link)
 
template<class T , class U , int N>
__device__ void quda::loadMatrixFromArray (const T *const array, const int idx, const int stride, Matrix< U, N > *mat)
 
__device__ void quda::loadLinkVariableFromArray (const float2 *const array, const int dir, const int idx, const int stride, Matrix< complex< double >, 3 > *link)
 
template<class T , int N, class U >
__device__ void quda::writeMatrixToArray (const Matrix< T, N > &mat, const int idx, const int stride, U *const array)
 
__device__ void quda::appendMatrixToArray (const Matrix< complex< double >, 3 > &mat, const int idx, const int stride, double2 *const array)
 
__device__ void quda::appendMatrixToArray (const Matrix< complex< float >, 3 > &mat, const int idx, const int stride, float2 *const array)
 
template<class T , class U >
__device__ void quda::writeLinkVariableToArray (const Matrix< T, 3 > &link, const int dir, const int idx, const int stride, U *const array)
 
__device__ void quda::writeLinkVariableToArray (const Matrix< complex< double >, 3 > &link, const int dir, const int idx, const int stride, float2 *const array)
 
template<class T >
__device__ void quda::loadMomentumFromArray (const T *const array, const int dir, const int idx, const int stride, Matrix< T, 3 > *mom)
 
template<class T , class U >
__device__ void quda::writeMomentumToArray (const Matrix< T, 3 > &mom, const int dir, const int idx, const U coeff, const int stride, T *const array)
 
template<class Cmplx >
__device__ __host__ void quda::computeLinkInverse (Matrix< Cmplx, 3 > *uinv, const Matrix< Cmplx, 3 > &u)
 
void quda::copyArrayToLink (Matrix< float2, 3 > *link, float *array)
 
template<class Cmplx , class Real >
void quda::copyArrayToLink (Matrix< Cmplx, 3 > *link, Real *array)
 
void quda::copyLinkToArray (float *array, const Matrix< float2, 3 > &link)
 
template<class Cmplx , class Real >
void quda::copyLinkToArray (Real *array, const Matrix< Cmplx, 3 > &link)
 
template<class T >
__device__ __host__ Matrix< T, 3 > quda::getSubTraceUnit (const Matrix< T, 3 > &a)
 
template<class T >
__device__ __host__ void quda::SubTraceUnit (Matrix< T, 3 > &a)
 
template<class T >
__device__ __host__ double quda::getRealTraceUVdagger (const Matrix< T, 3 > &a, const Matrix< T, 3 > &b)
 
template<class Cmplx >
__host__ __device__ void quda::printLink (const Matrix< Cmplx, 3 > &link)
 
template<class Cmplx >
__device__ __host__ double quda::ErrorSU3 (const Matrix< Cmplx, 3 > &matrix)
 
template<class T >
__device__ __host__ void quda::exponentiate_iQ (const Matrix< T, 3 > &Q, Matrix< T, 3 > *exp_iQ)
 
template<typename Float >
__device__ __host__ void quda::expsu3 (Matrix< complex< Float >, 3 > &q)