From: ejjordan Date: Tue, 23 Mar 2021 15:56:26 +0000 (+0100) Subject: Remove unneeded members from nb_kernel_data_t X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=30c4c5626c32c93d382e8f29fb145bc1016b3483;p=alexxy%2Fgromacs.git Remove unneeded members from nb_kernel_data_t Several unused members are removed from nb_kernel_data_t. Additionally, some members that can be passed directly from the gmx_enerdata_t struct are removed, and instead added to the call signature of gmx_nb_free_energy_kernel. This expansion of the call signature is the only way to get rid of the real* members of nb_kernel_data_t. Also, function with no implementation is removed. --- diff --git a/src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp b/src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp index 795cdbce4e..d50377fa67 100644 --- a/src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp +++ b/src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp @@ -55,6 +55,7 @@ #include "gromacs/mdtypes/interaction_const.h" #include "gromacs/mdtypes/md_enums.h" #include "gromacs/mdtypes/mdatom.h" +#include "gromacs/mdtypes/nblist.h" #include "gromacs/simd/simd.h" #include "gromacs/utility/fatalerror.h" #include "gromacs/utility/arrayref.h" @@ -205,6 +206,8 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist, const t_forcerec* gmx_restrict fr, const t_mdatoms* gmx_restrict mdatoms, nb_kernel_data_t* gmx_restrict kernel_data, + gmx::ArrayRef energygrp_elec, + gmx::ArrayRef energygrp_vdw, t_nrnb* gmx_restrict nrnb) { #define STATE_A 0 @@ -237,14 +240,12 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist, const real* shiftvec = fr->shift_vec[0]; const real* chargeA = mdatoms->chargeA; const real* chargeB = mdatoms->chargeB; - real* Vc = kernel_data->energygrp_elec; const int* typeA = mdatoms->typeA; const int* typeB = mdatoms->typeB; const int ntype = fr->ntype; gmx::ArrayRef nbfp = fr->nbfp; gmx::ArrayRef nbfp_grid = fr->ljpme_c6grid; - real* Vv = kernel_data->energygrp_vdw; const real lambda_coul = kernel_data->lambda[static_cast(FreeEnergyPerturbationCouplingType::Coul)]; const real lambda_vdw = @@ -834,9 +835,9 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist, { int ggid = gid[n]; #pragma omp atomic - Vc[ggid] += vCTot; + energygrp_elec[ggid] += vCTot; #pragma omp atomic - Vv[ggid] += vVTot; + energygrp_vdw[ggid] += vVTot; } } } // end for (int n = 0; n < nri; n++) @@ -873,6 +874,8 @@ typedef void (*KernelFunction)(const t_nblist* gmx_restrict nlist, const t_forcerec* gmx_restrict fr, const t_mdatoms* gmx_restrict mdatoms, nb_kernel_data_t* gmx_restrict kernel_data, + gmx::ArrayRef energygrp_elec, + gmx::ArrayRef energygrp_vdw, t_nrnb* gmx_restrict nrnb); template @@ -994,6 +997,8 @@ void gmx_nb_free_energy_kernel(const t_nblist* nlist, const t_forcerec* fr, const t_mdatoms* mdatoms, nb_kernel_data_t* kernel_data, + gmx::ArrayRef energygrp_elec, + gmx::ArrayRef energygrp_vdw, t_nrnb* nrnb) { const interaction_const_t& ic = *fr->ic; @@ -1029,5 +1034,5 @@ void gmx_nb_free_energy_kernel(const t_nblist* nlist, vdwModifierIsPotSwitch, useSimd, ic); - kernelFunc(nlist, xx, ff, fr, mdatoms, kernel_data, nrnb); + kernelFunc(nlist, xx, ff, fr, mdatoms, kernel_data, energygrp_elec, energygrp_vdw, nrnb); } diff --git a/src/gromacs/gmxlib/nonbonded/nb_free_energy.h b/src/gromacs/gmxlib/nonbonded/nb_free_energy.h index ee78e7fe02..7d559e8714 100644 --- a/src/gromacs/gmxlib/nonbonded/nb_free_energy.h +++ b/src/gromacs/gmxlib/nonbonded/nb_free_energy.h @@ -3,7 +3,7 @@ * * Copyright (c) 1991-2000, University of Groningen, The Netherlands. * Copyright (c) 2001-2008, The GROMACS development team. - * Copyright (c) 2013,2014,2015,2018,2019,2020, by the GROMACS development team, led by + * Copyright (c) 2013,2014,2015,2018,2019,2020,2021, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -38,13 +38,14 @@ #ifndef _nb_free_energy_h_ #define _nb_free_energy_h_ -#include "gromacs/gmxlib/nrnb.h" #include "gromacs/gmxlib/nonbonded/nb_kernel.h" #include "gromacs/math/vectypes.h" -#include "gromacs/mdtypes/nblist.h" +#include "gromacs/utility/basedefinitions.h" struct t_forcerec; struct t_mdatoms; +struct t_nrnb; +struct t_nblist; namespace gmx { class ForceWithShiftForces; @@ -56,6 +57,8 @@ void gmx_nb_free_energy_kernel(const t_nblist* gmx_restrict nlist, const t_forcerec* gmx_restrict fr, const t_mdatoms* gmx_restrict mdatoms, nb_kernel_data_t* gmx_restrict kernel_data, + gmx::ArrayRef energygrp_elec, + gmx::ArrayRef energygrp_vdw, t_nrnb* gmx_restrict nrnb); #endif diff --git a/src/gromacs/gmxlib/nonbonded/nb_kernel.h b/src/gromacs/gmxlib/nonbonded/nb_kernel.h index c261d2652d..df4148feb0 100644 --- a/src/gromacs/gmxlib/nonbonded/nb_kernel.h +++ b/src/gromacs/gmxlib/nonbonded/nb_kernel.h @@ -36,44 +36,18 @@ #ifndef _nb_kernel_h_ #define _nb_kernel_h_ -#include - -#include "gromacs/gmxlib/nrnb.h" -#include "gromacs/math/vectypes.h" -#include "gromacs/mdtypes/nblist.h" #include "gromacs/utility/arrayref.h" #include "gromacs/utility/real.h" -struct t_blocka; -struct t_mdatoms; /* Structure to collect kernel data not available in forcerec or mdatoms structures. * This is only used inside the nonbonded module. */ -typedef struct +struct nb_kernel_data_t { int flags; - const struct t_blocka* exclusions; gmx::ArrayRef lambda; gmx::ArrayRef dvdl; - - /* pointers to tables */ - t_forcetable* table_elec; - t_forcetable* table_vdw; - t_forcetable* table_elec_vdw; - - /* potentials */ - real* energygrp_elec; - real* energygrp_vdw; -} nb_kernel_data_t; - - -typedef void nb_kernel_t(t_nblist* gmx_restrict nlist, - rvec* gmx_restrict x, - rvec* gmx_restrict f, - struct t_forcerec* gmx_restrict fr, - t_mdatoms* gmx_restrict mdatoms, - nb_kernel_data_t* gmx_restrict kernel_data, - t_nrnb* gmx_restrict nrnb); +}; #endif /* _nb_kernel_h_ */ diff --git a/src/gromacs/mdlib/sim_util.cpp b/src/gromacs/mdlib/sim_util.cpp index 30985796d9..7c51505a53 100644 --- a/src/gromacs/mdlib/sim_util.cpp +++ b/src/gromacs/mdlib/sim_util.cpp @@ -60,6 +60,7 @@ #include "gromacs/gmxlib/nonbonded/nb_free_energy.h" #include "gromacs/gmxlib/nonbonded/nb_kernel.h" #include "gromacs/gmxlib/nonbonded/nonbonded.h" +#include "gromacs/gmxlib/nrnb.h" #include "gromacs/gpu_utils/gpu_utils.h" #include "gromacs/imd/imd.h" #include "gromacs/listed_forces/disre.h" diff --git a/src/gromacs/nbnxm/kerneldispatch.cpp b/src/gromacs/nbnxm/kerneldispatch.cpp index 7cbfabfc78..85e1f65b21 100644 --- a/src/gromacs/nbnxm/kerneldispatch.cpp +++ b/src/gromacs/nbnxm/kerneldispatch.cpp @@ -51,6 +51,7 @@ #include "gromacs/mdtypes/interaction_const.h" #include "gromacs/mdtypes/md_enums.h" #include "gromacs/mdtypes/mdatom.h" +#include "gromacs/mdtypes/nblist.h" #include "gromacs/mdtypes/simulation_workload.h" #include "gromacs/nbnxm/gpu_data_mgmt.h" #include "gromacs/nbnxm/nbnxm.h" @@ -535,8 +536,8 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality iLo kernel_data.lambda = lambda; kernel_data.dvdl = dvdl_nb; - kernel_data.energygrp_elec = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR].data(); - kernel_data.energygrp_vdw = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR].data(); + gmx::ArrayRef energygrp_elec = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR]; + gmx::ArrayRef energygrp_vdw = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR]; GMX_ASSERT(gmx_omp_nthreads_get(emntNonbonded) == nbl_fep.ssize(), "Number of lists should be same as number of NB threads"); @@ -548,7 +549,7 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality iLo try { gmx_nb_free_energy_kernel( - nbl_fep[th].get(), x, forceWithShiftForces, fr, &mdatoms, &kernel_data, nrnb); + nbl_fep[th].get(), x, forceWithShiftForces, fr, &mdatoms, &kernel_data, energygrp_elec, energygrp_vdw, nrnb); } GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR } @@ -578,10 +579,10 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality iLo | GMX_NONBONDED_DO_FOREIGNLAMBDA; kernel_data.lambda = lam_i; kernel_data.dvdl = dvdl_nb; - kernel_data.energygrp_elec = - enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR].data(); - kernel_data.energygrp_vdw = - enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR].data(); + gmx::ArrayRef energygrp_elec = + enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR]; + gmx::ArrayRef energygrp_vdw = + enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR]; for (gmx::index i = 0; i < 1 + enerd->foreignLambdaTerms.numLambdas(); i++) { @@ -596,8 +597,15 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality iLo { try { - gmx_nb_free_energy_kernel( - nbl_fep[th].get(), x, forceWithShiftForces, fr, &mdatoms, &kernel_data, nrnb); + gmx_nb_free_energy_kernel(nbl_fep[th].get(), + x, + forceWithShiftForces, + fr, + &mdatoms, + &kernel_data, + energygrp_elec, + energygrp_vdw, + nrnb); } GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR }