Skip to content

QUDA Accessor Framework In Dslash Kernels. [WIKI PAGE WORK IN PROGRESS]

Dean Howarth edited this page Apr 24, 2019 · 4 revisions

QUDA's Dslash implementation and structure.

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.

Wilson Dslash: A worked example.

Clone this wiki locally