40 #define DD_NAME_F MDWFDslash4 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 71 #if (DD_RECON==0) // reconstruct from 8 reals 75 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_DOUBLE 76 #ifdef DIRECT_ACCESS_LINK 77 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_DOUBLE2 79 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_DOUBLE2_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_FLOAT4 87 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_FLOAT4_TEX 88 #endif // DIRECT_ACCESS_LINK 91 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_8_SINGLE 92 #ifdef DIRECT_ACCESS_LINK 93 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_SHORT4 95 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_8_SHORT4_TEX 96 #endif // DIRECT_ACCESS_LINK 98 #elif (DD_RECON==1) // reconstruct from 12 reals 102 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_DOUBLE 103 #ifdef DIRECT_ACCESS_LINK 104 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_DOUBLE2 106 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_DOUBLE2_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_FLOAT4 114 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_FLOAT4_TEX 115 #endif // DIRECT_ACCESS_LINK 118 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_12_SINGLE 119 #ifdef DIRECT_ACCESS_LINK 120 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_SHORT4 122 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_12_SHORT4_TEX 123 #endif // DIRECT_ACCESS_LINK 125 #else // no reconstruct, load all components 126 #define DD_RECON_F 18 129 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_DOUBLE 130 #ifdef DIRECT_ACCESS_LINK 131 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_DOUBLE2 133 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_DOUBLE2_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_FLOAT2 141 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_FLOAT2_TEX 142 #endif // DIRECT_ACCESS_LINK 145 #define RECONSTRUCT_GAUGE_MATRIX RECONSTRUCT_MATRIX_18_SINGLE 146 #ifdef DIRECT_ACCESS_LINK 147 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_SHORT2 149 #define ASSN_GAUGE_MATRIX ASSN_GAUGE_MATRIX_18_SHORT2_TEX 150 #endif //DIRECT_ACCESS_LINK 154 #if (DD_PREC==0) // double-precision fields 156 #define TPROJSCALE param.tProjScale 159 #if (defined DIRECT_ACCESS_LINK) || (defined FERMI_NO_DBLE_TEX) 160 #define GAUGE0TEX param.gauge0 161 #define GAUGE1TEX param.gauge1 163 #ifdef USE_TEXTURE_OBJECTS 164 #define GAUGE0TEX param.gauge0Tex 165 #define GAUGE1TEX param.gauge1Tex 167 #define GAUGE0TEX gauge0TexDouble2 168 #define GAUGE1TEX gauge1TexDouble2 169 #endif // USE_TEXTURE_OBJECTS 175 #if (defined DIRECT_ACCESS_WILSON_SPINOR) || (defined FERMI_NO_DBLE_TEX) 176 #define READ_SPINOR READ_SPINOR_DOUBLE 177 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_DOUBLE 178 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP 179 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN 180 #define SPINORTEX param.in 181 #define GHOSTSPINORTEX param.ghost 183 #define READ_SPINOR READ_SPINOR_DOUBLE_TEX 184 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_DOUBLE_TEX 185 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP_TEX 186 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN_TEX 187 #ifdef USE_TEXTURE_OBJECTS 188 #define SPINORTEX param.inTex 189 #define GHOSTSPINORTEX param.ghostTex 191 #define SPINORTEX spinorTexDouble 192 #define GHOSTSPINORTEX ghostSpinorTexDouble 193 #endif // USE_TEXTURE_OBJECTS 195 #if (defined DIRECT_ACCESS_WILSON_INTER) || (defined FERMI_NO_DBLE_TEX) 196 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE 197 #define INTERTEX param.out 199 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE_TEX 200 #ifdef USE_TEXTURE_OBJECTS 201 #define INTERTEX param.outTex 203 #define INTERTEX interTexDouble 206 #define WRITE_SPINOR WRITE_SPINOR_DOUBLE2 207 #define SPINOR_DOUBLE 209 #if (defined DIRECT_ACCESS_WILSON_ACCUM) || (defined FERMI_NO_DBLE_TEX) 210 #define ACCUMTEX param.x 211 #define READ_ACCUM READ_ACCUM_DOUBLE 213 #ifdef USE_TEXTURE_OBJECTS 214 #define ACCUMTEX param.xTex 216 #define ACCUMTEX accumTexDouble 217 #endif // USE_TEXTURE_OBJECTS 218 #define READ_ACCUM READ_ACCUM_DOUBLE_TEX 223 #define SPINOR_HOP 12 225 #elif (DD_PREC==1) // single-precision fields 227 #define TPROJSCALE param.tProjScale_f 230 #ifdef DIRECT_ACCESS_LINK 231 #define GAUGE0TEX param.gauge0 232 #define GAUGE1TEX param.gauge1 234 #ifdef USE_TEXTURE_OBJECTS 235 #define GAUGE0TEX param.gauge0Tex 236 #define GAUGE1TEX param.gauge1Tex 238 #if (DD_RECON_F == 18) 239 #define GAUGE0TEX gauge0TexSingle2 240 #define GAUGE1TEX gauge1TexSingle2 242 #define GAUGE0TEX gauge0TexSingle4 243 #define GAUGE1TEX gauge1TexSingle4 245 #endif // USE_TEXTURE_OBJECTS 250 #ifdef DIRECT_ACCESS_WILSON_SPINOR 251 #define READ_SPINOR READ_SPINOR_SINGLE 252 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_SINGLE 253 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP 254 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN 255 #define SPINORTEX param.in 256 #define GHOSTSPINORTEX param.ghost 258 #define READ_SPINOR READ_SPINOR_SINGLE_TEX 259 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_SINGLE_TEX 260 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP_TEX 261 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN_TEX 262 #ifdef USE_TEXTURE_OBJECTS 263 #define SPINORTEX param.inTex 264 #define GHOSTSPINORTEX param.ghostTex 266 #define SPINORTEX spinorTexSingle 267 #define GHOSTSPINORTEX ghostSpinorTexSingle 268 #endif // USE_TEXTURE_OBJECTS 270 #ifdef DIRECT_ACCESS_WILSON_INTER 271 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE 272 #define INTERTEX param.out 274 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE_TEX 275 #ifdef USE_TEXTURE_OBJECTS 276 #define INTERTEX param.outTex 278 #define INTERTEX interTexSingle 279 #endif // USE_TEXTURE_OBJECTS 281 #define WRITE_SPINOR WRITE_SPINOR_FLOAT4 283 #ifdef DIRECT_ACCESS_WILSON_ACCUM 284 #define ACCUMTEX param.x 285 #define READ_ACCUM READ_ACCUM_SINGLE 287 #ifdef USE_TEXTURE_OBJECTS 288 #define ACCUMTEX param.xTex 290 #define ACCUMTEX accumTexSingle 291 #endif // USE_TEXTURE_OBJECTS 292 #define READ_ACCUM READ_ACCUM_SINGLE_TEX 298 #else // half-precision fields 300 #define TPROJSCALE param.tProjScale_f 303 #ifdef DIRECT_ACCESS_LINK 304 #define GAUGE0TEX param.gauge0 305 #define GAUGE1TEX param.gauge1 307 #ifdef USE_TEXTURE_OBJECTS 308 #define GAUGE0TEX param.gauge0Tex 309 #define GAUGE1TEX param.gauge1Tex 311 #if (DD_RECON_F == 18) 312 #define GAUGE0TEX gauge0TexHalf2 313 #define GAUGE1TEX gauge1TexHalf2 315 #define GAUGE0TEX gauge0TexHalf4 316 #define GAUGE1TEX gauge1TexHalf4 318 #endif // USE_TEXTURE_OBJECTS 323 #ifdef DIRECT_ACCESS_WILSON_SPINOR 324 #define READ_SPINOR READ_SPINOR_HALF 325 #define READ_SPINOR_GHOST READ_SPINOR_GHOST_HALF 326 #define READ_SPINOR_UP READ_SPINOR_HALF_UP 327 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN 328 #define SPINORTEX param.in 329 #define GHOSTSPINORTEX param.ghost 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 356 #ifdef DIRECT_ACCESS_WILSON_ACCUM 357 #define ACCUMTEX param.x 358 #define READ_ACCUM READ_ACCUM_HALF 360 #ifdef USE_TEXTURE_OBJECTS 361 #define ACCUMTEX param.xTex 363 #define ACCUMTEX accumTexHalf 364 #endif // USE_TEXTURE_OBJECTS 365 #define READ_ACCUM READ_ACCUM_HALF_TEX 374 #define DD_CONCAT(n,p,r,d,x) n ## p ## r ## d ## x ## Kernel 375 #define DD_FUNC(n,p,r,d,x) DD_CONCAT(n,p,r,d,x) 379 template <KernelType kernel_type>
383 #ifdef GPU_DOMAIN_WALL_DIRAC 400 #ifdef GPU_DOMAIN_WALL_DIRAC 424 #undef ASSN_GAUGE_MATRIX 425 #undef RECONSTRUCT_GAUGE_MATRIX 429 #undef READ_SPINOR_GHOST 430 #undef READ_SPINOR_UP 431 #undef READ_SPINOR_DOWN 433 #undef GHOSTSPINORTEX 434 #undef READ_INTERMEDIATE_SPINOR
#define DD_FUNC(n, p, r, d, x)