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;
#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);
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;
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