From: Joe Jordan Date: Wed, 5 May 2021 07:35:26 +0000 (+0000) Subject: Pass ArrayRefs to dispatchNonbondedKernel X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=4fca90c9e45c800c133bbbabddb4a44007d70b05;p=alexxy%2Fgromacs.git Pass ArrayRefs to dispatchNonbondedKernel --- diff --git a/api/nblib/gmxcalculator.cpp b/api/nblib/gmxcalculator.cpp index 12ab681d5e..751ed51518 100644 --- a/api/nblib/gmxcalculator.cpp +++ b/api/nblib/gmxcalculator.cpp @@ -73,13 +73,16 @@ void GmxForceCalculator::compute(gmx::ArrayRef coordinateInput, // update the coordinates in the backend nbv_->convertCoordinates(gmx::AtomLocality::Local, coordinateInput); - nbv_->dispatchNonbondedKernel(gmx::InteractionLocality::Local, - *interactionConst_, - *stepWork_, - enbvClearFYes, - *forcerec_, - enerd_.get(), - nrnb_.get()); + nbv_->dispatchNonbondedKernel( + gmx::InteractionLocality::Local, + *interactionConst_, + *stepWork_, + enbvClearFYes, + forcerec_->shift_vec, + enerd_->grpp.energyGroupPairTerms[forcerec_->haveBuckingham ? NonBondedEnergyTerms::BuckinghamSR + : NonBondedEnergyTerms::LJSR], + enerd_->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR], + nrnb_.get()); nbv_->atomdata_add_nbat_f_to_f(gmx::AtomLocality::All, forceOutput); } diff --git a/src/gromacs/mdlib/sim_util.cpp b/src/gromacs/mdlib/sim_util.cpp index 540bad7f00..342c08bb62 100644 --- a/src/gromacs/mdlib/sim_util.cpp +++ b/src/gromacs/mdlib/sim_util.cpp @@ -444,7 +444,16 @@ static void do_nb_verlet(t_forcerec* fr, } } - nbv->dispatchNonbondedKernel(ilocality, *ic, stepWork, clearF, *fr, enerd, nrnb); + nbv->dispatchNonbondedKernel( + ilocality, + *ic, + stepWork, + clearF, + fr->shift_vec, + enerd->grpp.energyGroupPairTerms[fr->haveBuckingham ? NonBondedEnergyTerms::BuckinghamSR + : NonBondedEnergyTerms::LJSR], + enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR], + nrnb); } static inline void clearRVecs(ArrayRef v, const bool useOpenmpThreading) diff --git a/src/gromacs/nbnxm/benchmark/bench_setup.cpp b/src/gromacs/nbnxm/benchmark/bench_setup.cpp index 6428181946..5ac216df22 100644 --- a/src/gromacs/nbnxm/benchmark/bench_setup.cpp +++ b/src/gromacs/nbnxm/benchmark/bench_setup.cpp @@ -49,6 +49,7 @@ #include "gromacs/gmxlib/nrnb.h" #include "gromacs/math/units.h" +#include "gromacs/math/vectypes.h" #include "gromacs/mdlib/dispersioncorrection.h" #include "gromacs/mdlib/force_flags.h" #include "gromacs/mdlib/forcerec.h" @@ -358,7 +359,15 @@ static void setupAndRunInstance(const gmx::BenchmarkSystem& system, for (int iter = 0; iter < options.numPreIterations; iter++) { nbv->dispatchNonbondedKernel( - gmx::InteractionLocality::Local, ic, stepWork, enbvClearFYes, system.forceRec, &enerd, &nrnb); + gmx::InteractionLocality::Local, + ic, + stepWork, + enbvClearFYes, + system.forceRec.shift_vec, + enerd.grpp.energyGroupPairTerms[system.forceRec.haveBuckingham ? NonBondedEnergyTerms::BuckinghamSR + : NonBondedEnergyTerms::LJSR], + enerd.grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR], + &nrnb); } const int numIterations = (doWarmup ? options.numWarmupIterations : options.numIterations); @@ -369,7 +378,15 @@ static void setupAndRunInstance(const gmx::BenchmarkSystem& system, { // Run the kernel without force clearing nbv->dispatchNonbondedKernel( - gmx::InteractionLocality::Local, ic, stepWork, enbvClearFNo, system.forceRec, &enerd, &nrnb); + gmx::InteractionLocality::Local, + ic, + stepWork, + enbvClearFNo, + system.forceRec.shift_vec, + enerd.grpp.energyGroupPairTerms[system.forceRec.haveBuckingham ? NonBondedEnergyTerms::BuckinghamSR + : NonBondedEnergyTerms::LJSR], + enerd.grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR], + &nrnb); } cycles = gmx_cycles_read() - cycles; if (!doWarmup) diff --git a/src/gromacs/nbnxm/kerneldispatch.cpp b/src/gromacs/nbnxm/kerneldispatch.cpp index 52667776a0..f84ddf3a56 100644 --- a/src/gromacs/nbnxm/kerneldispatch.cpp +++ b/src/gromacs/nbnxm/kerneldispatch.cpp @@ -441,13 +441,14 @@ static void accountFlops(t_nrnb* nrnb, } } -void nonbonded_verlet_t::dispatchNonbondedKernel(gmx::InteractionLocality iLocality, - const interaction_const_t& ic, - const gmx::StepWorkload& stepWork, - int clearF, - const t_forcerec& fr, - gmx_enerdata_t* enerd, - t_nrnb* nrnb) +void nonbonded_verlet_t::dispatchNonbondedKernel(gmx::InteractionLocality iLocality, + const interaction_const_t& ic, + const gmx::StepWorkload& stepWork, + int clearF, + gmx::ArrayRef shiftvec, + gmx::ArrayRef repulsionDispersionSR, + gmx::ArrayRef CoulombSR, + t_nrnb* nrnb) const { const PairlistSet& pairlistSet = pairlistSets().pairlistSet(iLocality); @@ -456,19 +457,16 @@ void nonbonded_verlet_t::dispatchNonbondedKernel(gmx::InteractionLocality iLoc case Nbnxm::KernelType::Cpu4x4_PlainC: case Nbnxm::KernelType::Cpu4xN_Simd_4xN: case Nbnxm::KernelType::Cpu4xN_Simd_2xNN: - nbnxn_kernel_cpu( - pairlistSet, - kernelSetup(), - nbat.get(), - ic, - fr.shift_vec, - stepWork, - clearF, - enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR].data(), - fr.haveBuckingham - ? enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::BuckinghamSR].data() - : enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR].data(), - wcycle_); + nbnxn_kernel_cpu(pairlistSet, + kernelSetup(), + nbat.get(), + ic, + shiftvec, + stepWork, + clearF, + CoulombSR.data(), + repulsionDispersionSR.data(), + wcycle_); break; case Nbnxm::KernelType::Gpu8x8x8: @@ -476,19 +474,16 @@ void nonbonded_verlet_t::dispatchNonbondedKernel(gmx::InteractionLocality iLoc break; case Nbnxm::KernelType::Cpu8x8x8_PlainC: - nbnxn_kernel_gpu_ref( - pairlistSet.gpuList(), - nbat.get(), - &ic, - fr.shift_vec, - stepWork, - clearF, - nbat->out[0].f, - nbat->out[0].fshift.data(), - enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR].data(), - fr.haveBuckingham - ? enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::BuckinghamSR].data() - : enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR].data()); + nbnxn_kernel_gpu_ref(pairlistSet.gpuList(), + nbat.get(), + &ic, + shiftvec, + stepWork, + clearF, + nbat->out[0].f, + nbat->out[0].fshift.data(), + CoulombSR.data(), + repulsionDispersionSR.data()); break; default: GMX_RELEASE_ASSERT(false, "Invalid nonbonded kernel type passed!"); diff --git a/src/gromacs/nbnxm/nbnxm.h b/src/gromacs/nbnxm/nbnxm.h index b44fcaa808..6d5cdccd69 100644 --- a/src/gromacs/nbnxm/nbnxm.h +++ b/src/gromacs/nbnxm/nbnxm.h @@ -358,13 +358,14 @@ public: void dispatchPruneKernelGpu(int64_t step); //! \brief Executes the non-bonded kernel of the GPU or launches it on the GPU - void dispatchNonbondedKernel(gmx::InteractionLocality iLocality, - const interaction_const_t& ic, - const gmx::StepWorkload& stepWork, - int clearF, - const t_forcerec& fr, - gmx_enerdata_t* enerd, - t_nrnb* nrnb); + void dispatchNonbondedKernel(gmx::InteractionLocality iLocality, + const interaction_const_t& ic, + const gmx::StepWorkload& stepWork, + int clearF, + gmx::ArrayRef shiftvec, + gmx::ArrayRef repulsionDispersionSR, + gmx::ArrayRef CoulombSR, + t_nrnb* nrnb) const; //! Executes the non-bonded free-energy kernel, always runs on the CPU void dispatchFreeEnergyKernel(gmx::InteractionLocality iLocality,