QUDA
v0.7.0
A library for QCD on GPUs
Main Page
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
quda
lib
covDev.h
Go to the documentation of this file.
1
// DD_NAME_F = covDevM#
2
// DD_RECON_F = 8, 12, 18
3
// DD_DAG_F = Dagger, [blank]
4
// covDevM012() (no dagger)
5
//
6
// In addition, the kernels are templated on the precision of the
7
// fields (double, single, or half).
8
9
// initialize on first iteration
10
11
#ifndef DD_LOOP
12
#define DD_LOOP
13
#define DD_DAG 0
14
#define DD_RECON 0
15
#define DD_PREC 0
16
#endif
17
18
// set options for current iteration
19
20
#if (DD_PREC == 0)
21
#define DD_PARAM2 const double2 *gauge0, const double2 *gauge1
22
#else
23
#define DD_PARAM2 const float4 *gauge0, const float4 *gauge1
24
#endif
25
26
#if (DD_DAG==0) // no dagger
27
#define DD_DAG_F
28
#else // dagger
29
#define DD_DAG_F Dagger
30
#endif
31
32
#define DD_PARAM4 const DslashParam param
33
34
35
#if (DD_RECON==0) // reconstruct from 8 reals
36
#define DD_RECON_F 8
37
38
#if (DD_PREC == 0)
39
#define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_DOUBLE
40
41
#ifdef DIRECT_ACCESS_LINK
42
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_DOUBLE2
43
#else
44
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_DOUBLE2_TEX
45
#endif // DIRECT_ACCESS_LINK
46
#elif (DD_PREC == 1)
47
#define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_SINGLE
48
49
#ifdef DIRECT_ACCESS_LINK
50
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_FLOAT4
51
#else
52
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_FLOAT4_TEX
53
#endif
54
#endif
55
#elif (DD_RECON==1) // reconstruct from 12 reals
56
#define DD_RECON_F 12
57
58
#if (DD_PREC == 0)
59
#define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_DOUBLE
60
61
#ifdef DIRECT_ACCESS_LINK
62
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_DOUBLE2
63
#else
64
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_DOUBLE2_TEX
65
#endif // DIRECT_ACCESS_LINK
66
#elif (DD_PREC == 1)
67
#define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_SINGLE
68
69
#ifdef DIRECT_ACCESS_LINK
70
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_FLOAT4
71
#else
72
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_FLOAT4_TEX
73
#endif
74
#endif
75
#else // no reconstruct, load all components
76
#define DD_RECON_F 18
77
#define GAUGE_FLOAT2
78
79
#if (DD_PREC == 0)
80
#define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_DOUBLE
81
82
#ifdef DIRECT_ACCESS_LINK
83
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_DOUBLE2
84
#else
85
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_DOUBLE2_TEX
86
#endif // DIRECT_ACCESS_LINK
87
#elif (DD_PREC == 1)
88
#define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_SINGLE
89
90
#ifdef DIRECT_ACCESS_LINK
91
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_FLOAT2
92
#else
93
#define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_FLOAT2_TEX
94
#endif
95
#endif
96
#endif
97
98
99
#if (DD_PREC==0)
100
101
#define TPROJSCALE tProjScale
102
103
// double-precision gauge field
104
#if (defined DIRECT_ACCESS_LINK) || (defined FERMI_NO_DBLE_TEX)
105
#define GAUGE0TEX gauge0
106
#define GAUGE1TEX gauge1
107
#else
108
#ifdef USE_TEXTURE_OBJECTS
109
#define GAUGE0TEX param.gauge0Tex
110
#define GAUGE1TEX param.gauge1Tex
111
#else
112
#define GAUGE0TEX gauge0TexDouble2
113
#define GAUGE1TEX gauge1TexDouble2
114
#endif
115
#endif
116
117
#define GAUGE_FLOAT2
118
119
// double-precision spinor fields
120
#define DD_PARAM1 double2* out
121
#define DD_PARAM3 const double2* in
122
123
#if (defined DIRECT_ACCESS_WILSON_SPINOR) || (defined FERMI_NO_DBLE_TEX)
124
#define READ_SPINOR READ_SPINOR_DOUBLE
125
#define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP
126
#define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN
127
#define SPINORTEX in
128
#else
129
#define READ_SPINOR READ_SPINOR_DOUBLE_TEX
130
#define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP_TEX
131
#define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN_TEX
132
133
#ifdef USE_TEXTURE_OBJECTS
134
#define SPINORTEX param.inTex
135
#else
136
#define SPINORTEX spinorTexDouble
137
#endif // USE_TEXTURE_OBJECTS
138
#endif
139
140
#if (defined DIRECT_ACCESS_WILSON_INTER) || (defined FERMI_NO_DBLE_TEX)
141
#define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE
142
#define INTERTEX out
143
#else
144
#define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE_TEX
145
146
#ifdef USE_TEXTURE_OBJECTS
147
#define INTERTEX param.outTex
148
#else
149
#define INTERTEX interTexDouble
150
#endif
151
#endif
152
153
154
#define WRITE_SPINOR WRITE_SPINOR_DOUBLE2_STR
155
//#define WRITE_SPINOR WRITE_SPINOR_DOUBLE2
156
#define SPINOR_DOUBLE
157
158
#define SPINOR_HOP 12
159
160
#else
161
#define TPROJSCALE tProjScale_f
162
163
// single-precision gauge field
164
#ifdef DIRECT_ACCESS_LINK
165
#define GAUGE0TEX gauge0
166
#define GAUGE1TEX gauge1
167
#else
168
#ifdef USE_TEXTURE_OBJECTS
169
#define GAUGE0TEX param.gauge0Tex
170
#define GAUGE1TEX param.gauge1Tex
171
#else
172
#if (DD_RECON_F == 18)
173
#define GAUGE0TEX gauge0TexSingle2
174
#define GAUGE1TEX gauge1TexSingle2
175
#else
176
#define GAUGE0TEX gauge0TexSingle4
177
#define GAUGE1TEX gauge1TexSingle4
178
#endif
179
#endif // USE_TEXTURE_OBJECTS
180
#endif
181
182
183
// single-precision spinor fields
184
#define DD_PARAM1 float4* out
185
#define DD_PARAM3 const float4* in
186
187
#ifdef DIRECT_ACCESS_WILSON_SPINOR
188
#define READ_SPINOR READ_SPINOR_SINGLE
189
#define READ_SPINOR_UP READ_SPINOR_SINGLE_UP
190
#define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN
191
#define SPINORTEX in
192
#else
193
#define READ_SPINOR READ_SPINOR_SINGLE_TEX
194
#define READ_SPINOR_UP READ_SPINOR_SINGLE_UP_TEX
195
#define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN_TEX
196
197
#ifdef USE_TEXTURE_OBJECTS
198
#define SPINORTEX param.inTex
199
#else
200
#define SPINORTEX spinorTexSingle
201
#endif // USE_TEXTURE_OBJECTS
202
#endif
203
204
#ifdef DIRECT_ACCESS_WILSON_INTER
205
#define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE
206
#define INTERTEX out
207
#else
208
#define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE_TEX
209
210
#ifdef USE_TEXTURE_OBJECTS
211
#define INTERTEX param.outTex
212
#else
213
#define INTERTEX interTexSingle
214
#endif // USE_TEXTURE_OBJECTS
215
#endif
216
217
#define WRITE_SPINOR WRITE_SPINOR_FLOAT4_STR
218
219
#define SPINOR_HOP 6
220
#endif
221
222
// only build double precision if supported
223
#if !(__COMPUTE_CAPABILITY__ < 130 && DD_PREC == 0)
224
225
#define DD_CONCAT(n,r,d) n ## r ## d ## Kernel
226
#define DD_FUNC(n,r,d) DD_CONCAT(n,r,d)
227
228
// define the kernels
229
#define DD_NAME_F covDevM0
230
template
<KernelType kernel_type>
231
__global__
void
DD_FUNC
(
DD_NAME_F
,
DD_RECON_F
,
DD_DAG_F
) (
DD_PARAM1
,
DD_PARAM2
,
DD_PARAM3
,
DD_PARAM4
)
232
{
233
#if DD_DAG
234
#include "
covDev_mu0_dagger_core.h
"
235
#else
236
#include "
covDev_mu0_core.h
"
237
#endif
238
}
239
240
#undef DD_NAME_F
241
#define DD_NAME_F covDevM1
242
template
<KernelType kernel_type>
243
__global__
void
DD_FUNC
(
DD_NAME_F
,
DD_RECON_F
,
DD_DAG_F
) (
DD_PARAM1
,
DD_PARAM2
,
DD_PARAM3
,
DD_PARAM4
)
244
{
245
#if DD_DAG
246
#include "
covDev_mu1_dagger_core.h
"
247
#else
248
#include "
covDev_mu1_core.h
"
249
#endif
250
}
251
252
#undef DD_NAME_F
253
#define DD_NAME_F covDevM2
254
template
<KernelType kernel_type>
255
__global__
void
DD_FUNC
(
DD_NAME_F
,
DD_RECON_F
,
DD_DAG_F
) (
DD_PARAM1
,
DD_PARAM2
,
DD_PARAM3
,
DD_PARAM4
)
256
{
257
#if DD_DAG
258
#include "
covDev_mu2_dagger_core.h
"
259
#else
260
#include "
covDev_mu2_core.h
"
261
#endif
262
}
263
264
#undef DD_NAME_F
265
#define DD_NAME_F covDevM3
266
template
<KernelType kernel_type>
267
__global__
void
DD_FUNC
(
DD_NAME_F
,
DD_RECON_F
,
DD_DAG_F
) (
DD_PARAM1
,
DD_PARAM2
,
DD_PARAM3
,
DD_PARAM4
)
268
{
269
#if DD_DAG
270
#include "
covDev_mu3_dagger_core.h
"
271
#else
272
#include "
covDev_mu3_core.h
"
273
#endif
274
}
275
276
#undef DD_NAME_F
277
#endif
278
279
// clean up
280
281
#undef DD_NAME_F
282
#undef DD_RECON_F
283
#undef DD_DAG_F
284
#undef DD_PARAM1
285
#undef DD_PARAM2
286
#undef DD_PARAM3
287
#undef DD_PARAM4
288
#undef DD_CONCAT
289
#undef DD_FUNC
290
291
#undef DSLASH_XPAY
292
#undef READ_GAUGE_MATRIX
293
#undef RECONSTRUCT_GAUGE_MATRIX
294
#undef GAUGE0TEX
295
#undef GAUGE1TEX
296
#undef READ_SPINOR
297
#undef READ_SPINOR_UP
298
#undef READ_SPINOR_DOWN
299
#undef SPINORTEX
300
#undef READ_INTERMEDIATE_SPINOR
301
#undef INTERTEX
302
#undef ACCUMTEX
303
#undef WRITE_SPINOR
304
#undef GAUGE_FLOAT2
305
#undef SPINOR_DOUBLE
306
307
#undef SPINOR_HOP
308
309
#undef TPROJSCALE
310
311
// prepare next set of options, or clean up after final iteration
312
313
#if (DD_PREC==0)
314
#undef DD_PREC
315
#define DD_PREC 1
316
#else
317
#undef DD_PREC
318
#define DD_PREC 0
319
320
#if (DD_DAG==0)
321
#undef DD_DAG
322
#define DD_DAG 1
323
#else
324
#undef DD_DAG
325
#define DD_DAG 0
326
327
#if (DD_RECON==0)
328
#undef DD_RECON
329
#define DD_RECON 1
330
#elif (DD_RECON==1)
331
#undef DD_RECON
332
#define DD_RECON 2
333
#else
334
#undef DD_LOOP
335
#undef DD_DAG
336
#undef DD_RECON
337
#undef DD_PREC
338
#endif // DD_RECON
339
#endif // DD_DAG
340
#endif // DD_PREC
341
342
#ifdef DD_LOOP
343
#include "
covDev.h
"
344
#endif
345
covDev_mu0_core.h
DD_PARAM4
#define DD_PARAM4
Definition:
covDev.h:32
DD_DAG_F
#define DD_DAG_F
Definition:
covDev.h:27
DD_FUNC
#define DD_FUNC(x)
Definition:
clover_def.h:141
covDev_mu3_core.h
covDev_mu1_dagger_core.h
covDev_mu1_core.h
covDev_mu0_dagger_core.h
covDev.h
DD_RECON_F
#define DD_RECON_F
Definition:
covDev.h:36
covDev_mu2_dagger_core.h
covDev_mu2_core.h
DD_PARAM2
#define DD_PARAM2
Definition:
covDev.h:21
covDev_mu3_dagger_core.h
DD_NAME_F
#define DD_NAME_F
Definition:
dw_dslash4_def.h:40
DD_PARAM1
#define DD_PARAM1
Definition:
covDev.h:120
DD_PARAM3
#define DD_PARAM3
Definition:
covDev.h:121
Generated on Wed Feb 4 2015 17:00:05 for QUDA by
1.8.6