14 LatticeField(param), bytes(0), norm_bytes(0), nColor(3), nSpin(4),
15 clover(0),
norm(0), cloverInv(0), invNorm(0), order(param.order), create(param.create),
21 errorQuda(
"QDPJIT ordered clover fields only supported for reference fields");
69 evenInvNorm = evenNorm;
98 evenNorm = evenInvNorm;
103 #ifdef USE_TEXTURE_OBJECTS
104 createTexObject(evenTex, evenNormTex, even, evenNorm);
105 createTexObject(oddTex, oddNormTex, odd, oddNorm);
106 createTexObject(evenInvTex, evenInvNormTex, evenInv, evenInvNorm);
107 createTexObject(oddInvTex, oddInvNormTex, oddInv, oddInvNorm);
114 #ifdef USE_TEXTURE_OBJECTS
115 void cudaCloverField::createTexObject(cudaTextureObject_t &tex, cudaTextureObject_t &texNorm,
116 void *field,
void *
norm) {
120 cudaChannelFormatDesc desc;
121 memset(&desc, 0,
sizeof(cudaChannelFormatDesc));
123 else desc.f = cudaChannelFormatKindSigned;
131 cudaResourceDesc resDesc;
132 memset(&resDesc, 0,
sizeof(resDesc));
133 resDesc.resType = cudaResourceTypeLinear;
134 resDesc.res.linear.devPtr = field;
135 resDesc.res.linear.desc = desc;
136 resDesc.res.linear.sizeInBytes =
bytes/2;
138 cudaTextureDesc texDesc;
139 memset(&texDesc, 0,
sizeof(texDesc));
141 else texDesc.readMode = cudaReadModeElementType;
143 cudaCreateTextureObject(&tex, &resDesc, &texDesc, NULL);
148 cudaChannelFormatDesc desc;
149 memset(&desc, 0,
sizeof(cudaChannelFormatDesc));
150 desc.f = cudaChannelFormatKindFloat;
153 cudaResourceDesc resDesc;
154 memset(&resDesc, 0,
sizeof(resDesc));
155 resDesc.resType = cudaResourceTypeLinear;
156 resDesc.res.linear.devPtr =
norm;
157 resDesc.res.linear.desc = desc;
158 resDesc.res.linear.sizeInBytes =
norm_bytes/2;
160 cudaTextureDesc texDesc;
161 memset(&texDesc, 0,
sizeof(texDesc));
162 texDesc.readMode = cudaReadModeElementType;
164 cudaCreateTextureObject(&texNorm, &resDesc, &texDesc, NULL);
171 void cudaCloverField::destroyTexObject() {
173 cudaDestroyTextureObject(evenTex);
174 cudaDestroyTextureObject(oddTex);
175 cudaDestroyTextureObject(evenInvTex);
176 cudaDestroyTextureObject(oddInvTex);
178 cudaDestroyTextureObject(evenNormTex);
179 cudaDestroyTextureObject(oddNormTex);
180 cudaDestroyTextureObject(evenInvNormTex);
181 cudaDestroyTextureObject(oddInvNormTex);
190 #ifdef USE_TEXTURE_OBJECTS
220 cudaMemcpy(
clover, packClover,
bytes, cudaMemcpyHostToDevice);
222 cudaMemcpy(norm, packCloverNorm,
norm_bytes, cudaMemcpyHostToDevice);
225 if (src.
V(
true) && inverse) {
246 errorQuda(
"Gauge and clover precisions must match");
275 output << static_cast<const LatticeFieldParam&>(
param);
276 output <<
"direct = " << param.
direct << std::endl;
277 output <<
"inverse = " << param.
inverse << std::endl;
278 output <<
"clover = " << param.
clover << std::endl;
279 output <<
"norm = " << param.
norm << std::endl;
280 output <<
"cloverInv = " << param.
cloverInv << std::endl;
281 output <<
"invNorm = " << param.
invNorm << std::endl;
282 output <<
"twisted = " << param.
twisted << std::endl;
283 output <<
"mu2 = " << param.
mu2 << std::endl;
284 output <<
"order = " << param.
order << std::endl;
285 output <<
"create = " << param.
create << std::endl;
QudaCloverFieldOrder order
cudaCloverField(const CloverFieldParam ¶m)
#define pinned_malloc(size)
void * V(bool inverse=false)
__host__ __device__ ValueType norm(const complex< ValueType > &z)
Returns the magnitude of z squared.
void loadCPUField(const cpuCloverField &cpu)
virtual ~cpuCloverField()
QudaCloverFieldOrder order
CloverField(const CloverFieldParam ¶m)
std::ostream & operator<<(std::ostream &output, const CloverFieldParam ¶m)
QudaPrecision Precision() const
#define ALIGNMENT_ADJUST(n)
void checkField(const LatticeField &)
cpuCloverField(const CloverFieldParam ¶m)
void copy(const CloverField &src, bool inverse=true)
void * memset(void *s, int c, size_t n)
#define device_malloc(size)
virtual ~cudaCloverField()
void computeClover(CloverField &clover, const GaugeField &gauge, double coeff, QudaFieldLocation location)
void resizeBufferPinned(size_t bytes, const int index=0) const
static void * bufferPinned[2]
void copyGenericClover(CloverField &out, const CloverField &in, bool inverse, QudaFieldLocation location, void *Out=0, void *In=0, void *outNorm=0, void *inNorm=0)