QUDA  1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc > Struct Template Reference

Accessor routine for CloverFields in native field order. More...

#include <clover_field_order.h>

Public Types

using Accessor = FloatNOrder< Float, length, N, add_rho, huge_alloc >
 
using real = typename mapper< Float >::type
 
typedef VectorType< Float, N >::type Vector
 
typedef AllocType< huge_alloc >::type AllocInt
 
typedef float norm_type
 

Public Member Functions

 FloatNOrder (const CloverField &clover, bool is_inverse, Float *clover_=0, norm_type *norm_=0, bool override=false)
 host memory for backing up norm when tuning More...
 
bool Twisted () const
 
real Mu2 () const
 
__device__ __host__ clover_wrapper< real, Accessoroperator() (int x_cb, int parity, int chirality)
 This accessor routine returns a clover_wrapper to this object, allowing us to overload various operators for manipulating at the site level interms of matrix operations. More...
 
__device__ __host__ const clover_wrapper< real, Accessoroperator() (int x_cb, int parity, int chirality) const
 This accessor routine returns a const colorspinor_wrapper to this object, allowing us to overload various operators for manipulating at the site level interms of matrix operations. More...
 
__device__ __host__ void load (real v[block], int x, int parity, int chirality) const
 Load accessor for a single chiral block. More...
 
__device__ __host__ void save (const real v[block], int x, int parity, int chirality)
 Store accessor for a single chiral block. More...
 
__device__ __host__ void load (real v[length], int x, int parity) const
 Load accessor for the clover matrix. More...
 
__device__ __host__ void save (const real v[length], int x, int parity)
 Store accessor for the clover matrix. More...
 
void save ()
 Backup the field to the host when tuning. More...
 
void load ()
 Restore the field from the host after tuning. More...
 
size_t Bytes () const
 

Public Attributes

Float * clover
 
norm_typenorm
 
const AllocInt offset
 
const AllocInt norm_offset
 
const int volumeCB
 
const int stride
 
const bool twisted
 
const real mu2
 
const real rho
 
size_t bytes
 
size_t norm_bytes
 
void * backup_h
 
void * backup_norm_h
 host memory for backing up the field when tuning More...
 

Static Public Attributes

static const int M = length / (N * 2)
 
static const int block = length / 2
 

Detailed Description

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
struct quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >

Accessor routine for CloverFields in native field order.

Template Parameters
FloatUnderlying storage data type of the field
lengthTotal number of elements per packed clover matrix (e.g., 72)
NNumber of real numbers per short vector
add_rhoWhether to add the constant rho onto the diagonal. This is used to enable Hasenbusch mass preconditioning.
huge_allocTemplate parameter that enables 64-bit pointer arithmetic for huge allocations (e.g., packed set of vectors). Default is to use 32-bit pointer arithmetic.

Definition at line 541 of file clover_field_order.h.

Member Typedef Documentation

◆ Accessor

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
using quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::Accessor = FloatNOrder<Float, length, N, add_rho, huge_alloc>

Definition at line 542 of file clover_field_order.h.

◆ AllocInt

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
typedef AllocType<huge_alloc>::type quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::AllocInt

Definition at line 545 of file clover_field_order.h.

◆ norm_type

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
typedef float quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::norm_type

Definition at line 546 of file clover_field_order.h.

◆ real

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
using quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::real = typename mapper<Float>::type

Definition at line 543 of file clover_field_order.h.

◆ Vector

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
typedef VectorType<Float, N>::type quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::Vector

Definition at line 544 of file clover_field_order.h.

Constructor & Destructor Documentation

◆ FloatNOrder()

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::FloatNOrder ( const CloverField clover,
bool  is_inverse,
Float *  clover_ = 0,
norm_type norm_ = 0,
bool  override = false 
)
inline

host memory for backing up norm when tuning

Definition at line 571 of file clover_field_order.h.

References errorQuda, quda::LatticeField::Location(), quda::CloverField::Norm(), quda::LatticeField::Precision(), QUDA_CUDA_FIELD_LOCATION, QUDA_HALF_PRECISION, QUDA_QUARTER_PRECISION, and quda::CloverField::V().

Here is the call graph for this function:

Member Function Documentation

◆ Bytes()

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
size_t quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::Bytes ( ) const
inline

Definition at line 781 of file clover_field_order.h.

References quda::blas::bytes, and length.

◆ load() [1/3]

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
__device__ __host__ void quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::load ( real  v[block],
int  x,
int  parity,
int  chirality 
) const
inline

Load accessor for a single chiral block.

Parameters
[out]vVector of loaded elements
[in]xCheckerboarded site index
[in]parityField parity
[in]chiralityChiral block index

Definition at line 650 of file clover_field_order.h.

References quda::copy(), and quda::copy_and_scale().

Here is the call graph for this function:

◆ load() [2/3]

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
__device__ __host__ void quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::load ( real  v[length],
int  x,
int  parity 
) const
inline

Load accessor for the clover matrix.

Parameters
[out]vVector of loaded elements
[in]xCheckerboarded site index
[in]parityField parity
[in]chiralityChiral block index

Definition at line 735 of file clover_field_order.h.

References quda::clover_wrapper< Float, T >::chirality.

◆ load() [3/3]

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
void quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::load ( )
inline

Restore the field from the host after tuning.

Definition at line 769 of file clover_field_order.h.

References checkCudaError, and host_free.

◆ Mu2()

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
real quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::Mu2 ( ) const
inline

Definition at line 610 of file clover_field_order.h.

◆ operator()() [1/2]

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
__device__ __host__ clover_wrapper<real, Accessor> quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::operator() ( int  x_cb,
int  parity,
int  chirality 
)
inline

This accessor routine returns a clover_wrapper to this object, allowing us to overload various operators for manipulating at the site level interms of matrix operations.

Parameters
[in]x_cbCheckerboarded space-time index we are requesting
[in]parityParity we are requesting
[in]chiralityChirality we are requesting
Returns
Instance of a colorspinor_wrapper that curries in access to this field at the above coordinates.

Definition at line 622 of file clover_field_order.h.

References quda::clover_wrapper< Float, T >::chirality, quda::clover_wrapper< Float, T >::parity, and quda::clover_wrapper< Float, T >::x_cb.

◆ operator()() [2/2]

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
__device__ __host__ const clover_wrapper<real, Accessor> quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::operator() ( int  x_cb,
int  parity,
int  chirality 
) const
inline

This accessor routine returns a const colorspinor_wrapper to this object, allowing us to overload various operators for manipulating at the site level interms of matrix operations.

Parameters
[in]x_cbCheckerboarded space-time index we are requesting
[in]parityParity we are requesting
[in]chiralityChirality we are requesting
Returns
Instance of a colorspinor_wrapper that curries in access to this field at the above coordinates.

Definition at line 637 of file clover_field_order.h.

References quda::clover_wrapper< Float, T >::chirality, quda::clover_wrapper< Float, T >::parity, and quda::clover_wrapper< Float, T >::x_cb.

◆ save() [1/3]

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
__device__ __host__ void quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::save ( const real  v[block],
int  x,
int  parity,
int  chirality 
)
inline

Store accessor for a single chiral block.

Parameters
[out]vVector of elements to be stored
[in]xCheckerboarded site index
[in]parityField parity
[in]chiralityChiral block index

Definition at line 695 of file clover_field_order.h.

References tmp, and quda::vector_store().

Here is the call graph for this function:

◆ save() [2/3]

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
__device__ __host__ void quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::save ( const real  v[length],
int  x,
int  parity 
)
inline

Store accessor for the clover matrix.

Parameters
[out]vVector of elements to be stored
[in]xCheckerboarded site index
[in]parityField parity
[in]chiralityChiral block index

Definition at line 747 of file clover_field_order.h.

References quda::clover_wrapper< Float, T >::chirality.

◆ save() [3/3]

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
void quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::save ( )
inline

Backup the field to the host when tuning.

Definition at line 755 of file clover_field_order.h.

References checkCudaError, errorQuda, and safe_malloc.

◆ Twisted()

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
bool quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::Twisted ( ) const
inline

Definition at line 609 of file clover_field_order.h.

Member Data Documentation

◆ backup_h

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
void* quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::backup_h

Definition at line 568 of file clover_field_order.h.

◆ backup_norm_h

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
void* quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::backup_norm_h

host memory for backing up the field when tuning

Definition at line 569 of file clover_field_order.h.

◆ block

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const int quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::block = length / 2
static

Definition at line 548 of file clover_field_order.h.

◆ bytes

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
size_t quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::bytes

Definition at line 566 of file clover_field_order.h.

◆ clover

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
Float* quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::clover

Definition at line 549 of file clover_field_order.h.

◆ M

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const int quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::M = length / (N * 2)
static

Definition at line 547 of file clover_field_order.h.

◆ mu2

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const real quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::mu2

Definition at line 563 of file clover_field_order.h.

◆ norm

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
norm_type* quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::norm

Definition at line 550 of file clover_field_order.h.

◆ norm_bytes

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
size_t quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::norm_bytes

Definition at line 567 of file clover_field_order.h.

◆ norm_offset

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const AllocInt quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::norm_offset

Definition at line 552 of file clover_field_order.h.

◆ offset

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const AllocInt quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::offset

Definition at line 551 of file clover_field_order.h.

◆ rho

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const real quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::rho

Definition at line 564 of file clover_field_order.h.

◆ stride

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const int quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::stride

Definition at line 560 of file clover_field_order.h.

◆ twisted

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const bool quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::twisted

Definition at line 562 of file clover_field_order.h.

◆ volumeCB

template<typename Float, int length, int N, bool add_rho = false, bool huge_alloc = false>
const int quda::clover::FloatNOrder< Float, length, N, add_rho, huge_alloc >::volumeCB

Definition at line 559 of file clover_field_order.h.


The documentation for this struct was generated from the following file: