JeffersonLab / chroma

The Chroma Software System for Lattice QCD
http://jeffersonlab.github.io/chroma
Other
58 stars 50 forks source link

Feature/quda split grid #69

Closed bjoo closed 3 weeks ago

bjoo commented 2 months ago

Outline

This is a modification of syssolver_linop_clover_quda_w.cc to support the multi-src interface from Eloy and to use it to call a multi-source (in this case split-grid) solver in QUDA. Currently it works only for the simple solvers in QUDA like CG, BiCGStab. In particular, multigrid is not yet supported.

To utilize the split grid feature, the <InvertParam> parameter structure in the XML has been expanded to offer the ability to add a <GridSplitDims> parameter tag, which contains the number of subgrid-splits in each dimension. E.g.

<GridSplitDims>1 1 1 1</GridSplitDims> 

indicates no splitting. Whereas

<GridSplitDims>1 1 2 2</GridSplitDims>

indicates that the virtual processor grid specified by the -geom option should be split into 4 sub-grids (2 each in the Z and T dimensions). The GridSplitDims has to be commensurate with (i.e. divide exactly) the virtual processor grid.

The split grid can then currently perform simultaneously an independent solution on each sub-grid. E.g. a 4-way split of a 12 component propagator, could be done in the time of 3 solves on 4 subgrids.

bjoo commented 2 months ago

The last commit (Tydiup) just moves the clov and invclov as well as the packed clover fields back to the class constructor as local variables, rather than class members. The reason is that since QUDA now uses the downloaded gauge and clover fields (from loadGaugeQuda and loadCloverQuda we no longer need to pass these to QUDA, so they don't have to persist beyond the initialization.

bjoo commented 2 months ago

Tidyup 2 is similar to Tidyup -- it moved the gauge links_single and the void *gauge[4] back into the constructor to be local since we no longer need to pass the gauge pointers to QUDA's invertMultiSrcCloverQuda()

bjoo commented 3 weeks ago

Robert told me to merge it myself on the last call. So done.