1 #ifndef _COLOR_SPINOR_FIELD_H
2 #define _COLOR_SPINOR_FIELD_H
55 for (
int d=0; d<
nDim; d++)
x[d] = X[d];
138 class cpuColorSpinorField;
139 class cudaColorSpinorField;
147 int nev = 0,
int evid = -1);
247 const int*
X()
const {
return x; }
248 int X(
int d)
const {
return x[d]; }
262 void*
V() {
return v;}
263 const void*
V()
const {
return v;}
292 void*
Ghost(
const int i);
293 const void*
Ghost(
const int i)
const;
295 const void*
GhostNorm(
const int i)
const;
313 #ifdef USE_TEXTURE_OBJECTS
314 cudaTextureObject_t tex;
315 cudaTextureObject_t texNorm;
316 void createTexObject();
317 void destroyTexObject();
320 #ifdef GPU_COMMS // This is a hack for half precision.
336 static size_t ghostFaceBytes;
337 static void* ghostFaceBuffer[2];
340 static int initGhostFaceBuffer;
361 size_t bufferMessageHandler;
405 cudaStream_t*
stream,
void *buffer=0,
double a=0,
double b=0);
436 void unpackGhost(
const void* ghost_spinor,
const int nFace,
const int dim,
455 void pack(
int nFace,
int parity,
int dagger,
int stream_idx,
bool zeroCopyPack,
456 double a=0,
double b=0);
459 int stream_idx,
bool zeroCopyPack,
double a=0);
461 void pack(
int nFace,
int parity,
int dagger, cudaStream_t *stream_p,
bool zeroCopyPack,
462 double a=0,
double b=0);
465 cudaStream_t *stream_p,
bool zeroCopyPack,
double a=0);
468 const int dim, cudaStream_t *stream_p,
const bool zeroCopyPack=
false);
470 void gather(
int nFace,
int dagger,
int dir, cudaStream_t *stream_p=NULL);
476 void scatter(
int nFace,
int dagger,
int dir, cudaStream_t *stream_p);
483 #ifdef USE_TEXTURE_OBJECTS
484 const cudaTextureObject_t& Tex()
const {
return tex; }
485 const cudaTextureObject_t& TexNorm()
const {
return texNorm; }
575 void *dstNorm=0,
void*srcNorm=0);
588 #endif // _COLOR_SPINOR_FIELD_H
QudaDslashType dslash_type
QudaDiracFieldOrder dirac_order
static int initGhostFaceBuffer
void allocateGhostBuffer(void)
int genericCompare(const cpuColorSpinorField &a, const cpuColorSpinorField &b, int tol)
void setPrecision(QudaPrecision precision)
void copy(const cpuColorSpinorField &)
QudaFieldOrder fieldOrder
friend std::ostream & operator<<(std::ostream &out, const ColorSpinorField &)
void unpackGhost(void *ghost_spinor, const int dim, const QudaDirection dir, const int dagger)
enum QudaPrecision_s QudaPrecision
void streamInit(cudaStream_t *stream_p)
void packGhost(const int nFace, const QudaParity parity, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream, void *buffer=0, double a=0, double b=0)
ColorSpinorParam(ColorSpinorParam &cpuParam, QudaInvertParam &inv_param)
int ghostFace[QUDA_MAX_DIM]
void * ghost[QUDA_MAX_DIM]
void * ghostNorm[QUDA_MAX_DIM]
void unpackGhost(const void *ghost_spinor, const int nFace, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream)
void gather(int nFace, int dagger, int dir, cudaStream_t *stream_p=NULL)
QudaDslashType dslash_type
enum QudaFieldOrder_s QudaFieldOrder
void sendGhost(void *ghost_spinor, const int nFace, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream)
int commsQuery(int nFace, int dir, int dagger=0)
void fill(ColorSpinorParam &) const
void pack(int nFace, int parity, int dagger, int stream_idx, bool zeroCopyPack, double a=0, double b=0)
int ghostOffset[QUDA_MAX_DIM]
cpuColorSpinorField(const cpuColorSpinorField &)
virtual ~ColorSpinorField()
void Source(const QudaSourceType sourceType, const int st=0, const int s=0, const int c=0)
enum QudaSiteOrder_s QudaSiteOrder
QudaDWFPCType DWFPCtype() const
QudaGammaBasis gammaBasis
__host__ __device__ void copy(T1 &a, const T2 &b)
int GhostNormOffset(const int i) const
void copyGenericColorSpinor(ColorSpinorField &dst, const ColorSpinorField &src, QudaFieldLocation location, void *Dst=0, void *Src=0, void *dstNorm=0, void *srcNorm=0)
void unpackGhostExtended(const void *ghost_spinor, const int nFace, const QudaParity parity, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream)
int eigv_dim
used for eigcg:
void scatterExtended(int nFace, int parity, int dagger, int dir)
cpuColorSpinorField * spinor
void PrintVector(unsigned int x)
void packGhost(void *ghost_spinor, const int dim, const QudaDirection dir, const QudaParity parity, const int dagger)
void sendStart(int nFace, int dir, int dagger=0)
QudaSiteSubset siteSubset
ColorSpinorField(const ColorSpinorField &)
virtual ~ColorSpinorParam()
enum QudaSourceType_s QudaSourceType
virtual ~cudaColorSpinorField()
cudaColorSpinorField & Odd() const
enum QudaDirection_s QudaDirection
static void * backGhostFaceSendBuffer[QUDA_MAX_DIM]
enum QudaDWFPCType_s QudaDWFPCType
const char * AuxString() const
const QudaFieldLocation location
std::vector< ColorSpinorField * > eigenvectors
for eigcg:
int EigvTotalLength() const
static void checkField(const ColorSpinorField &, const ColorSpinorField &)
void recvStart(int nFace, int dir, int dagger=0)
void reset(const ColorSpinorParam &)
QudaFieldOrder fieldOrder
void clearGhostPointers()
void CopyEigenvecSubset(cudaColorSpinorField &dst, const int range, const int first_element=0) const
int EigvGhostLength() const
friend std::ostream & operator<<(std::ostream &out, const cudaColorSpinorField &)
void * GhostNorm(const int i)
void getTexObjectInfo() const
QudaGammaBasis gammaBasis
void packExtended(const int nFace, const int R[], const int parity, const int dagger, const int dim, cudaStream_t *stream_p, const bool zeroCopyPack=false)
void exchangeExtendedGhost(cudaColorSpinorField *spinor, int R[], int parity, cudaStream_t *stream_p)
static void freeGhostBuffer(void)
int EigvDim() const
for eigcg only:
ColorSpinorField & operator=(const ColorSpinorField &)
static void * backGhostFaceBuffer[QUDA_MAX_DIM]
int ghostNormOffset[QUDA_MAX_DIM]
enum QudaParity_s QudaParity
void genericSource(cpuColorSpinorField &a, QudaSourceType sourceType, int x, int s, int c)
void createComms(int nFace)
static void * fwdGhostFaceSendBuffer[QUDA_MAX_DIM]
static void freeGhostBuffer(void)
QudaTwistFlavorType twist_flavor
QudaSiteOrder SiteOrder() const
QudaTwistFlavorType twistFlavor
static void * fwdGhostFaceBuffer[QUDA_MAX_DIM]
static int Compare(const cpuColorSpinorField &a, const cpuColorSpinorField &b, const int resolution=1)
QudaFieldOrder FieldOrder() const
void genericPrintVector(cpuColorSpinorField &a, unsigned int x)
void switchBufferPinned()
int EigvRealLength() const
virtual ColorSpinorField & operator=(const ColorSpinorField &)
void * Ghost(const int i)
enum QudaSiteSubset_s QudaSiteSubset
size_t EigvNormBytes() const
QudaFieldLocation Location() const
int eigv_total_norm_length
virtual QudaFieldLocation Location() const =0
enum QudaFieldLocation_s QudaFieldLocation
int eigv_ghost_norm_length
char aux_string[TuneKey::aux_n]
QudaInvertParam inv_param
cpuColorSpinorField * out
const void * Norm() const
void copyExtendedColorSpinor(ColorSpinorField &dst, const ColorSpinorField &src, QudaFieldLocation location, const int parity, void *Dst, void *Src, void *dstNorm, void *srcNorm)
enum QudaGammaBasis_s QudaGammaBasis
Main header file for the QUDA library.
virtual ~cpuColorSpinorField()
QudaPrecision Precision() const
QudaGammaBasis GammaBasis() const
QudaTwistFlavorType twistFlavor
QudaTwistFlavorType TwistFlavor() const
void allocateGhostBuffer(int nFace)
void packGhostExtended(const int nFace, const int R[], const QudaParity parity, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream, void *buffer=0)
enum QudaFieldCreate_s QudaFieldCreate
void init(int argc, char **argv)
ColorSpinorParam(void *V, QudaInvertParam &inv_param, const int *X, const bool pc_solution)
cudaColorSpinorField(const cudaColorSpinorField &)
#define QUDA_MAX_DIM
Maximum number of dimensions supported by QUDA. In practice, no routines make use of more than 5...
QudaFieldLocation Location() const
void commsStart(int nFace, int dir, int dagger=0)
void scatter(int nFace, int dagger, int dir, cudaStream_t *stream_p)
QudaSiteSubset siteSubset
int GhostOffset(const int i) const
void initComms(int argc, char **argv, const int *commDims)
QudaSiteSubset SiteSubset() const
cudaColorSpinorField & Even() const
const int * GhostFace() const
ColorSpinorField & operator=(const ColorSpinorField &)
enum QudaTwistFlavorType_s QudaTwistFlavorType
cudaColorSpinorField & Eigenvec(const int idx) const
for deflated solvers: