Pass devFlags into createSimulationWorkload replacing bools
authorAlan Gray <alangray3@gmail.com>
Fri, 11 Sep 2020 11:51:58 +0000 (04:51 -0700)
committerPaul Bauer <paul.bauer.q@gmail.com>
Tue, 15 Sep 2020 08:04:25 +0000 (08:04 +0000)
src/gromacs/mdrun/runner.cpp
src/gromacs/taskassignment/decidesimulationworkload.cpp
src/gromacs/taskassignment/decidesimulationworkload.h

index 9dcfd9cd741509f0d83917731a5b5b93d2599384..7f8dbc5a8617b98861cedfd080cc21188a7b03c5 100644 (file)
@@ -1248,8 +1248,7 @@ int Mdrunner::mdrunner()
     MdrunScheduleWorkload runScheduleWork;
     // Also populates the simulation constant workload description.
     runScheduleWork.simulationWork = createSimulationWorkload(
-            *inputrec, useGpuForNonbonded, pmeRunMode, useGpuForBonded, useGpuForUpdate,
-            devFlags.enableGpuBufferOps, devFlags.enableGpuHaloExchange, devFlags.enableGpuPmePPComm);
+            *inputrec, devFlags, useGpuForNonbonded, pmeRunMode, useGpuForBonded, useGpuForUpdate);
 
     std::unique_ptr<DeviceStreamManager> deviceStreamManager = nullptr;
 
index b9ba44e94caeacc89e45f68272b4fc44002e2026..ad9d3050edc601d9aee447fff78d0194f714dc96 100644 (file)
 #include "decidesimulationworkload.h"
 
 #include "gromacs/ewald/pme.h"
+#include "gromacs/taskassignment/decidegpuusage.h"
 #include "gromacs/taskassignment/taskassignment.h"
 #include "gromacs/utility/arrayref.h"
 
 namespace gmx
 {
 
-SimulationWorkload createSimulationWorkload(const t_inputrec& inputrec,
-                                            bool              useGpuForNonbonded,
-                                            PmeRunMode        pmeRunMode,
-                                            bool              useGpuForBonded,
-                                            bool              useGpuForUpdate,
-                                            bool              useGpuForBufferOps,
-                                            bool              useGpuHaloExchange,
-                                            bool              useGpuPmePpComm)
+SimulationWorkload createSimulationWorkload(const t_inputrec&              inputrec,
+                                            const DevelopmentFeatureFlags& devFlags,
+                                            bool                           useGpuForNonbonded,
+                                            PmeRunMode                     pmeRunMode,
+                                            bool                           useGpuForBonded,
+                                            bool                           useGpuForUpdate)
 {
     SimulationWorkload simulationWorkload;
     simulationWorkload.computeMuTot    = inputrecNeedMutot(&inputrec);
@@ -65,13 +64,15 @@ SimulationWorkload createSimulationWorkload(const t_inputrec& inputrec,
     simulationWorkload.useGpuNonbonded = useGpuForNonbonded;
     simulationWorkload.useCpuPme       = (pmeRunMode == PmeRunMode::CPU);
     simulationWorkload.useGpuPme = (pmeRunMode == PmeRunMode::GPU || pmeRunMode == PmeRunMode::Mixed);
-    simulationWorkload.useGpuPmeFft             = (pmeRunMode == PmeRunMode::Mixed);
-    simulationWorkload.useGpuBonded             = useGpuForBonded;
-    simulationWorkload.useGpuUpdate             = useGpuForUpdate;
-    simulationWorkload.useGpuBufferOps          = useGpuForBufferOps || useGpuForUpdate;
-    simulationWorkload.useGpuHaloExchange       = useGpuHaloExchange;
-    simulationWorkload.useGpuPmePpCommunication = useGpuPmePpComm && (pmeRunMode == PmeRunMode::GPU);
-    simulationWorkload.useGpuDirectCommunication    = useGpuHaloExchange || useGpuPmePpComm;
+    simulationWorkload.useGpuPmeFft       = (pmeRunMode == PmeRunMode::Mixed);
+    simulationWorkload.useGpuBonded       = useGpuForBonded;
+    simulationWorkload.useGpuUpdate       = useGpuForUpdate;
+    simulationWorkload.useGpuBufferOps    = devFlags.enableGpuBufferOps || useGpuForUpdate;
+    simulationWorkload.useGpuHaloExchange = devFlags.enableGpuHaloExchange;
+    simulationWorkload.useGpuPmePpCommunication =
+            devFlags.enableGpuPmePPComm && (pmeRunMode == PmeRunMode::GPU);
+    simulationWorkload.useGpuDirectCommunication =
+            devFlags.enableGpuHaloExchange || devFlags.enableGpuPmePPComm;
     simulationWorkload.haveEwaldSurfaceContribution = haveEwaldSurfaceContribution(inputrec);
 
     return simulationWorkload;
index b8d81c02b5107b2ca5f6671a74ee231077d983f7..7dd87e60730b10ad1faa7843f8a530a78d2dc180 100644 (file)
@@ -52,30 +52,28 @@ enum class PmeRunMode;
 namespace gmx
 {
 
+struct DevelopmentFeatureFlags;
+
 /*! \brief
  * Build datastructure that contains decisions whether to run different workload
  * task on GPUs.
  *
  * \param[in] inputrec           The input record
+ * \param[in] devFlags           The development feature flags
  * \param[in] useGpuForNonbonded Whether we have short-range nonbonded interactions
  *                               calculations on GPU(s).
  * \param[in] pmeRunMode         Run mode indicating what resource is PME execured on.
  * \param[in] useGpuForBonded    Whether bonded interactions are calculated on GPU(s).
  * \param[in] useGpuForUpdate    Whether coordinate update and constraint solving is performed on
  *                               GPU(s).
- * \param[in] useGpuForBufferOps Whether buffer ops / reduction are calculated on GPU(s).
- * \param[in] useGpuHaloExchange Whether GPU direct communication is used in halo exchange.
- * \param[in] useGpuPmePpComm    Whether GPU direct communication is used in PME-PP communication.
  * \returns Simulation lifetime constant workload description.
  */
-SimulationWorkload createSimulationWorkload(const t_inputrec& inputrec,
-                                            bool              useGpuForNonbonded,
-                                            PmeRunMode        pmeRunMode,
-                                            bool              useGpuForBonded,
-                                            bool              useGpuForUpdate,
-                                            bool              useGpuForBufferOps,
-                                            bool              useGpuHaloExchange,
-                                            bool              useGpuPmePpComm);
+SimulationWorkload createSimulationWorkload(const t_inputrec&              inputrec,
+                                            const DevelopmentFeatureFlags& devFlags,
+                                            bool                           useGpuForNonbonded,
+                                            PmeRunMode                     pmeRunMode,
+                                            bool                           useGpuForBonded,
+                                            bool                           useGpuForUpdate);
 
 } // namespace gmx