40 #define DD_NAME_F domainWallDslash 42 #if (DD_DAG==0) // no dagger 45 #define DD_DAG_F Dagger 48 #if (DD_XPAY==0) // no xpay 52 #define DD_XPAY_F Xpay 63 #if (DD_RECON==0) // reconstruct from 8 reals 67 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_DOUBLE 68 #ifdef DIRECT_ACCESS_LINK 69 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_DOUBLE2 71 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_DOUBLE2_TEX 72 #endif // DIRECT_ACCESS_LINK 75 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_SINGLE 76 #ifdef DIRECT_ACCESS_LINK 77 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_FLOAT4 79 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_FLOAT4_TEX 80 #endif // DIRECT_ACCESS_LINK 83 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_SINGLE 84 #ifdef DIRECT_ACCESS_LINK 85 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_SHORT4 87 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_SHORT4_TEX 88 #endif // DIRECT_ACCESS_LINK 90 #elif (DD_RECON==1) // reconstruct from 12 reals 94 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_DOUBLE 95 #ifdef DIRECT_ACCESS_LINK 96 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_DOUBLE2 98 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_DOUBLE2_TEX 99 #endif // DIRECT_ACCESS_LINK 102 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_SINGLE 103 #ifdef DIRECT_ACCESS_LINK 104 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_FLOAT4 106 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_FLOAT4_TEX 107 #endif // DIRECT_ACCESS_LINK 110 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_SINGLE 111 #ifdef DIRECT_ACCESS_LINK 112 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_SHORT4 114 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_SHORT4_TEX 115 #endif // DIRECT_ACCESS_LINK 117 #else // no reconstruct, load all components 118 #define DD_RECON_F 18 121 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_DOUBLE 122 #ifdef DIRECT_ACCESS_LINK 123 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_DOUBLE2 125 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_DOUBLE2_TEX 126 #endif // DIRECT_ACCESS_LINK 129 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_SINGLE 130 #ifdef DIRECT_ACCESS_LINK 131 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_FLOAT2 133 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_FLOAT2_TEX 134 #endif // DIRECT_ACCESS_LINK 137 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_SINGLE 138 #ifdef DIRECT_ACCESS_LINK 139 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_SHORT2 141 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_SHORT2_TEX 142 #endif //DIRECT_ACCESS_LINK 146 #if (DD_PREC==0) // double-precision fields 148 #define TPROJSCALE param.tProjScale 151 #if (defined DIRECT_ACCESS_LINK) || (defined FERMI_NO_DBLE_TEX) 152 #define GAUGE0TEX param.gauge0 153 #define GAUGE1TEX param.gauge1 155 #ifdef USE_TEXTURE_OBJECTS 156 #define GAUGE0TEX param.gauge0Tex 157 #define GAUGE1TEX param.gauge1Tex 159 #define GAUGE0TEX gauge0TexDouble2 160 #define GAUGE1TEX gauge1TexDouble2 161 #endif // USE_TEXTURE_OBJECTS 167 #if (defined DIRECT_ACCESS_WILSON_SPINOR) || (defined FERMI_NO_DBLE_TEX) 168 #define READ_SPINOR READ_SPINOR_DOUBLE 169 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_DOUBLE 170 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP 171 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN 172 #define SPINORTEX param.in 173 #define GHOSTSPINORTEX param.ghost 175 #define READ_SPINOR READ_SPINOR_DOUBLE_TEX 176 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_DOUBLE_TEX 177 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP_TEX 178 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN_TEX 179 #ifdef USE_TEXTURE_OBJECTS 180 #define SPINORTEX param.inTex 181 #define GHOSTSPINORTEX param.ghostTex 183 #define SPINORTEX spinorTexDouble 184 #define GHOSTSPINORTEX ghostSpinorTexDouble 185 #endif // USE_TEXTURE_OBJECTS 187 #if (defined DIRECT_ACCESS_WILSON_INTER) || (defined FERMI_NO_DBLE_TEX) 188 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE 189 #define INTERTEX param.out 191 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE_TEX 192 #ifdef USE_TEXTURE_OBJECTS 193 #define INTERTEX param.outTex 195 #define INTERTEX interTexDouble 198 #define WRITE_SPINOR WRITE_SPINOR_DOUBLE2 199 #define SPINOR_DOUBLE 201 #if (defined DIRECT_ACCESS_WILSON_ACCUM) || (defined FERMI_NO_DBLE_TEX) 203 #define READ_ACCUM READ_ACCUM_DOUBLE 205 #ifdef USE_TEXTURE_OBJECTS 206 #define ACCUMTEX param.xTex 208 #define ACCUMTEX accumTexDouble 209 #endif // USE_TEXTURE_OBJECTS 210 #define READ_ACCUM READ_ACCUM_DOUBLE_TEX 215 #define SPINOR_HOP 12 217 #elif (DD_PREC==1) // single-precision fields 219 #define TPROJSCALE param.tProjScale_f 222 #ifdef DIRECT_ACCESS_LINK 223 #define GAUGE0TEX param.gauge0 224 #define GAUGE1TEX param.gauge1 226 #ifdef USE_TEXTURE_OBJECTS 227 #define GAUGE0TEX param.gauge0Tex 228 #define GAUGE1TEX param.gauge1Tex 230 #if (DD_RECON_F == 18) 231 #define GAUGE0TEX gauge0TexSingle2 232 #define GAUGE1TEX gauge1TexSingle2 234 #define GAUGE0TEX gauge0TexSingle4 235 #define GAUGE1TEX gauge1TexSingle4 237 #endif // USE_TEXTURE_OBJECTS 242 #ifdef DIRECT_ACCESS_WILSON_SPINOR 243 #define READ_SPINOR READ_SPINOR_SINGLE 244 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_SINGLE 245 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP 246 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN 247 #define SPINORTEX param.in 248 #define GHOSTSPINORTEX param.ghost 250 #define READ_SPINOR READ_SPINOR_SINGLE_TEX 251 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_SINGLE_TEX 252 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP_TEX 253 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN_TEX 254 #ifdef USE_TEXTURE_OBJECTS 255 #define SPINORTEX param.inTex 256 #define GHOSTSPINORTEX param.ghostTex 258 #define SPINORTEX spinorTexSingle 259 #define GHOSTSPINORTEX ghostSpinorTexSingle 260 #endif // USE_TEXTURE_OBJECTS 262 #ifdef DIRECT_ACCESS_WILSON_INTER 263 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE 264 #define INTERTEX param.out 266 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE_TEX 267 #ifdef USE_TEXTURE_OBJECTS 268 #define INTERTEX param.outTex 270 #define INTERTEX interTexSingle 271 #endif // USE_TEXTURE_OBJECTS 273 #define WRITE_SPINOR WRITE_SPINOR_FLOAT4 275 #ifdef DIRECT_ACCESS_WILSON_ACCUM 277 #define READ_ACCUM READ_ACCUM_SINGLE 279 #ifdef USE_TEXTURE_OBJECTS 280 #define ACCUMTEX param.xTex 282 #define ACCUMTEX accumTexSingle 283 #endif // USE_TEXTURE_OBJECTS 284 #define READ_ACCUM READ_ACCUM_SINGLE_TEX 290 #else // half-precision fields 292 #define TPROJSCALE param.tProjScale_f 295 #ifdef DIRECT_ACCESS_LINK 296 #define GAUGE0TEX param.gauge0 297 #define GAUGE1TEX param.gauge1 299 #ifdef USE_TEXTURE_OBJECTS 300 #define GAUGE0TEX param.gauge0Tex 301 #define GAUGE1TEX param.gauge1Tex 303 #if (DD_RECON_F == 18) 304 #define GAUGE0TEX gauge0TexHalf2 305 #define GAUGE1TEX gauge1TexHalf2 307 #define GAUGE0TEX gauge0TexHalf4 308 #define GAUGE1TEX gauge1TexHalf4 310 #endif // USE_TEXTURE_OBJECTS 315 #ifdef DIRECT_ACCESS_WILSON_SPINOR 316 #define READ_SPINOR READ_SPINOR_HALF 317 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_HALF 318 #define READ_SPINOR_UP READ_SPINOR_HALF_UP 319 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN 320 #define SPINORTEX param.in 321 #define GHOSTSPINORTEX param.ghost 323 #define READ_SPINOR READ_SPINOR_HALF_TEX 324 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_HALF_TEX 325 #define READ_SPINOR_UP READ_SPINOR_HALF_UP_TEX 326 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN_TEX 327 #ifdef USE_TEXTURE_OBJECTS 328 #define SPINORTEX param.inTex 329 #define GHOSTSPINORTEX param.ghostTex 331 #define SPINORTEX spinorTexHalf 332 #define GHOSTSPINORTEX ghostSpinorTexHalf 333 #endif // USE_TEXTURE_OBJECTS 335 #ifdef DIRECT_ACCESS_WILSON_INTER 336 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF 337 #define INTERTEX param.out 339 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF_TEX 340 #ifdef USE_TEXTURE_OBJECTS 341 #define INTERTEX param.outTex 343 #define INTERTEX interTexHalf 344 #endif // USE_TEXTURE_OBJECTS 346 #define WRITE_SPINOR WRITE_SPINOR_SHORT4 348 #ifdef DIRECT_ACCESS_WILSON_ACCUM 350 #define READ_ACCUM READ_ACCUM_HALF 352 #ifdef USE_TEXTURE_OBJECTS 353 #define ACCUMTEX param.xTex 355 #define ACCUMTEX accumTexHalf 356 #endif // USE_TEXTURE_OBJECTS 357 #define READ_ACCUM READ_ACCUM_HALF_TEX 366 #define DD_CONCAT(n,p,r,d,x) n ## p ## r ## d ## x ## Kernel 367 #define DD_FUNC(n,p,r,d,x) DD_CONCAT(n,p,r,d,x) 371 template <KernelType kernel_type>
375 #ifdef GPU_DOMAIN_WALL_DIRAC 390 #ifdef GPU_DOMAIN_WALL_DIRAC 411 #undef ASSN_GAUGE_MATRIX 412 #undef RECONSTRUCT_GAUGE_MATRIX 416 #undef READ_SPINOR_GHOST 417 #undef READ_SPINOR_UP 418 #undef READ_SPINOR_DOWN 420 #undef GHOSTSPINORTEX 421 #undef READ_INTERMEDIATE_SPINOR
#define DD_FUNC(n, p, r, d, x)