xWholeMolecules = fr->wholeMoleculeTransform->wholeMoleculeCoordinates(x.unpaddedArrayRef(), box);
}
+ // For the rest of the CPU tasks that depend on GPU-update produced coordinates,
+ // this wait ensures that the D2H transfer is complete.
+ if (simulationWork.useGpuUpdate && !stepWork.doNeighborSearch
+ && (runScheduleWork->domainWork.haveCpuLocalForceWork || stepWork.computeVirial
+ || simulationWork.computeMuTot))
+ {
+ GMX_ASSERT(haveCopiedXFromGpu, "a wait should only be triggered if copy has been scheduled");
+ stateGpu->waitCoordinatesReadyOnHost(AtomLocality::Local);
+ }
+
DipoleData dipoleData;
if (simulationWork.computeMuTot)
{
const int start = 0;
- if (simulationWork.useGpuUpdate && !stepWork.doNeighborSearch)
- {
- GMX_ASSERT(haveCopiedXFromGpu,
- "a wait should only be triggered if copy has been scheduled");
- stateGpu->waitCoordinatesReadyOnHost(AtomLocality::Local);
- }
-
/* Calculate total (local) dipole moment in a temporary common array.
* This makes it possible to sum them over nodes faster.
*/
dd_force_flop_start(cr->dd, nrnb);
}
- // For the rest of the CPU tasks that depend on GPU-update produced coordinates,
- // this wait ensures that the D2H transfer is complete.
- if (simulationWork.useGpuUpdate && !stepWork.doNeighborSearch
- && (runScheduleWork->domainWork.haveCpuLocalForceWork || stepWork.computeVirial))
- {
- GMX_ASSERT(haveCopiedXFromGpu, "a wait should only be triggered if copy has been scheduled");
- stateGpu->waitCoordinatesReadyOnHost(AtomLocality::Local);
- }
-
if (inputrec.bRot)
{
wallcycle_start(wcycle, WallCycleCounter::Rot);