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 twistedCloverInvDslash 68 #define CLOVER_TWIST_INV_DSLASH 70 #define DD_NAME_F twistedCloverDslash 75 #if (defined DIRECT_ACCESS_CLOVER) || (defined FERMI_NO_DBLE_TEX) 76 #define TMCLOVERTEX (param.clover) 77 #ifndef DYNAMIC_CLOVER 78 #define TM_INV_CLOVERTEX (param.cloverInv) 80 #define READ_CLOVER READ_CLOVER_DOUBLE_STR 81 #define ASSN_CLOVER ASSN_CLOVER_DOUBLE_STR 83 #ifdef USE_TEXTURE_OBJECTS 84 #define TMCLOVERTEX (param.cloverTex) 85 #ifndef DYNAMIC_CLOVER 86 #define TM_INV_CLOVERTEX (param.cloverInvTex) 89 #define TMCLOVERTEX cloverTexDouble 90 #ifndef DYNAMIC_CLOVER 91 #define TM_INV_CLOVERTEX cloverInvTexDouble 94 #define READ_CLOVER READ_CLOVER_DOUBLE_TEX 95 #define ASSN_CLOVER ASSN_CLOVER_DOUBLE_TEX 99 #ifdef DIRECT_ACCESS_CLOVER 100 #define TMCLOVERTEX (param.clover) 101 #ifndef DYNAMIC_CLOVER 102 #define TM_INV_CLOVERTEX (param.cloverInv) 104 #define READ_CLOVER READ_CLOVER_SINGLE 105 #define ASSN_CLOVER ASSN_CLOVER_SINGLE 107 #ifdef USE_TEXTURE_OBJECTS 108 #define TMCLOVERTEX (param.cloverTex) 109 #ifndef DYNAMIC_CLOVER 110 #define TM_INV_CLOVERTEX (param.cloverInvTex) 113 #define TMCLOVERTEX cloverTexSingle 114 #ifndef DYNAMIC_CLOVER 115 #define TM_INV_CLOVERTEX cloverInvTexSingle 118 #define READ_CLOVER READ_CLOVER_SINGLE_TEX 119 #define ASSN_CLOVER ASSN_CLOVER_SINGLE_TEX 121 #else // half-precision fields 122 #ifdef DIRECT_ACCESS_CLOVER 123 #define TMCLOVERTEX param.clover 124 #ifndef DYNAMIC_CLOVER 125 #define TM_INV_CLOVERTEX param.cloverInv 127 #define READ_CLOVER READ_CLOVER_HALF 128 #define ASSN_CLOVER ASSN_CLOVER_HALF 130 #ifdef USE_TEXTURE_OBJECTS 131 #define TMCLOVERTEX (param.cloverTex) 132 #define TMCLOVERTEXNORM (param.cloverNormTex) 133 #ifndef DYNAMIC_CLOVER 134 #define TM_INV_CLOVERTEX (param.cloverInvTex) 135 #define TM_INV_CLOVERTEXNORM (param.cloverInvNormTex) 138 #define TMCLOVERTEX cloverTexHalf 139 #define TMCLOVERTEXNORM cloverTexNorm 140 #ifndef DYNAMIC_CLOVER 141 #define TM_INV_CLOVERTEX cloverInvTexHalf 142 #define TM_INV_CLOVERTEXNORM cloverInvTexNorm 145 #define READ_CLOVER READ_CLOVER_HALF_TEX 146 #define ASSN_CLOVER ASSN_CLOVER_HALF_TEX 149 #endif //End clover defs 152 #if (DD_RECON==0) // reconstruct from 8 reals 156 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_DOUBLE 157 #ifdef DIRECT_ACCESS_LINK 158 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_DOUBLE2 160 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_DOUBLE2_TEX 161 #endif // DIRECT_ACCESS_LINK 164 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_SINGLE 165 #ifdef DIRECT_ACCESS_LINK 166 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_FLOAT4 168 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_FLOAT4_TEX 169 #endif // DIRECT_ACCESS_LINK 172 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_SINGLE 173 #ifdef DIRECT_ACCESS_LINK 174 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_SHORT4 176 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_8_SHORT4_TEX 177 #endif // DIRECT_ACCESS_LINK 179 #elif (DD_RECON==1) // reconstruct from 12 reals 180 #define DD_RECON_F 12 183 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_DOUBLE 184 #ifdef DIRECT_ACCESS_LINK 185 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_DOUBLE2 187 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_DOUBLE2_TEX 188 #endif // DIRECT_ACCESS_LINK 191 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_SINGLE 192 #ifdef DIRECT_ACCESS_LINK 193 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_FLOAT4 195 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_FLOAT4_TEX 196 #endif // DIRECT_ACCESS_LINK 199 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_SINGLE 200 #ifdef DIRECT_ACCESS_LINK 201 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_SHORT4 203 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_12_SHORT4_TEX 204 #endif // DIRECT_ACCESS_LINK 206 #else // no reconstruct, load all components 207 #define DD_RECON_F 18 210 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_DOUBLE 211 #ifdef DIRECT_ACCESS_LINK 212 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_DOUBLE2 214 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_DOUBLE2_TEX 215 #endif // DIRECT_ACCESS_LINK 218 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_SINGLE 219 #ifdef DIRECT_ACCESS_LINK 220 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_FLOAT2 222 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_FLOAT2_TEX 223 #endif // DIRECT_ACCESS_LINK 226 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_SINGLE 227 #ifdef DIRECT_ACCESS_LINK 228 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_SHORT2 230 #define READ_GAUGE_MATRIX READ_GAUGE_MATRIX_18_SHORT2_TEX 231 #endif //DIRECT_ACCESS_LINK 235 #if (DD_PREC==0) // double-precision fields 237 #define TPROJSCALE param.tProjScale 240 #if (defined DIRECT_ACCESS_LINK) || (defined FERMI_NO_DBLE_TEX) 241 #define GAUGE0TEX param.gauge0 242 #define GAUGE1TEX param.gauge1 244 #ifdef USE_TEXTURE_OBJECTS 245 #define GAUGE0TEX param.gauge0Tex 246 #define GAUGE1TEX param.gauge1Tex 248 #define GAUGE0TEX gauge0TexDouble2 249 #define GAUGE1TEX gauge1TexDouble2 250 #endif // USE_TEXTURE_OBJECTS 256 #if (defined DIRECT_ACCESS_WILSON_SPINOR) || (defined FERMI_NO_DBLE_TEX) 257 #define READ_SPINOR READ_SPINOR_DOUBLE 258 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_DOUBLE 259 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP 260 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN 261 #define SPINORTEX param.in 263 #define READ_SPINOR READ_SPINOR_DOUBLE_TEX 264 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_DOUBLE_TEX 265 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP_TEX 266 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN_TEX 267 #ifdef USE_TEXTURE_OBJECTS 268 #define SPINORTEX param.inTex 269 #define GHOSTSPINORTEX param.ghostTex 271 #define SPINORTEX spinorTexDouble 272 #define GHOSTSPINORTEX ghostSpinorTexDouble 273 #endif // USE_TEXTURE_OBJECTS 275 #if (defined DIRECT_ACCESS_WILSON_INTER) || (defined FERMI_NO_DBLE_TEX) 276 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE 277 #define INTERTEX param.out 279 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE_TEX 280 #ifdef USE_TEXTURE_OBJECTS 281 #define INTERTEX param.outTex 283 #define INTERTEX interTexDouble 286 #define WRITE_SPINOR WRITE_SPINOR_DOUBLE2 287 #define SPINOR_DOUBLE 289 #if (defined DIRECT_ACCESS_WILSON_ACCUM) || (defined FERMI_NO_DBLE_TEX) 290 #define ACCUMTEX param.x 291 #define READ_ACCUM READ_ACCUM_DOUBLE 293 #ifdef USE_TEXTURE_OBJECTS 294 #define ACCUMTEX param.xTex 296 #define ACCUMTEX accumTexDouble 297 #endif // USE_TEXTURE_OBJECTS 298 #define READ_ACCUM READ_ACCUM_DOUBLE_TEX 303 #define SPINOR_HOP 12 305 #elif (DD_PREC==1) // single-precision fields 307 #define TPROJSCALE param.tProjScale_f 310 #ifdef DIRECT_ACCESS_LINK 311 #define GAUGE0TEX param.gauge0 312 #define GAUGE1TEX param.gauge1 314 #ifdef USE_TEXTURE_OBJECTS 315 #define GAUGE0TEX param.gauge0Tex 316 #define GAUGE1TEX param.gauge1Tex 318 #if (DD_RECON_F == 18) 319 #define GAUGE0TEX gauge0TexSingle2 320 #define GAUGE1TEX gauge1TexSingle2 322 #define GAUGE0TEX gauge0TexSingle4 323 #define GAUGE1TEX gauge1TexSingle4 325 #endif // USE_TEXTURE_OBJECTS 330 #ifdef DIRECT_ACCESS_WILSON_SPINOR 331 #define READ_SPINOR READ_SPINOR_SINGLE 332 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_SINGLE 333 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP 334 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN 335 #define SPINORTEX param.in 337 #define READ_SPINOR READ_SPINOR_SINGLE_TEX 338 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_SINGLE_TEX 339 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP_TEX 340 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN_TEX 341 #ifdef USE_TEXTURE_OBJECTS 342 #define SPINORTEX param.inTex 343 #define GHOSTSPINORTEX param.ghostTex 345 #define SPINORTEX spinorTexSingle 346 #define GHOSTSPINORTEX ghostSpinorTexSingle 347 #endif // USE_TEXTURE_OBJECTS 349 #ifdef DIRECT_ACCESS_WILSON_INTER 350 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE 351 #define INTERTEX param.out 353 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE_TEX 354 #ifdef USE_TEXTURE_OBJECTS 355 #define INTERTEX param.outTex 357 #define INTERTEX interTexSingle 358 #endif // USE_TEXTURE_OBJECTS 360 #define WRITE_SPINOR WRITE_SPINOR_FLOAT4 362 #ifdef DIRECT_ACCESS_WILSON_ACCUM 363 #define ACCUMTEX param.x 364 #define READ_ACCUM READ_ACCUM_SINGLE 366 #ifdef USE_TEXTURE_OBJECTS 367 #define ACCUMTEX param.xTex 369 #define ACCUMTEX accumTexSingle 370 #endif // USE_TEXTURE_OBJECTS 371 #define READ_ACCUM READ_ACCUM_SINGLE_TEX 377 #else // half-precision fields 379 #define TPROJSCALE param.tProjScale_f 382 #ifdef DIRECT_ACCESS_LINK 383 #define GAUGE0TEX param.gauge0 384 #define GAUGE1TEX param.gauge1 386 #ifdef USE_TEXTURE_OBJECTS 387 #define GAUGE0TEX param.gauge0Tex 388 #define GAUGE1TEX param.gauge1Tex 390 #if (DD_RECON_F == 18) 391 #define GAUGE0TEX gauge0TexHalf2 392 #define GAUGE1TEX gauge1TexHalf2 394 #define GAUGE0TEX gauge0TexHalf4 395 #define GAUGE1TEX gauge1TexHalf4 397 #endif // USE_TEXTURE_OBJECTS 402 #ifdef DIRECT_ACCESS_WILSON_SPINOR 403 #define READ_SPINOR READ_SPINOR_HALF 404 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_HALF 405 #define READ_SPINOR_UP READ_SPINOR_HALF_UP 406 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN 407 #define SPINORTEX param.in 409 #define READ_SPINOR READ_SPINOR_HALF_TEX 410 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_HALF_TEX 411 #define READ_SPINOR_UP READ_SPINOR_HALF_UP_TEX 412 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN_TEX 413 #ifdef USE_TEXTURE_OBJECTS 414 #define SPINORTEX param.inTex 415 #define GHOSTSPINORTEX param.ghostTex 417 #define SPINORTEX spinorTexHalf 418 #define GHOSTSPINORTEX ghostSpinorTexHalf 419 #endif // USE_TEXTURE_OBJECTS 421 #ifdef DIRECT_ACCESS_WILSON_INTER 422 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF 423 #define INTERTEX param.out 425 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF_TEX 426 #ifdef USE_TEXTURE_OBJECTS 427 #define INTERTEX param.outTex 429 #define INTERTEX interTexHalf 430 #endif // USE_TEXTURE_OBJECTS 432 #define WRITE_SPINOR WRITE_SPINOR_SHORT4 435 #ifdef DIRECT_ACCESS_WILSON_ACCUM 436 #define ACCUMTEX param.x 437 #define READ_ACCUM READ_ACCUM_HALF 439 #ifdef USE_TEXTURE_OBJECTS 440 #define ACCUMTEX param.xTex 442 #define ACCUMTEX accumTexHalf 443 #endif // USE_TEXTURE_OBJECTS 444 #define READ_ACCUM READ_ACCUM_HALF_TEX 453 #define DD_CONCAT(n,p,r,d,x) n ## p ## r ## d ## x ## Kernel 454 #define DD_FUNC(n,p,r,d,x) DD_CONCAT(n,p,r,d,x) 457 template <KernelType kernel_type>
460 #ifdef GPU_TWISTED_CLOVER_DIRAC 462 #ifdef SHARED_WILSON_DSLASH // Fermi optimal code 470 #else // no shared memory blocking 487 #ifdef GPU_TWISTED_CLOVER_DIRAC 489 #ifdef SHARED_WILSON_DSLASH // Fermi optimal code 497 #else // no shared memory blocking 514 #if (DD_XPAY==1) && (DD_TWIST==1) 515 #define CLOVER_TWIST_XPAY 519 #define DD_NAME_F twistedCloverDslashTwist 521 template <KernelType kernel_type>
524 #ifdef GPU_TWISTED_CLOVER_DIRAC 526 #ifdef SHARED_WILSON_DSLASH // Fermi optimal code 534 #else // no shared memory blocking 553 #ifdef GPU_TWISTED_CLOVER_DIRAC 555 #ifdef SHARED_WILSON_DSLASH // Fermi optimal code 563 #else // no shared memory blocking 578 #undef CLOVER_TWIST_XPAY 579 #endif //(DD_XPAY==0) && (DD_TWIST==1) 583 #if (DD_XPAY==0) && (DD_TWIST==1) 584 #define CLOVER_TWIST_XPAY 588 #define DD_NAME_F twistedCloverDslashTwist 590 template <KernelType kernel_type>
594 #ifdef GPU_TWISTED_CLOVER_DIRAC 599 #undef CLOVER_TWIST_XPAY 600 #endif //(DD_XPAY==0) && (DD_TWIST==1) 618 #undef CLOVER_TWIST_INV_DSLASH 619 #undef READ_GAUGE_MATRIX 621 #undef RECONSTRUCT_GAUGE_MATRIX 625 #undef READ_SPINOR_GHOST 626 #undef READ_SPINOR_UP 627 #undef READ_SPINOR_DOWN 629 #undef GHOSTSPINORTEX 630 #undef READ_INTERMEDIATE_SPINOR 641 #undef TMCLOVERTEXNORM 642 #ifndef DYNAMIC_CLOVER 643 #undef TM_INV_CLOVERTEX 644 #undef TM_INV_CLOVERTEXNORM
#define DD_FUNC(n, p, r, d, x)