40 #define DD_NAME_F MDWFDslash5inv 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_UP READ_SPINOR_DOUBLE_UP 170 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN 171 #define SPINORTEX param.in 172 #define GHOSTSPINORTEX param.ghost 174 #define READ_SPINOR READ_SPINOR_DOUBLE_TEX 175 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP_TEX 176 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN_TEX 177 #ifdef USE_TEXTURE_OBJECTS 178 #define SPINORTEX param.inTex 180 #define SPINORTEX spinorTexDouble 181 #endif // USE_TEXTURE_OBJECTS 183 #if (defined DIRECT_ACCESS_WILSON_INTER) || (defined FERMI_NO_DBLE_TEX) 184 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE 185 #define INTERTEX param.out 187 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE_TEX 188 #ifdef USE_TEXTURE_OBJECTS 189 #define INTERTEX param.outTex 191 #define INTERTEX interTexDouble 194 #define WRITE_SPINOR WRITE_SPINOR_DOUBLE2 195 #define SPINOR_DOUBLE 197 #if (defined DIRECT_ACCESS_WILSON_ACCUM) || (defined FERMI_NO_DBLE_TEX) 198 #define ACCUMTEX param.x 199 #define READ_ACCUM READ_ACCUM_DOUBLE 201 #ifdef USE_TEXTURE_OBJECTS 202 #define ACCUMTEX param.xTex 204 #define ACCUMTEX accumTexDouble 205 #endif // USE_TEXTURE_OBJECTS 206 #define READ_ACCUM READ_ACCUM_DOUBLE_TEX 211 #define SPINOR_HOP 12 213 #elif (DD_PREC==1) // single-precision fields 215 #define TPROJSCALE param.tProjScale_f 218 #ifdef DIRECT_ACCESS_LINK 219 #define GAUGE0TEX param.gauge0 220 #define GAUGE1TEX param.gauge1 222 #ifdef USE_TEXTURE_OBJECTS 223 #define GAUGE0TEX param.gauge0Tex 224 #define GAUGE1TEX param.gauge1Tex 226 #if (DD_RECON_F == 18) 227 #define GAUGE0TEX gauge0TexSingle2 228 #define GAUGE1TEX gauge1TexSingle2 230 #define GAUGE0TEX gauge0TexSingle4 231 #define GAUGE1TEX gauge1TexSingle4 233 #endif // USE_TEXTURE_OBJECTS 238 #ifdef DIRECT_ACCESS_WILSON_SPINOR 239 #define READ_SPINOR READ_SPINOR_SINGLE 240 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP 241 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN 242 #define SPINORTEX param.in 243 #define GHOSTSPINORTEX param.ghost 245 #define READ_SPINOR READ_SPINOR_SINGLE_TEX 246 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP_TEX 247 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN_TEX 248 #ifdef USE_TEXTURE_OBJECTS 249 #define SPINORTEX param.inTex 251 #define SPINORTEX spinorTexSingle 252 #endif // USE_TEXTURE_OBJECTS 254 #ifdef DIRECT_ACCESS_WILSON_INTER 255 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE 256 #define INTERTEX param.out 258 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE_TEX 259 #ifdef USE_TEXTURE_OBJECTS 260 #define INTERTEX param.outTex 262 #define INTERTEX interTexSingle 263 #endif // USE_TEXTURE_OBJECTS 265 #define WRITE_SPINOR WRITE_SPINOR_FLOAT4 267 #ifdef DIRECT_ACCESS_WILSON_ACCUM 268 #define ACCUMTEX param.x 269 #define READ_ACCUM READ_ACCUM_SINGLE 271 #ifdef USE_TEXTURE_OBJECTS 272 #define ACCUMTEX param.xTex 274 #define ACCUMTEX accumTexSingle 275 #endif // USE_TEXTURE_OBJECTS 276 #define READ_ACCUM READ_ACCUM_SINGLE_TEX 282 #else // half-precision fields 284 #define TPROJSCALE param.tProjScale_f 287 #ifdef DIRECT_ACCESS_LINK 288 #define GAUGE0TEX param.gauge0 289 #define GAUGE1TEX param.gauge1 291 #ifdef USE_TEXTURE_OBJECTS 292 #define GAUGE0TEX param.gauge0Tex 293 #define GAUGE1TEX param.gauge1Tex 295 #if (DD_RECON_F == 18) 296 #define GAUGE0TEX gauge0TexHalf2 297 #define GAUGE1TEX gauge1TexHalf2 299 #define GAUGE0TEX gauge0TexHalf4 300 #define GAUGE1TEX gauge1TexHalf4 302 #endif // USE_TEXTURE_OBJECTS 307 #ifdef DIRECT_ACCESS_WILSON_SPINOR 308 #define READ_SPINOR READ_SPINOR_HALF 309 #define READ_SPINOR_UP READ_SPINOR_HALF_UP 310 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN 311 #define SPINORTEX param.in 312 #define GHOSTSPINORTEX param.ghost 314 #define READ_SPINOR READ_SPINOR_HALF_TEX 315 #define READ_SPINOR_UP READ_SPINOR_HALF_UP_TEX 316 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN_TEX 317 #ifdef USE_TEXTURE_OBJECTS 318 #define SPINORTEX param.inTex 320 #define SPINORTEX spinorTexHalf 321 #endif // USE_TEXTURE_OBJECTS 323 #ifdef DIRECT_ACCESS_WILSON_INTER 324 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF 325 #define INTERTEX param.out 327 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF_TEX 328 #ifdef USE_TEXTURE_OBJECTS 329 #define INTERTEX param.outTex 331 #define INTERTEX interTexHalf 332 #endif // USE_TEXTURE_OBJECTS 334 #define WRITE_SPINOR WRITE_SPINOR_SHORT4 336 #ifdef DIRECT_ACCESS_WILSON_ACCUM 337 #define ACCUMTEX param.x 338 #define READ_ACCUM READ_ACCUM_HALF 340 #ifdef USE_TEXTURE_OBJECTS 341 #define ACCUMTEX param.xTex 343 #define ACCUMTEX accumTexHalf 344 #endif // USE_TEXTURE_OBJECTS 345 #define READ_ACCUM READ_ACCUM_HALF_TEX 354 #define DD_CONCAT(n,p,r,d,x) n ## p ## r ## d ## x ## Kernel 355 #define DD_FUNC(n,p,r,d,x) DD_CONCAT(n,p,r,d,x) 359 template <KernelType kernel_type>
363 #ifdef GPU_DOMAIN_WALL_DIRAC 386 #undef ASSN_GAUGE_MATRIX 387 #undef RECONSTRUCT_GAUGE_MATRIX 391 #undef READ_SPINOR_UP 392 #undef READ_SPINOR_DOWN 394 #undef READ_INTERMEDIATE_SPINOR
#define DD_FUNC(n, p, r, d, x)