[gmx-developers] slightly odd-looking code
cblau
cblau at gwdg.de
Mon Mar 23 15:19:20 CET 2020
Hi Jan,
Thanks for reaching out!
The part of code that you quote is part of the essential dynamics module
that is a quite specialised algorithm and - as I would guess - not used
in folding at home.
As GROMACS is already highly specialised, it is a bit challenging to
speed up quickly (though definitely possible to contribute in meaningful
ways).
With all urgency in mind, there is quite a time-delay in the way new
code gets incorporated, because we do very much require scientific
correctness and thorough code review to make sure that all simulation
results are meaningful and we don't waste a ton of people efforts and
compute power on a slight bug.
The largest speed up in a short time frame (the next months) is inmy
option achieved by teaching people how to use GROMACS in the most
efficient ways and make sure that people running simulations run them
correctly.
If you like, we can briefly chat tomorrow on how GROMACS is set up and
the "usual ways" to contribute to GROMACS if you send me a personal email.
Best,
Christian
On 2020-03-23 14:58, jan wrote:
> Hi,
> I'm a general back-end dev. Given the situation, and folding at home
> using gromacs, I thought I'd poke through the code. I noticed
> something unexpected, and was advised to email it here. in edsam.cpp,
> this:
>
>
> void do_linacc(rvec* xcoll, t_edpar* edi)
> {
> /* loop over linacc vectors */
> for (int i = 0; i < edi->vecs.linacc.neig; i++)
> {
> /* calculate the projection */
> real proj = projectx(*edi, xcoll, edi->vecs.linacc.vec[i]);
>
>
> /* calculate the correction */
> real preFactor = 0.0;
> if (edi->vecs.linacc.stpsz[i] > 0.0)
> {
> if ((proj - edi->vecs.linacc.refproj[i]) < 0.0)
> {
> preFactor = edi->vecs.linacc.refproj[i] - proj;
> }
> }
> if (edi->vecs.linacc.stpsz[i] < 0.0)
> {
> if ((proj - edi->vecs.linacc.refproj[i]) > 0.0)
> {
> preFactor = edi->vecs.linacc.refproj[i] - proj;
> }
> }
> [...]
>
>
> In both cases it reaches the same code
>
> preFactor = edi->vecs.linacc.refproj[i] - proj
>
> That surprised me a bit, is it deliberate? If so it may be the code
> can be simplified anyway.
>
> That aside, if you're looking for performance I might be able to help.
> I don't know the high level stuff *at this point* and my C++ is so
> rusty it creaks, but I can brush that up, do profiling and whatnot.
> I'm pretty experience, just not in this area. Speeding things up is
> something I've got a track record of (though I usually have a good
> feel for the problem domain first, which I don't here)
>
> Would it be of some value for me to try getting more speed? If so,
> first thing I'd need is to get this running under cygwin, which I'm
> struggling with.
>
> regards
>
> jan
>
More information about the gromacs.org_gmx-developers
mailing list