atom reordering with cutoffs
Posted: Wed Feb 03, 2016 3:15 pm
Peter et al.,
We are trying to finish up our CPHMD plugin to complement the recent implementation of the GBSW model in the CHARMM/OpenMM interface and are running into an issue that I think I ran across before but cannot find any detail of. This has to do with reordering of atoms to optimize the tile-based computations on the GPU (in cuda) when one has cutoffs. I am pretty sure this happens. We discovered an array (atomIndex) and a cuda platform kernel routine (CudaContext.cpp) where we believe this happens, our problem is 1) we want to gather the energies of interaction between specific sets of atoms and their neighbors at each timestep and 2) we use these energies to propagate the values of the charges on the atoms, and hence need to repopulate the charges with their updated values after the propagation step. It appears that this array, atomIndex, contains the information we need, but applying it to "reorder" our calculation doesn't seem to yield the correct result. I note that if we do no cutoff and don't use this array to reorder atoms, our results agree with those from or reference or CPU platform (i.e., CHARMM). Clearly we are not doing something correct, but we don't seem to be able to figure out where/why. Any help would be appreciated.
Thanks,
Charlie
We are trying to finish up our CPHMD plugin to complement the recent implementation of the GBSW model in the CHARMM/OpenMM interface and are running into an issue that I think I ran across before but cannot find any detail of. This has to do with reordering of atoms to optimize the tile-based computations on the GPU (in cuda) when one has cutoffs. I am pretty sure this happens. We discovered an array (atomIndex) and a cuda platform kernel routine (CudaContext.cpp) where we believe this happens, our problem is 1) we want to gather the energies of interaction between specific sets of atoms and their neighbors at each timestep and 2) we use these energies to propagate the values of the charges on the atoms, and hence need to repopulate the charges with their updated values after the propagation step. It appears that this array, atomIndex, contains the information we need, but applying it to "reorder" our calculation doesn't seem to yield the correct result. I note that if we do no cutoff and don't use this array to reorder atoms, our results agree with those from or reference or CPU platform (i.e., CHARMM). Clearly we are not doing something correct, but we don't seem to be able to figure out where/why. Any help would be appreciated.
Thanks,
Charlie