Remove duplicate waiting for coordinates
authorAndrey Alekseenko <al42and@gmail.com>
Mon, 26 Jul 2021 11:14:30 +0000 (11:14 +0000)
committerMark Abraham <mark.j.abraham@gmail.com>
Mon, 26 Jul 2021 11:14:30 +0000 (11:14 +0000)
src/gromacs/mdlib/sim_util.cpp

index 45026b2ad599999c94f22b2540c4071d97e49d57..4210f696cda3492b55c55d2e60593c4e5f224dd5 100644 (file)
@@ -1665,19 +1665,22 @@ void do_force(FILE*                               fplog,
         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.
          */
@@ -1707,15 +1710,6 @@ void do_force(FILE*                               fplog,
         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);