From 8cc3d4d720aec866d63e3c9cc144fe9eb3d7e610 Mon Sep 17 00:00:00 2001 From: Alan Gray Date: Fri, 11 Sep 2020 04:51:58 -0700 Subject: [PATCH] Pass devFlags into createSimulationWorkload replacing bools --- src/gromacs/mdrun/runner.cpp | 3 +- .../decidesimulationworkload.cpp | 31 ++++++++++--------- .../taskassignment/decidesimulationworkload.h | 20 ++++++------ 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/gromacs/mdrun/runner.cpp b/src/gromacs/mdrun/runner.cpp index 9dcfd9cd74..7f8dbc5a86 100644 --- a/src/gromacs/mdrun/runner.cpp +++ b/src/gromacs/mdrun/runner.cpp @@ -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 = nullptr; diff --git a/src/gromacs/taskassignment/decidesimulationworkload.cpp b/src/gromacs/taskassignment/decidesimulationworkload.cpp index b9ba44e94c..ad9d3050ed 100644 --- a/src/gromacs/taskassignment/decidesimulationworkload.cpp +++ b/src/gromacs/taskassignment/decidesimulationworkload.cpp @@ -44,20 +44,19 @@ #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; diff --git a/src/gromacs/taskassignment/decidesimulationworkload.h b/src/gromacs/taskassignment/decidesimulationworkload.h index b8d81c02b5..7dd87e6073 100644 --- a/src/gromacs/taskassignment/decidesimulationworkload.h +++ b/src/gromacs/taskassignment/decidesimulationworkload.h @@ -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 -- 2.22.0