40 #define DD_NAME_F domainWallDslash5inv 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 173 #define READ_SPINOR READ_SPINOR_DOUBLE_TEX 174 #define READ_SPINOR_UP READ_SPINOR_DOUBLE_UP_TEX 175 #define READ_SPINOR_DOWN READ_SPINOR_DOUBLE_DOWN_TEX 176 #ifdef USE_TEXTURE_OBJECTS 177 #define SPINORTEX param.inTex 179 #define SPINORTEX spinorTexDouble 180 #endif // USE_TEXTURE_OBJECTS 182 #if (defined DIRECT_ACCESS_WILSON_INTER) || (defined FERMI_NO_DBLE_TEX) 183 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE 184 #define INTERTEX param.out 186 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_DOUBLE_TEX 187 #ifdef USE_TEXTURE_OBJECTS 188 #define INTERTEX param.outTex 190 #define INTERTEX interTexDouble 193 #define WRITE_SPINOR WRITE_SPINOR_DOUBLE2 194 #define SPINOR_DOUBLE 196 #if (defined DIRECT_ACCESS_WILSON_ACCUM) || (defined FERMI_NO_DBLE_TEX) 197 #define ACCUMTEX param.x 198 #define READ_ACCUM READ_ACCUM_DOUBLE 200 #ifdef USE_TEXTURE_OBJECTS 201 #define ACCUMTEX param.xTex 203 #define ACCUMTEX accumTexDouble 204 #endif // USE_TEXTURE_OBJECTS 205 #define READ_ACCUM READ_ACCUM_DOUBLE_TEX 210 #define SPINOR_HOP 12 212 #elif (DD_PREC==1) // single-precision fields 214 #define TPROJSCALE param.tProjScale_f 217 #ifdef DIRECT_ACCESS_LINK 218 #define GAUGE0TEX param.gauge0 219 #define GAUGE1TEX param.gauge1 221 #ifdef USE_TEXTURE_OBJECTS 222 #define GAUGE0TEX param.gauge0Tex 223 #define GAUGE1TEX param.gauge1Tex 225 #if (DD_RECON_F == 18) 226 #define GAUGE0TEX gauge0TexSingle2 227 #define GAUGE1TEX gauge1TexSingle2 229 #define GAUGE0TEX gauge0TexSingle4 230 #define GAUGE1TEX gauge1TexSingle4 232 #endif // USE_TEXTURE_OBJECTS 237 #ifdef DIRECT_ACCESS_WILSON_SPINOR 238 #define READ_SPINOR READ_SPINOR_SINGLE 239 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP 240 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN 241 #define SPINORTEX param.in 243 #define READ_SPINOR READ_SPINOR_SINGLE_TEX 244 #define READ_SPINOR_UP READ_SPINOR_SINGLE_UP_TEX 245 #define READ_SPINOR_DOWN READ_SPINOR_SINGLE_DOWN_TEX 246 #ifdef USE_TEXTURE_OBJECTS 247 #define SPINORTEX param.inTex 249 #define SPINORTEX spinorTexSingle 250 #endif // USE_TEXTURE_OBJECTS 252 #ifdef DIRECT_ACCESS_WILSON_INTER 253 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE 254 #define INTERTEX param.out 256 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_SINGLE_TEX 257 #ifdef USE_TEXTURE_OBJECTS 258 #define INTERTEX param.outTex 260 #define INTERTEX interTexSingle 261 #endif // USE_TEXTURE_OBJECTS 263 #define WRITE_SPINOR WRITE_SPINOR_FLOAT4 265 #ifdef DIRECT_ACCESS_WILSON_ACCUM 266 #define ACCUMTEX param.x 267 #define READ_ACCUM READ_ACCUM_SINGLE 269 #ifdef USE_TEXTURE_OBJECTS 270 #define ACCUMTEX param.xTex 272 #define ACCUMTEX accumTexSingle 273 #endif // USE_TEXTURE_OBJECTS 274 #define READ_ACCUM READ_ACCUM_SINGLE_TEX 280 #else // half-precision fields 282 #define TPROJSCALE param.tProjScale_f 285 #ifdef DIRECT_ACCESS_LINK 286 #define GAUGE0TEX param.gauge0 287 #define GAUGE1TEX param.gauge1 289 #ifdef USE_TEXTURE_OBJECTS 290 #define GAUGE0TEX param.gauge0Tex 291 #define GAUGE1TEX param.gauge1Tex 293 #if (DD_RECON_F == 18) 294 #define GAUGE0TEX gauge0TexHalf2 295 #define GAUGE1TEX gauge1TexHalf2 297 #define GAUGE0TEX gauge0TexHalf4 298 #define GAUGE1TEX gauge1TexHalf4 300 #endif // USE_TEXTURE_OBJECTS 305 #ifdef DIRECT_ACCESS_WILSON_SPINOR 306 #define READ_SPINOR READ_SPINOR_HALF 307 #define READ_SPINOR_UP READ_SPINOR_HALF_UP 308 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN 309 #define SPINORTEX param.in 311 #define READ_SPINOR READ_SPINOR_HALF_TEX 312 #define READ_SPINOR_UP READ_SPINOR_HALF_UP_TEX 313 #define READ_SPINOR_DOWN READ_SPINOR_HALF_DOWN_TEX 314 #ifdef USE_TEXTURE_OBJECTS 315 #define SPINORTEX param.inTex 317 #define SPINORTEX spinorTexHalf 318 #endif // USE_TEXTURE_OBJECTS 320 #ifdef DIRECT_ACCESS_WILSON_INTER 321 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF 322 #define INTERTEX param.out 324 #define READ_INTERMEDIATE_SPINOR READ_SPINOR_HALF_TEX 325 #ifdef USE_TEXTURE_OBJECTS 326 #define INTERTEX param.outTex 328 #define INTERTEX interTexHalf 329 #endif // USE_TEXTURE_OBJECTS 331 #define WRITE_SPINOR WRITE_SPINOR_SHORT4 333 #ifdef DIRECT_ACCESS_WILSON_ACCUM 334 #define ACCUMTEX param.x 335 #define READ_ACCUM READ_ACCUM_HALF 337 #ifdef USE_TEXTURE_OBJECTS 338 #define ACCUMTEX param.xTex 340 #define ACCUMTEX accumTexHalf 341 #endif // USE_TEXTURE_OBJECTS 342 #define READ_ACCUM READ_ACCUM_HALF_TEX 351 #define DD_CONCAT(n,p,r,d,x) n ## p ## r ## d ## x ## Kernel 352 #define DD_FUNC(n,p,r,d,x) DD_CONCAT(n,p,r,d,x) 356 template <KernelType kernel_type>
360 #ifdef GPU_DOMAIN_WALL_DIRAC 381 #undef ASSN_GAUGE_MATRIX 382 #undef RECONSTRUCT_GAUGE_MATRIX 386 #undef READ_SPINOR_UP 387 #undef READ_SPINOR_DOWN 389 #undef READ_INTERMEDIATE_SPINOR #define DD_FUNC(n, p, r, d, x)