Closed bjoo closed 3 weeks 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.
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()
Robert told me to merge it myself on the last call. So done.
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.indicates no splitting. Whereas
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). TheGridSplitDims
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.