From: Artem Zhmurov Date: Mon, 30 Dec 2019 14:34:18 +0000 (+0100) Subject: Inform user why forcing GPU update is not possible X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=7016f3f555d7187c39b9acd4a74e0a0ead6f3365;p=alexxy%2Fgromacs.git Inform user why forcing GPU update is not possible Currently, if the GMX_FORCE_UPDATE_DEFAULT_GPU is set in not supported case, the update silently switches to the CPU code path. This adds the message that informs user that this has happened and why. Change-Id: I7317d83271158c9973f4c102d8ca830b437626b5 --- diff --git a/src/gromacs/mdrun/runner.cpp b/src/gromacs/mdrun/runner.cpp index 4eea987110..58c12d092d 100644 --- a/src/gromacs/mdrun/runner.cpp +++ b/src/gromacs/mdrun/runner.cpp @@ -1194,7 +1194,7 @@ int Mdrunner::mdrunner() devFlags.forceGpuUpdateDefault, useDomainDecomposition, useUpdateGroups, pmeRunMode, domdecOptions.numPmeRanks > 0, useGpuForNonbonded, updateTarget, gpusWereDetected, *inputrec, mtop, doEssentialDynamics, gmx_mtop_ftype_count(mtop, F_ORIRES) > 0, - replExParams.exchangeInterval > 0, doRerun); + replExParams.exchangeInterval > 0, doRerun, mdlog); } GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR diff --git a/src/gromacs/taskassignment/decidegpuusage.cpp b/src/gromacs/taskassignment/decidegpuusage.cpp index 3bb192d446..3974e7b013 100644 --- a/src/gromacs/taskassignment/decidegpuusage.cpp +++ b/src/gromacs/taskassignment/decidegpuusage.cpp @@ -489,20 +489,21 @@ bool decideWhetherToUseGpusForBonded(const bool useGpuForNonbonded, return gpusWereDetected && usingOurCpuForPmeOrEwald; } -bool decideWhetherToUseGpuForUpdate(const bool forceGpuUpdateDefault, - const bool isDomainDecomposition, - const bool useUpdateGroups, - const PmeRunMode pmeRunMode, - const bool havePmeOnlyRank, - const bool useGpuForNonbonded, - const TaskTarget updateTarget, - const bool gpusWereDetected, - const t_inputrec& inputrec, - const gmx_mtop_t& mtop, - const bool useEssentialDynamics, - const bool doOrientationRestraints, - const bool useReplicaExchange, - const bool doRerun) +bool decideWhetherToUseGpuForUpdate(const bool forceGpuUpdateDefault, + const bool isDomainDecomposition, + const bool useUpdateGroups, + const PmeRunMode pmeRunMode, + const bool havePmeOnlyRank, + const bool useGpuForNonbonded, + const TaskTarget updateTarget, + const bool gpusWereDetected, + const t_inputrec& inputrec, + const gmx_mtop_t& mtop, + const bool useEssentialDynamics, + const bool doOrientationRestraints, + const bool useReplicaExchange, + const bool doRerun, + const gmx::MDLogger& mdlog) { // '-update cpu' overrides the environment variable, '-update auto' does not @@ -622,7 +623,18 @@ bool decideWhetherToUseGpuForUpdate(const bool forceGpuUpdateDefault, if (!errorMessage.empty()) { - if (updateTarget == TaskTarget::Gpu) + if (updateTarget != TaskTarget::Gpu && forceGpuUpdateDefault) + { + GMX_LOG(mdlog.warning) + .asParagraph() + .appendText( + "Update task on the GPU was required, by the " + "GMX_FORCE_UPDATE_DEFAULT_GPU environment variable, but the following " + "condition(s) were not satisfied:"); + GMX_LOG(mdlog.warning).asParagraph().appendText(errorMessage.c_str()); + GMX_LOG(mdlog.warning).asParagraph().appendText("Will use CPU version of update."); + } + else if (updateTarget == TaskTarget::Gpu) { std::string prefix = gmx::formatString( "Update task on the GPU was required,\n" diff --git a/src/gromacs/taskassignment/decidegpuusage.h b/src/gromacs/taskassignment/decidegpuusage.h index 94db669b4f..6d22cf843a 100644 --- a/src/gromacs/taskassignment/decidegpuusage.h +++ b/src/gromacs/taskassignment/decidegpuusage.h @@ -53,6 +53,8 @@ enum class PmeRunMode; namespace gmx { +class MDLogger; + //! Record where a compute task is targetted. enum class TaskTarget : int { @@ -247,25 +249,27 @@ bool decideWhetherToUseGpusForBonded(bool useGpuForNonbonded, * \param[in] doOrientationRestraints If orientation restraints are enabled. * \param[in] useReplicaExchange If this is a REMD simulation. * \param[in] doRerun It this is a rerun. + * \param[in] mdlog MD logger. * * \returns Whether complete simulation can be run on GPU. * \throws std::bad_alloc If out of memory * InconsistentInputError If the user requirements are inconsistent. */ -bool decideWhetherToUseGpuForUpdate(bool forceGpuUpdateDefault, - bool isDomainDecomposition, - bool useUpdateGroups, - PmeRunMode pmeRunMode, - bool havePmeOnlyRank, - bool useGpuForNonbonded, - TaskTarget updateTarget, - bool gpusWereDetected, - const t_inputrec& inputrec, - const gmx_mtop_t& mtop, - bool useEssentialDynamics, - bool doOrientationRestraints, - bool useReplicaExchange, - bool doRerun); +bool decideWhetherToUseGpuForUpdate(bool forceGpuUpdateDefault, + bool isDomainDecomposition, + bool useUpdateGroups, + PmeRunMode pmeRunMode, + bool havePmeOnlyRank, + bool useGpuForNonbonded, + TaskTarget updateTarget, + bool gpusWereDetected, + const t_inputrec& inputrec, + const gmx_mtop_t& mtop, + bool useEssentialDynamics, + bool doOrientationRestraints, + bool useReplicaExchange, + bool doRerun, + const gmx::MDLogger& mdlog); } // namespace gmx