QUDA Accessor Framework In Dslash Kernels. [WIKI PAGE WORK IN PROGRESS]
All of QUDA's Dslash kernels are derived from a highly abstracted base class defined in include/dslash.h
. This base class handles how each of the interior and exterior kernels are constructed at compile time, and also handles launching those kernels at run time, i.e., there is one launch
function sin the base class that every Dslash type calls. The specifics of each Dslash operator are defined in the file lib/dslash4_DSLASH_TYPE.cu
where DSLASH_TYPE
can be any of the types currently offered in QUDA. We enumerate them here as they appear in the library for clarity:
- wilson
- wilson_clover
- wilson_clover_preconditioned
- twisted_mass
- twisted_mass_preconditioned
- twisted_clover
- twisted_clover_preconditioned
- ndeg_twisted_mass
- ndeg_twisted_mass_preconditioned
- staggered
- improved_staggered
- domain_wall_4d
- domain_wall_5d
A minor exception to this naming convention are the first and second order gauge covariant derivative operators. They appear as
- covDev.cu
- laplace.cu
respectively. This splitting
of abstracted, GPU oriented boiler-plate code in the Dslash
base class and the code that represents the mathematics of the discrete operator allows the QUDA developer to better augment existing Dslash operators, or indeed create a brand new one. We shall use the well known Wilson operator defined in lib/dslash4_wilson.cu
as a pedagogical example on how to use this new framework.