44 #if (DD_DAG==0) // no dagger 47 #define DD_DAG_F Dagger 51 #if (DD_XPAY==0) // no xpay 55 #define DD_XPAY_F Xpay 66 #if (DD_TWIST==0) // twisted input 67 #define DD_NAME_F twistedMassTwistInvDslash 68 #define TWIST_INV_DSLASH 70 #define DD_NAME_F twistedMassDslash 74 #if (DD_RECON==0) // reconstruct from 8 reals 78 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_DOUBLE 79 #ifdef DIRECT_ACCESS_LINK 80 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_DOUBLE2 82 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_DOUBLE2_TEX 83 #endif // DIRECT_ACCESS_LINK 86 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_SINGLE 87 #ifdef DIRECT_ACCESS_LINK 88 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_FLOAT4 90 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_FLOAT4_TEX 91 #endif // DIRECT_ACCESS_LINK 94 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_SINGLE 95 #ifdef DIRECT_ACCESS_LINK 96 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_SHORT4 98 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_SHORT4_TEX 99 #endif // DIRECT_ACCESS_LINK 101 #elif (DD_RECON==1) // reconstruct from 12 reals 102 #define DD_RECON_F 12 105 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_DOUBLE 106 #ifdef DIRECT_ACCESS_LINK 107 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_DOUBLE2 109 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_DOUBLE2_TEX 110 #endif // DIRECT_ACCESS_LINK 113 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_SINGLE 114 #ifdef DIRECT_ACCESS_LINK 115 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_FLOAT4 117 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_FLOAT4_TEX 118 #endif // DIRECT_ACCESS_LINK 121 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_SINGLE 122 #ifdef DIRECT_ACCESS_LINK 123 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_SHORT4 125 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_SHORT4_TEX 126 #endif // DIRECT_ACCESS_LINK 128 #else // no reconstruct, load all components 129 #define DD_RECON_F 18 132 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_DOUBLE 133 #ifdef DIRECT_ACCESS_LINK 134 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_DOUBLE2 136 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_DOUBLE2_TEX 137 #endif // DIRECT_ACCESS_LINK 140 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_SINGLE 141 #ifdef DIRECT_ACCESS_LINK 142 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_FLOAT2 144 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_FLOAT2_TEX 145 #endif // DIRECT_ACCESS_LINK 148 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_SINGLE 149 #ifdef DIRECT_ACCESS_LINK 150 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_SHORT2 152 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_SHORT2_TEX 153 #endif //DIRECT_ACCESS_LINK 157 #if (DD_PREC==0) // double-precision fields 159 #define TPROJSCALE param.tProjScale 162 #if (defined DIRECT_ACCESS_LINK) || (defined FERMI_NO_DBLE_TEX) 163 #define GAUGE0TEX param.gauge0 164 #define GAUGE1TEX param.gauge1 166 #ifdef USE_TEXTURE_OBJECTS 167 #define GAUGE0TEX param.gauge0Tex 168 #define GAUGE1TEX param.gauge1Tex 170 #define GAUGE0TEX gauge0TexDouble2 171 #define GAUGE1TEX gauge1TexDouble2 172 #endif // USE_TEXTURE_OBJECTS 178 #if (defined DIRECT_ACCESS_WILSON_SPINOR) || (defined FERMI_NO_DBLE_TEX) 179 #define READ_SPINOR READ_SPINOR_DOUBLE 180 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_DOUBLE 181 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP 182 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN 183 #define SPINORTEX param.in 185 #define READ_SPINOR READ_SPINOR_DOUBLE_TEX 186 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_DOUBLE_TEX 187 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP_TEX 188 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN_TEX 189 #ifdef USE_TEXTURE_OBJECTS 190 #define SPINORTEX param.inTex 191 #define GHOSTSPINORTEX param.ghostTex 193 #define SPINORTEX spinorTexDouble 194 #define GHOSTSPINORTEX ghostSpinorTexDouble 195 #endif // USE_TEXTURE_OBJECTS 197 #if (defined DIRECT_ACCESS_WILSON_INTER) || (defined FERMI_NO_DBLE_TEX) 198 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE 199 #define INTERTEX param.out 201 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE_TEX 202 #ifdef USE_TEXTURE_OBJECTS 203 #define INTERTEX param.outTex 205 #define INTERTEX interTexDouble 208 #define WRITE_SPINOR WRITE_SPINOR_DOUBLE2 209 #define SPINOR_DOUBLE 211 #if (defined DIRECT_ACCESS_WILSON_ACCUM) || (defined FERMI_NO_DBLE_TEX) 212 #define ACCUMTEX param.x 213 #define READ_ACCUM READ_ACCUM_DOUBLE 215 #ifdef USE_TEXTURE_OBJECTS 216 #define ACCUMTEX param.xTex 218 #define ACCUMTEX accumTexDouble 219 #endif // USE_TEXTURE_OBJECTS 220 #define READ_ACCUM READ_ACCUM_DOUBLE_TEX 225 #define SPINOR_HOP 12 227 #elif (DD_PREC==1) // single-precision fields 229 #define TPROJSCALE param.tProjScale_f 232 #ifdef DIRECT_ACCESS_LINK 233 #define GAUGE0TEX param.gauge0 234 #define GAUGE1TEX param.gauge1 236 #ifdef USE_TEXTURE_OBJECTS 237 #define GAUGE0TEX param.gauge0Tex 238 #define GAUGE1TEX param.gauge1Tex 240 #if (DD_RECON_F == 18) 241 #define GAUGE0TEX gauge0TexSingle2 242 #define GAUGE1TEX gauge1TexSingle2 244 #define GAUGE0TEX gauge0TexSingle4 245 #define GAUGE1TEX gauge1TexSingle4 247 #endif // USE_TEXTURE_OBJECTS 252 #ifdef DIRECT_ACCESS_WILSON_SPINOR 253 #define READ_SPINOR READ_SPINOR_SINGLE 254 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_SINGLE 255 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP 256 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN 257 #define SPINORTEX param.in 259 #define READ_SPINOR READ_SPINOR_SINGLE_TEX 260 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_SINGLE_TEX 261 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP_TEX 262 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN_TEX 263 #ifdef USE_TEXTURE_OBJECTS 264 #define SPINORTEX param.inTex 265 #define GHOSTSPINORTEX param.ghostTex 267 #define SPINORTEX spinorTexSingle 268 #define GHOSTSPINORTEX ghostSpinorTexSingle 269 #endif // USE_TEXTURE_OBJECTS 271 #ifdef DIRECT_ACCESS_WILSON_INTER 272 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE 273 #define INTERTEX param.out 275 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE_TEX 276 #ifdef USE_TEXTURE_OBJECTS 277 #define INTERTEX param.outTex 279 #define INTERTEX interTexSingle 280 #endif // USE_TEXTURE_OBJECTS 282 #define WRITE_SPINOR WRITE_SPINOR_FLOAT4 284 #ifdef DIRECT_ACCESS_WILSON_ACCUM 285 #define ACCUMTEX param.x 286 #define READ_ACCUM READ_ACCUM_SINGLE 288 #ifdef USE_TEXTURE_OBJECTS 289 #define ACCUMTEX param.xTex 291 #define ACCUMTEX accumTexSingle 292 #endif // USE_TEXTURE_OBJECTS 293 #define READ_ACCUM READ_ACCUM_SINGLE_TEX 299 #else // half-precision fields 301 #define TPROJSCALE param.tProjScale_f 304 #ifdef DIRECT_ACCESS_LINK 305 #define GAUGE0TEX param.gauge0 306 #define GAUGE1TEX param.gauge1 308 #ifdef USE_TEXTURE_OBJECTS 309 #define GAUGE0TEX param.gauge0Tex 310 #define GAUGE1TEX param.gauge1Tex 312 #if (DD_RECON_F == 18) 313 #define GAUGE0TEX gauge0TexHalf2 314 #define GAUGE1TEX gauge1TexHalf2 316 #define GAUGE0TEX gauge0TexHalf4 317 #define GAUGE1TEX gauge1TexHalf4 319 #endif // USE_TEXTURE_OBJECTS 324 #ifdef DIRECT_ACCESS_WILSON_SPINOR 325 #define READ_SPINOR READ_SPINOR_HALF 326 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_HALF 327 #define READ_SPINOR_UP READ_SPINOR_HALF_UP 328 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN 329 #define SPINORTEX param.in 331 #define READ_SPINOR READ_SPINOR_HALF_TEX 332 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_HALF_TEX 333 #define READ_SPINOR_UP READ_SPINOR_HALF_UP_TEX 334 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN_TEX 335 #ifdef USE_TEXTURE_OBJECTS 336 #define SPINORTEX param.inTex 337 #define GHOSTSPINORTEX param.ghostTex 339 #define SPINORTEX spinorTexHalf 340 #define GHOSTSPINORTEX ghostSpinorTexHalf 341 #endif // USE_TEXTURE_OBJECTS 343 #ifdef DIRECT_ACCESS_WILSON_INTER 344 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF 345 #define INTERTEX param.out 347 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF_TEX 348 #ifdef USE_TEXTURE_OBJECTS 349 #define INTERTEX param.outTex 351 #define INTERTEX interTexHalf 352 #endif // USE_TEXTURE_OBJECTS 354 #define WRITE_SPINOR WRITE_SPINOR_SHORT4 357 #ifdef DIRECT_ACCESS_WILSON_ACCUM 358 #define ACCUMTEX param.x 359 #define READ_ACCUM READ_ACCUM_HALF 361 #ifdef USE_TEXTURE_OBJECTS 362 #define ACCUMTEX param.xTex 364 #define ACCUMTEX accumTexHalf 365 #endif // USE_TEXTURE_OBJECTS 366 #define READ_ACCUM READ_ACCUM_HALF_TEX 375 #define DD_CONCAT(n,p,r,d,x) n ## p ## r ## d ## x ## Kernel 376 #define DD_FUNC(n,p,r,d,x) DD_CONCAT(n,p,r,d,x) 380 template <KernelType kernel_type>
383 #ifdef GPU_TWISTED_MASS_DIRAC 385 #ifdef SHARED_WILSON_DSLASH // Fermi optimal code 393 #else // no shared memory blocking 410 #ifdef GPU_TWISTED_MASS_DIRAC 412 #ifdef SHARED_WILSON_DSLASH // Fermi optimal code 420 #else // no shared memory blocking 437 #if (DD_XPAY==1) && (DD_TWIST==1) 442 #define DD_NAME_F twistedMassDslashTwist 444 template <KernelType kernel_type>
447 #ifdef GPU_TWISTED_MASS_DIRAC 449 #ifdef SHARED_WILSON_DSLASH // Fermi optimal code 457 #else // no shared memory blocking 475 #ifdef GPU_TWISTED_MASS_DIRAC 477 #ifdef SHARED_WILSON_DSLASH // Fermi optimal code 485 #else // no shared memory blocking 500 #endif //(DD_XPAY==0) && (DD_TWIST==1) 504 #if (DD_XPAY==0) && (DD_TWIST==1) 509 #define DD_NAME_F twistedMassDslashTwist 511 template <KernelType kernel_type>
514 #ifdef GPU_TWISTED_MASS_DIRAC 520 #endif //(DD_XPAY==0) && (DD_TWIST==1) 538 #undef TWIST_INV_DSLASH 539 #undef READ_GAUGE_MATRIX 541 #undef RECONSTRUCT_GAUGE_MATRIX 545 #undef READ_SPINOR_GHOST 546 #undef READ_SPINOR_UP 547 #undef READ_SPINOR_DOWN 549 #undef GHOSTSPINORTEX 550 #undef READ_INTERMEDIATE_SPINOR
#define DD_FUNC(n, p, r, d, x)