/* Free energy */
fr->efep = ir->efep;
- fr->bNonbonded = TRUE;
- if (getenv("GMX_NO_NONBONDED") != nullptr)
- {
- /* turn off non-bonded calculations */
- fr->bNonbonded = FALSE;
- GMX_LOG(mdlog.warning)
- .asParagraph()
- .appendText(
- "Found environment variable GMX_NO_NONBONDED.\n"
- "Disabling nonbonded calculations.");
- }
-
if ((getenv("GMX_DISABLE_SIMD_KERNELS") != nullptr) || (getenv("GMX_NOOPTIMIZEDKERNELS") != nullptr))
{
fr->use_simd_kernels = FALSE;
/*! \brief Set up force flag stuct from the force bitmask.
*
* \param[in] legacyFlags Force bitmask flags used to construct the new flags
- * \param[in] isNonbondedOn Global override, if false forces to turn off all nonbonded calculation.
* \param[in] simulationWork Simulation workload description.
* \param[in] rankHasPmeDuty If this rank computes PME.
*
* \returns New Stepworkload description.
*/
static StepWorkload setupStepWorkload(const int legacyFlags,
- const bool isNonbondedOn,
const SimulationWorkload& simulationWork,
const bool rankHasPmeDuty)
{
StepWorkload flags;
- flags.stateChanged = ((legacyFlags & GMX_FORCE_STATECHANGED) != 0);
- flags.haveDynamicBox = ((legacyFlags & GMX_FORCE_DYNAMICBOX) != 0);
- flags.doNeighborSearch = ((legacyFlags & GMX_FORCE_NS) != 0);
- flags.computeVirial = ((legacyFlags & GMX_FORCE_VIRIAL) != 0);
- flags.computeEnergy = ((legacyFlags & GMX_FORCE_ENERGY) != 0);
- flags.computeForces = ((legacyFlags & GMX_FORCE_FORCES) != 0);
- flags.computeListedForces = ((legacyFlags & GMX_FORCE_LISTED) != 0);
- flags.computeNonbondedForces = ((legacyFlags & GMX_FORCE_NONBONDED) != 0) && isNonbondedOn;
- flags.computeDhdl = ((legacyFlags & GMX_FORCE_DHDL) != 0);
+ flags.stateChanged = ((legacyFlags & GMX_FORCE_STATECHANGED) != 0);
+ flags.haveDynamicBox = ((legacyFlags & GMX_FORCE_DYNAMICBOX) != 0);
+ flags.doNeighborSearch = ((legacyFlags & GMX_FORCE_NS) != 0);
+ flags.computeVirial = ((legacyFlags & GMX_FORCE_VIRIAL) != 0);
+ flags.computeEnergy = ((legacyFlags & GMX_FORCE_ENERGY) != 0);
+ flags.computeForces = ((legacyFlags & GMX_FORCE_FORCES) != 0);
+ flags.computeListedForces = ((legacyFlags & GMX_FORCE_LISTED) != 0);
+ flags.computeNonbondedForces =
+ ((legacyFlags & GMX_FORCE_NONBONDED) != 0) && simulationWork.computeNonbonded;
+ flags.computeDhdl = ((legacyFlags & GMX_FORCE_DHDL) != 0);
if (simulationWork.useGpuBufferOps)
{
const SimulationWorkload& simulationWork = runScheduleWork->simulationWork;
- runScheduleWork->stepWork = setupStepWorkload(legacyFlags, fr->bNonbonded, simulationWork,
- thisRankHasDuty(cr, DUTY_PME));
+ runScheduleWork->stepWork =
+ setupStepWorkload(legacyFlags, simulationWork, thisRankHasDuty(cr, DUTY_PME));
const StepWorkload& stepWork = runScheduleWork->stepWork;
const bool printHostName = (cr->nnodes > 1);
gpuTaskAssignments.reportGpuUsage(mdlog, printHostName, useGpuForBonded, pmeRunMode, useGpuForUpdate);
+ const bool disableNonbondedCalculation = (getenv("GMX_NO_NONBONDED") != nullptr);
+ if (disableNonbondedCalculation)
+ {
+ /* turn off non-bonded calculations */
+ GMX_LOG(mdlog.warning)
+ .asParagraph()
+ .appendText(
+ "Found environment variable GMX_NO_NONBONDED.\n"
+ "Disabling nonbonded calculations.");
+ }
+
MdrunScheduleWorkload runScheduleWork;
// Also populates the simulation constant workload description.
- runScheduleWork.simulationWork = createSimulationWorkload(
- *inputrec, devFlags, useGpuForNonbonded, pmeRunMode, useGpuForBonded, useGpuForUpdate);
+ runScheduleWork.simulationWork =
+ createSimulationWorkload(*inputrec, disableNonbondedCalculation, devFlags,
+ useGpuForNonbonded, pmeRunMode, useGpuForBonded, useGpuForUpdate);
std::unique_ptr<DeviceStreamManager> deviceStreamManager = nullptr;
std::unique_ptr<gmx::WholeMoleculeTransform> wholeMoleculeTransform;
- int cutoff_scheme = 0; /* group- or Verlet-style cutoff */
- gmx_bool bNonbonded = FALSE; /* true if nonbonded calculations are *not* turned off */
+ int cutoff_scheme = 0; /* group- or Verlet-style cutoff */
/* The Nbnxm Verlet non-bonded machinery */
std::unique_ptr<nonbonded_verlet_t> nbv;
class SimulationWorkload
{
public:
+ //! Whether to compute nonbonded pair interactions
+ bool computeNonbonded = false;
//! Whether total dipole needs to be computed
bool computeMuTot = false;
//! If we have calculation of short range nonbondeds on CPU
gmx_bool use_simd_kernels,
const gmx_hw_info_t& hardwareInfo,
const NonbondedResource& nonbondedResource,
- const t_inputrec* ir,
- gmx_bool bDoNonbonded)
+ const t_inputrec* ir)
{
KernelSetup kernelSetup;
kernelSetup.kernelType = KernelType::Cpu8x8x8_PlainC;
kernelSetup.ewaldExclusionType = EwaldExclusionType::DecidedByGpuModule;
- if (bDoNonbonded)
- {
- GMX_LOG(mdlog.warning)
- .asParagraph()
- .appendText("Emulating a GPU run on the CPU (slow)");
- }
+ GMX_LOG(mdlog.warning).asParagraph().appendText("Emulating a GPU run on the CPU (slow)");
}
else if (nonbondedResource == NonbondedResource::Gpu)
{
}
}
- if (bDoNonbonded)
+ GMX_LOG(mdlog.info)
+ .asParagraph()
+ .appendTextFormatted("Using %s %dx%d nonbonded short-range kernels",
+ lookup_kernel_name(kernelSetup.kernelType),
+ IClusterSizePerKernelType[kernelSetup.kernelType],
+ JClusterSizePerKernelType[kernelSetup.kernelType]);
+
+ if (KernelType::Cpu4x4_PlainC == kernelSetup.kernelType
+ || KernelType::Cpu8x8x8_PlainC == kernelSetup.kernelType)
{
- GMX_LOG(mdlog.info)
+ GMX_LOG(mdlog.warning)
.asParagraph()
- .appendTextFormatted("Using %s %dx%d nonbonded short-range kernels",
- lookup_kernel_name(kernelSetup.kernelType),
- IClusterSizePerKernelType[kernelSetup.kernelType],
- JClusterSizePerKernelType[kernelSetup.kernelType]);
-
- if (KernelType::Cpu4x4_PlainC == kernelSetup.kernelType
- || KernelType::Cpu8x8x8_PlainC == kernelSetup.kernelType)
- {
- GMX_LOG(mdlog.warning)
- .asParagraph()
- .appendTextFormatted(
- "WARNING: Using the slow %s kernels. This should\n"
- "not happen during routine usage on supported platforms.",
- lookup_kernel_name(kernelSetup.kernelType));
- }
+ .appendTextFormatted(
+ "WARNING: Using the slow %s kernels. This should\n"
+ "not happen during routine usage on supported platforms.",
+ lookup_kernel_name(kernelSetup.kernelType));
}
GMX_RELEASE_ASSERT(kernelSetup.kernelType != KernelType::NotSet
nonbondedResource = NonbondedResource::Cpu;
}
- Nbnxm::KernelSetup kernelSetup = pick_nbnxn_kernel(mdlog, fr->use_simd_kernels, hardwareInfo,
- nonbondedResource, ir, fr->bNonbonded);
+ Nbnxm::KernelSetup kernelSetup =
+ pick_nbnxn_kernel(mdlog, fr->use_simd_kernels, hardwareInfo, nonbondedResource, ir);
const bool haveMultipleDomains = havePPDomainDecomposition(cr);
namespace gmx
{
-SimulationWorkload createSimulationWorkload(const t_inputrec& inputrec,
+SimulationWorkload createSimulationWorkload(const t_inputrec& inputrec,
+ const bool disableNonbondedCalculation,
const DevelopmentFeatureFlags& devFlags,
bool useGpuForNonbonded,
PmeRunMode pmeRunMode,
bool useGpuForUpdate)
{
SimulationWorkload simulationWorkload;
- simulationWorkload.computeMuTot = inputrecNeedMutot(&inputrec);
- simulationWorkload.useCpuNonbonded = !useGpuForNonbonded;
- simulationWorkload.useGpuNonbonded = useGpuForNonbonded;
- simulationWorkload.useCpuPme = (pmeRunMode == PmeRunMode::CPU);
+ simulationWorkload.computeNonbonded = !disableNonbondedCalculation;
+ simulationWorkload.computeMuTot = inputrecNeedMutot(&inputrec);
+ simulationWorkload.useCpuNonbonded = !useGpuForNonbonded;
+ simulationWorkload.useGpuNonbonded = useGpuForNonbonded;
+ simulationWorkload.useCpuPme = (pmeRunMode == PmeRunMode::CPU);
simulationWorkload.useGpuPme = (pmeRunMode == PmeRunMode::GPU || pmeRunMode == PmeRunMode::Mixed);
simulationWorkload.useGpuPmeFft = (pmeRunMode == PmeRunMode::Mixed);
simulationWorkload.useGpuBonded = useGpuForBonded;
* task on GPUs.
*
* \param[in] inputrec The input record
+ * \param[in] disableNonbondedCalculation Disable calculation of nonbonded forces
* \param[in] devFlags The development feature flags
* \param[in] useGpuForNonbonded Whether we have short-range nonbonded interactions
* calculations on GPU(s).
* GPU(s).
* \returns Simulation lifetime constant workload description.
*/
-SimulationWorkload createSimulationWorkload(const t_inputrec& inputrec,
+SimulationWorkload createSimulationWorkload(const t_inputrec& inputrec,
+ bool disableNonbondedCalculation,
const DevelopmentFeatureFlags& devFlags,
bool useGpuForNonbonded,
PmeRunMode pmeRunMode,