SimulationWorkload createSimulationWorkload(const t_inputrec& inputrec,
const bool disableNonbondedCalculation,
const DevelopmentFeatureFlags& devFlags,
- bool useGpuForNonbonded,
- PmeRunMode pmeRunMode,
- bool useGpuForBonded,
- bool useGpuForUpdate,
- bool useGpuDirectHalo)
+ bool havePpDomainDecomposition,
+ bool useGpuForNonbonded,
+ PmeRunMode pmeRunMode,
+ bool useGpuForBonded,
+ bool useGpuForUpdate,
+ bool useGpuDirectHalo)
{
SimulationWorkload simulationWorkload;
simulationWorkload.computeNonbonded = !disableNonbondedCalculation;
simulationWorkload.useGpuUpdate = useGpuForUpdate;
simulationWorkload.useGpuBufferOps = (devFlags.enableGpuBufferOps || useGpuForUpdate)
&& !simulationWorkload.computeNonbondedAtMtsLevel1;
- simulationWorkload.useGpuHaloExchange = useGpuDirectHalo;
+ simulationWorkload.havePpDomainDecomposition = havePpDomainDecomposition;
+ simulationWorkload.useCpuHaloExchange = havePpDomainDecomposition && !useGpuDirectHalo;
+ simulationWorkload.useGpuHaloExchange = useGpuDirectHalo;
simulationWorkload.useGpuPmePpCommunication =
devFlags.enableGpuPmePPComm && (pmeRunMode == PmeRunMode::GPU);
simulationWorkload.useGpuDirectCommunication =