1 #ifndef _COLOR_SPINOR_FIELD_H 2 #define _COLOR_SPINOR_FIELD_H 236 class cpuColorSpinorField;
237 class cudaColorSpinorField;
364 const int*
X()
const {
return x; }
365 int X(
int d)
const {
return x[
d]; }
380 void*
V() {
return v;}
381 const void*
V()
const {
return v;}
384 virtual const void*
Ghost2()
const {
return nullptr; }
394 void exchange(
void **
ghost,
void **sendbuf,
int nFace=1)
const;
410 const MemoryLocation *halo_location=
nullptr,
bool gdr_send=
false,
bool gdr_recv=
false)
const = 0;
447 const void*
Ghost(
const int i)
const;
454 void*
const*
Ghost()
const;
514 #ifdef USE_TEXTURE_OBJECTS 515 cudaTextureObject_t
tex;
516 cudaTextureObject_t texNorm;
517 void createTexObject();
518 void destroyTexObject();
519 mutable cudaTextureObject_t ghostTex[4];
520 mutable cudaTextureObject_t ghostTexNorm[4];
521 void createGhostTexObject()
const;
522 void destroyGhostTexObject()
const;
567 void createComms(
int nFace,
bool spin_project=
true);
594 double a=0,
double b=0);
598 const int dagger,cudaStream_t*
stream,
bool zero_copy=
false);
625 void unpackGhost(
const void* ghost_spinor,
const int nFace,
const int dim,
663 const int dim, cudaStream_t *stream_p,
const bool zeroCopyPack=
false);
665 void gather(
int nFace,
int dagger,
int dir, cudaStream_t *stream_p=NULL);
676 void recvStart(
int nFace,
int dir,
int dagger=0, cudaStream_t *stream_p=
nullptr,
bool gdr=
false);
689 void sendStart(
int nFace,
int d,
int dagger=0, cudaStream_t *stream_p=
nullptr,
bool gdr=
false,
bool remote_write=
false);
701 void commsStart(
int nFace,
int d,
int dagger=0, cudaStream_t *stream_p=
nullptr,
bool gdr_send=
false,
bool gdr_recv=
false);
713 int commsQuery(
int nFace,
int d,
int dagger=0, cudaStream_t *stream_p=
nullptr,
bool gdr_send=
false,
bool gdr_recv=
false);
725 void commsWait(
int nFace,
int d,
int dagger=0, cudaStream_t *stream_p=
nullptr,
bool gdr_send=
false,
bool gdr_recv=
false);
727 void scatter(
int nFace,
int dagger,
int dir, cudaStream_t *stream_p);
754 const MemoryLocation *halo_location=
nullptr,
bool gdr_send=
false,
bool gdr_recv=
false)
const;
756 #ifdef USE_TEXTURE_OBJECTS 757 inline const cudaTextureObject_t& Tex()
const {
return tex; }
758 inline const cudaTextureObject_t& TexNorm()
const {
return texNorm; }
759 inline const cudaTextureObject_t& GhostTex()
const {
return ghostTex[
bufferIndex]; }
760 inline const cudaTextureObject_t& GhostTexNorm()
const {
return ghostTexNorm[
bufferIndex]; }
854 const MemoryLocation *halo_location=
nullptr,
bool gdr_send=
false,
bool gdr_recv=
false)
const;
869 void *dstNorm=0,
void*srcNorm=0);
908 #endif // _COLOR_SPINOR_FIELD_H QudaDslashType dslash_type
QudaDiracFieldOrder dirac_order
static int initGhostFaceBuffer
int genericCompare(const cpuColorSpinorField &a, const cpuColorSpinorField &b, int tol)
void setPrecision(QudaPrecision precision)
CompositeColorSpinorField components
int ComponentVolumeCB() const
void OffsetIndex(int &i, int *y) const
void copy(const cpuColorSpinorField &)
QudaFieldOrder fieldOrder
void commsStart(int nFace, int d, int dagger=0, cudaStream_t *stream_p=nullptr, bool gdr_send=false, bool gdr_recv=false)
Initiate halo communication.
friend std::ostream & operator<<(std::ostream &out, const ColorSpinorField &)
int ghostNormOffset[QUDA_MAX_DIM][2]
void unpackGhost(void *ghost_spinor, const int dim, const QudaDirection dir, const int dagger)
enum QudaPrecision_s QudaPrecision
void streamInit(cudaStream_t *stream_p)
const void * Ghost2() const
void exchangeGhost(QudaParity parity, int nFace, int dagger, const MemoryLocation *pack_destination=nullptr, const MemoryLocation *halo_location=nullptr, bool gdr_send=false, bool gdr_recv=false) const
This is a unified ghost exchange function for doing a complete halo exchange regardless of the type o...
void allocateGhostBuffer(int nFace, bool spin_project=true) const
Allocate the ghost buffers.
const void * Norm() const
virtual void Source(const QudaSourceType sourceType, const int st=0, const int s=0, const int c=0)=0
Constants used by dslash and packing kernels.
void * ghostNorm[2][QUDA_MAX_DIM]
int ghostFace[QUDA_MAX_DIM]
const char * AuxString() const
static void * ghost_pinned_buffer_hd[2]
void spinorGauss(ColorSpinorField &src, int seed)
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)
int GhostOffset(const int i, const int j) const
size_t ComponentBytes() const
QudaDslashType dslash_type
void copySpinorField(const ColorSpinorField &src)
enum QudaFieldOrder_s QudaFieldOrder
void sendGhost(void *ghost_spinor, const int nFace, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream)
void create(const QudaFieldCreate)
CompositeColorSpinorFieldDescriptor composite_descr
used for deflation eigenvector sets etc.:
cpuColorSpinorField(const cpuColorSpinorField &)
virtual ~ColorSpinorField()
void commsWait(int nFace, int d, int dagger=0, cudaStream_t *stream_p=nullptr, bool gdr_send=false, bool gdr_recv=false)
Wait on halo communication to complete.
void Source(const QudaSourceType sourceType, const int st=0, const int s=0, const int c=0)
static __inline__ dim3 dim3 void size_t cudaStream_t int dim
void loadSpinorField(const ColorSpinorField &src)
CompositeColorSpinorFieldDescriptor()
const ColorSpinorField & Even() const
enum QudaSiteOrder_s QudaSiteOrder
CompositeColorSpinorField & Components()
const ColorSpinorField & Odd() const
static ColorSpinorField * Create(const ColorSpinorParam ¶m)
QudaGammaBasis gammaBasis
QudaGammaBasis GammaBasis() const
ColorSpinorField * CreateFine(const int *geoblockSize, int spinBlockSize, int Nvec, QudaFieldLocation location=QUDA_INVALID_FIELD_LOCATION)
virtual void PrintVector(unsigned int x)=0
size_t ComponentLength() const
DslashConstant dslash_constant
void copyGenericColorSpinor(ColorSpinorField &dst, const ColorSpinorField &src, QudaFieldLocation location, void *Dst=0, void *Src=0, void *dstNorm=0, void *srcNorm=0)
ColorSpinorField & Component(const int idx) const
void scatterExtended(int nFace, int parity, int dagger, int dir)
void PrintVector(unsigned int x)
void CopySubset(cudaColorSpinorField &dst, const int range, const int first_element=0) const
void exchangeGhost(QudaParity parity, int nFace, int dagger, const MemoryLocation *pack_destination=nullptr, const MemoryLocation *halo_location=nullptr, bool gdr_send=false, bool gdr_recv=false) const
This is a unified ghost exchange function for doing a complete halo exchange regardless of the type o...
void * ghost_field_tex[4]
void copy(const cudaColorSpinorField &)
ColorSpinorParam(ColorSpinorParam &cpuParam, QudaInvertParam &inv_param, QudaFieldLocation location=QUDA_CUDA_FIELD_LOCATION)
QudaSiteSubset siteSubset
int commsQuery(int nFace, int d, int dagger=0, cudaStream_t *stream_p=nullptr, bool gdr_send=false, bool gdr_recv=false)
Non-blocking query if the halo communication has completed.
ColorSpinorField(const ColorSpinorField &)
virtual ~ColorSpinorParam()
enum QudaSourceType_s QudaSourceType
virtual ~cudaColorSpinorField()
size_t RealLength() const
void packGhost(void **ghost, const QudaParity parity, const int nFace, const int dagger) const
int_fastdiv Xh[QUDA_MAX_DIM]
bool is_composite
for deflation solvers:
enum QudaDirection_s QudaDirection
static void * backGhostFaceSendBuffer[QUDA_MAX_DIM]
void genericPackGhost(void **ghost, const ColorSpinorField &a, QudaParity parity, int nFace, int dagger, MemoryLocation *destination=nullptr)
Generic ghost packing routine.
QudaDWFPCType DWFPCtype() const
std::vector< ColorSpinorField * > CompositeColorSpinorField
enum QudaDWFPCType_s QudaDWFPCType
void Source(const QudaSourceType sourceType, const int st=0, const int s=0, const int c=0)
QudaFieldLocation location
QudaInvertParam inv_param
int_fastdiv X[QUDA_MAX_DIM]
static void checkField(const ColorSpinorField &, const ColorSpinorField &)
virtual void exchangeGhost(QudaParity parity, int nFace, int dagger, const MemoryLocation *pack_destination=nullptr, const MemoryLocation *halo_location=nullptr, bool gdr_send=false, bool gdr_recv=false) const =0
void createComms(int nFace, bool spin_project=true)
Create the communication handlers and buffers.
void create(int nDim, const int *x, int Nc, int Ns, QudaTwistFlavorType Twistflavor, QudaPrecision precision, int pad, QudaSiteSubset subset, QudaSiteOrder siteOrder, QudaFieldOrder fieldOrder, QudaGammaBasis gammaBasis, QudaDWFPCType PCtype)
void exchange(void **ghost, void **sendbuf, int nFace=1) const
void reset(const ColorSpinorParam &)
QudaFieldOrder fieldOrder
friend std::ostream & operator<<(std::ostream &out, const cudaColorSpinorField &)
int GhostNormOffset(const int i, const int j) const
void * GhostNorm(const int i)
QudaSiteSubset SiteSubset() const
void saveSpinorField(ColorSpinorField &src) const
Class declaration to initialize and hold CURAND RNG states.
void PrintVector(unsigned int x)
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)
void getTexObjectInfo() const
void * ghost[2][QUDA_MAX_DIM]
ColorSpinorField & operator=(const ColorSpinorField &)
static void * backGhostFaceBuffer[QUDA_MAX_DIM]
void restore()
Restores the cudaColorSpinorField.
enum QudaParity_s QudaParity
void genericSource(cpuColorSpinorField &a, QudaSourceType sourceType, int x, int s, int c)
void sendStart(int nFace, int d, int dagger=0, cudaStream_t *stream_p=nullptr, bool gdr=false, bool remote_write=false)
Initiate halo communication sending.
cudaColorSpinorField & Component(const int idx) const
for composite fields:
static void * fwdGhostFaceSendBuffer[QUDA_MAX_DIM]
static void freeGhostBuffer(void)
QudaTwistFlavorType twistFlavor
int GhostOffset(const int i) const
static void * fwdGhostFaceBuffer[QUDA_MAX_DIM]
static int Compare(const cpuColorSpinorField &a, const cpuColorSpinorField &b, const int resolution=1)
void genericPrintVector(cpuColorSpinorField &a, unsigned int x)
void switchBufferPinned()
void create(const QudaFieldCreate)
int ComponentVolume() const
virtual ColorSpinorField & operator=(const ColorSpinorField &)
enum QudaSiteSubset_s QudaSiteSubset
const DslashConstant & getDslashConstant() const
Get the dslash_constant structure from this field.
void unpackGhostExtended(const void *ghost_spinor, const int nFace, const QudaParity parity, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream, bool zero_copy)
CompositeColorSpinorFieldDescriptor(bool is_composite, int dim, bool is_component=false, int id=0)
ColorSpinorField * CreateCoarse(const int *geoblockSize, int spinBlockSize, int Nvec, QudaFieldLocation location=QUDA_INVALID_FIELD_LOCATION)
void wuppertalStep(ColorSpinorField &out, const ColorSpinorField &in, int parity, const GaugeField &U, double A, double B)
enum QudaFieldLocation_s QudaFieldLocation
char aux_string[TuneKey::aux_n]
cpuColorSpinorField * out
int ghostOffset[QUDA_MAX_DIM][2]
void createGhostZone(int nFace, bool spin_project=true) const
void copyExtendedColorSpinor(ColorSpinorField &dst, const ColorSpinorField &src, QudaFieldLocation location, const int parity, void *Dst, void *Src, void *dstNorm, void *srcNorm)
void backup() const
Backs up the cudaColorSpinorField.
enum QudaGammaBasis_s QudaGammaBasis
Main header file for the QUDA library.
int ComponentStride() const
virtual ~cpuColorSpinorField()
void fill(ColorSpinorParam &) const
size_t ComponentNormBytes() const
static void * ghost_recv_buffer_d[2]
int ghostFace[QUDA_MAX_DIM+1]
void backup() const
Backs up the cudaColorSpinorField.
QudaTwistFlavorType twistFlavor
void allocateGhostBuffer(int nFace) const
Allocate the ghost buffers.
static __inline__ dim3 dim3 void size_t cudaStream_t int enum cudaTextureReadMode readMode static __inline__ const struct texture< T, dim, readMode > & tex
QudaSiteOrder SiteOrder() const
QudaTwistFlavorType TwistFlavor() const
CompositeColorSpinorField & Components() const
void LatticeIndex(int *y, int i) const
void pack(int nFace, int parity, int dagger, int stream_idx, MemoryLocation location[], MemoryLocation location_label, double a=0, double b=0)
QudaTwistFlavorType twist_flavor
const int * GhostFace() const
size_t ComponentRealLength() const
enum QudaFieldCreate_s QudaFieldCreate
void packGhostExtended(const int nFace, const int R[], const QudaParity parity, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream, bool zero_copy=false)
void *const * Ghost() const
virtual const void * Ghost2() const
cudaColorSpinorField(const cudaColorSpinorField &)
#define QUDA_MAX_DIM
Maximum number of dimensions supported by QUDA. In practice, no routines make use of more than 5...
size_t bufferMessageHandler
ColorSpinorParam(void *V, QudaInvertParam &inv_param, const int *X, const bool pc_solution, QudaFieldLocation location=QUDA_CPU_FIELD_LOCATION)
int GhostNormOffset(const int i) const
void * ghost_buf[2 *QUDA_MAX_DIM]
static __inline__ size_t size_t d
void scatter(int nFace, int dagger, int dir, cudaStream_t *stream_p)
size_t GhostBytes() const
QudaSiteSubset siteSubset
void recvStart(int nFace, int dir, int dagger=0, cudaStream_t *stream_p=nullptr, bool gdr=false)
Initiate halo communication receive.
static size_t ghostFaceBytes[QUDA_MAX_DIM]
QudaFieldOrder FieldOrder() const
void packGhost(const int nFace, const QudaParity parity, const int dim, const QudaDirection dir, const int dagger, cudaStream_t *stream, MemoryLocation location[2 *QUDA_MAX_DIM], MemoryLocation location_label, double a=0, double b=0)
Packs the cudaColorSpinorField's ghost zone.
CompositeColorSpinorFieldDescriptor(const CompositeColorSpinorFieldDescriptor &descr)
cpuColorSpinorField * spinor
void restore()
Restores the cudaColorSpinorField.
size_t GhostNormBytes() const
ColorSpinorField & operator=(const ColorSpinorField &)
enum QudaTwistFlavorType_s QudaTwistFlavorType