qcdcode / quda

QUDA is a library for performing calculations in lattice QCD on GPUs.
http://lattice.github.com/quda
Other
2 stars 0 forks source link

coordinating NdegTwistedClover & NdegTwistedCloverPreconditioned development #2

Closed kostrzewa closed 3 years ago

kostrzewa commented 3 years ago

Via the work on https://github.com/qcdcode/quda/wiki/ndeg-twisted-clover-kernel-and-testing I've reached a stage where we can start coordinating if you'd like.

urbach commented 3 years ago

Via the work on https://github.com/qcdcode/quda/wiki/ndeg-twisted-clover-kernel-and-testing I've reached a stage where we can start coordinating if you'd like.

thanks for documenting this, looks good! Many of the things I already figured out as well, but then didn't write them down (sometimes as comments in the code).

How shall we coordinate then?

kostrzewa commented 3 years ago

How shall we coordinate then?

I think it would be important to communicate what one intends to work on next within this scope, to avoid doing work twice accidentally.

The other aspect is, in my opinion, the documentation part, such that the respective other person can quickly get up to speed. One may decide, however, that documenting things takes too much time and that it's more efficient to just proceed. That wouldn't be my preferred decision, but I can understand why one would make such a choice.

kostrzewa commented 3 years ago

For my part, I'm in the process of disentangling dslash_test and the respective reference implementations in tests/host_reference. Together with the reference implementation (which exists), this will allow to test the non-preconditioned NdegTwistedClover operator. It would be nice to store a run script (somewhere) which records the command line arguments required to run this test.

Beyond this, I currently see the adjustment of the template parameters of include/kernels/dslash_ndeg_twisted_clover_preconditioned.cuh as the next step and the functor in lib/dslash_ndeg_twisted_clover_preconditioned.cu, such that this can be compiled again.

urbach commented 3 years ago

For my part, I'm in the process of disentangling dslash_test and the respective reference implementations in tests/host_reference. Together with the reference implementation (which exists), this will allow to test the non-preconditioned NdegTwistedClover operator. It would be nice to store a run script (somewhere) which records the command line arguments required to run this test.

okay, I guess you have seen that I started to implement some stuff in host_reference already.

Beyond this, I currently see the adjustment of the template parameters of include/kernels/dslash_ndeg_twisted_clover_preconditioned.cuh as the next step and the functor in lib/dslash_ndeg_twisted_clover_preconditioned.cu, such that this can be compiled again.

Would that be a good division at the moment: you the tests, I look at the kernels?

I'll do my very best to document!

kostrzewa commented 3 years ago

okay, I guess you have seen that I started to implement some stuff in host_reference already.

yes, a lot is ready to go very soon indeed

Did you already manage to test the non-preconditioned version against the reference implementation? If not, this would be my first task, which requires disabling the preconditioned version for the time being.

Would that be a good division at the moment: you the tests, I look at the kernels?

Sounds good to me. We can collect the various inter-dependencies on the Wiki page (or via a todo list here), as testing tmc_ndeg_matpc against the GPU implementation of course requires the operator to also be available ;)

urbach commented 3 years ago

okay, I guess you have seen that I started to implement some stuff in host_reference already.

yes, a lot is ready to go very soon indeed

Did you already manage to test the non-preconditioned version against the reference implementation? If not, this would be my first task, which requires disabling the preconditioned version for the time being.

no, I haven't been able yet. Note, that I know that there is still something wrong, namely in the function 'ndegTwistCloverGamma5' in 'clover_reference.cpp' the lines

// epsilon * tau_1
xpay(out1, b, in2, Vh * spinor_site_size, precision);
xpay(out2, b, in1, Vh * spinor_site_size, precision);

are definitly wrong. 'xpay' writes into y, not x. One would need another linalg function here, I think?! Of course, there are surely more bugs that I introduced.

Disabling the preconditioned version is fine, I can enable by hand.

Would that be a good division at the moment: you the tests, I look at the kernels?

Sounds good to me. We can collect the various inter-dependencies on the Wiki page (or via a todo list here), as testing tmc_ndeg_matpc against the GPU implementation of course requires the operator to also be available ;)

okay, great. (even though the preconditioned kernel is a lot tougher than the non-preconditioned one, I realise)