Mass-Preconditioning for the HMC (Feature #257)
One can improve the time spent on HMC trajectories enormously by applying a technique called "mass preconditioning.
See hep-lat/0506011 for more information.
This can be implemented without the need to have new kernels:
- add appropiate fermion fields to the algorithm
- add appropiate force calculation
- if necessary, add inputparameters
|blocked by CL2QCD - Feature #258: Integration using 3 timescales||Done||22 Feb 2012|
fixed a bug in the leapfrog with 3 timescales
added more debug output to HMC ingredients
With 6da8bf79 I added necessary parameters for the mass-preconditioning.
When adding the kernel, a difficulty will be that in case of mass-preconditioning, one has to create the same kernels, but with different compile parameters, i.e. one has to change "collect_options" here, which is build up before each kernel compilation anyway (via "fill_collect_options"). This is not so hard to do, however it should be done in a way that the overall structure of the function "fill_collect_options" is not changed, because all modules use it...
- % Done changed from 0 to 20
The most coherent way of implementing mass-preconditioning (i.e. using different fermion matrices) is to add arguments to the kernels (kappa and mu).
It will be interesting to see if the hard-coded values have any impact on the performance of the kernels...
With ccff2dd0 I added kappa and mu as arguments to all kernels in opencl_module_fermions and adjusted all functions correspondingly.
NOTE: As I was at it, I also renamed all occurences of "eoprec" to "eo" in this class in order to have a more coherent nomenclature.
- % Done changed from 20 to 30
What is left to do is:
- the fermion force function need an add. arguments for kappa and mu, this will also affect some functions in the integrator
- in principle the force and action calculation works the same way as with a normal fermion determinant, however, one has to fill in some matrix multiplications
- one needs a couple of more fields to save all ingredients plus some tmp. fields
If the implementation is done, one might test it against a test case from tmlqcd, where results are given in the manual (hmc_input3).
There were still a couple of bugs in the code, however, I tested it extensively against tmlqcd, and runs on 4^4 lattices gave agreeing results both in plaquette and dH, using leapfrog as well as 2mn integrator and mass-preconditioning in kappa and mu, respectively.
- % Done changed from 80 to 100
- Status changed from New to Done