From: ejjordan Date: Wed, 24 Mar 2021 08:14:07 +0000 (+0100) Subject: Remove nb_kernel_data_t X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=d5f634cd2276964d184ecf4490fc50b8116a40c5;p=alexxy%2Fgromacs.git Remove nb_kernel_data_t All data was copied from gmx_enerdata_t. Now use ArrayRefs to pass the parameters to the kernels. --- diff --git a/src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp b/src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp index d50377fa67..66adc9fc3e 100644 --- a/src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp +++ b/src/gromacs/gmxlib/nonbonded/nb_free_energy.cpp @@ -46,7 +46,6 @@ #include #include "gromacs/gmxlib/nrnb.h" -#include "gromacs/gmxlib/nonbonded/nb_kernel.h" #include "gromacs/gmxlib/nonbonded/nonbonded.h" #include "gromacs/math/functions.h" #include "gromacs/math/vec.h" @@ -205,9 +204,11 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist, gmx::ForceWithShiftForces* forceWithShiftForces, 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, + int flags, + gmx::ArrayRef lambda, + gmx::ArrayRef dvdl, + gmx::ArrayRef energygrp_elec, + gmx::ArrayRef energygrp_vdw, t_nrnb* gmx_restrict nrnb) { #define STATE_A 0 @@ -246,20 +247,17 @@ static void nb_free_energy_kernel(const t_nblist* gmx_restrict nlist, gmx::ArrayRef nbfp = fr->nbfp; gmx::ArrayRef nbfp_grid = fr->ljpme_c6grid; - const real lambda_coul = - kernel_data->lambda[static_cast(FreeEnergyPerturbationCouplingType::Coul)]; - const real lambda_vdw = - kernel_data->lambda[static_cast(FreeEnergyPerturbationCouplingType::Vdw)]; - gmx::ArrayRef dvdl = kernel_data->dvdl; - const auto& scParams = *ic->softCoreParameters; - const real alpha_coul = scParams.alphaCoulomb; - const real alpha_vdw = scParams.alphaVdw; - const real lam_power = scParams.lambdaPower; - const real sigma6_def = scParams.sigma6WithInvalidSigma; - const real sigma6_min = scParams.sigma6Minimum; - const bool doForces = ((kernel_data->flags & GMX_NONBONDED_DO_FORCE) != 0); - const bool doShiftForces = ((kernel_data->flags & GMX_NONBONDED_DO_SHIFTFORCE) != 0); - const bool doPotential = ((kernel_data->flags & GMX_NONBONDED_DO_POTENTIAL) != 0); + const real lambda_coul = lambda[static_cast(FreeEnergyPerturbationCouplingType::Coul)]; + const real lambda_vdw = lambda[static_cast(FreeEnergyPerturbationCouplingType::Vdw)]; + const auto& scParams = *ic->softCoreParameters; + const real alpha_coul = scParams.alphaCoulomb; + const real alpha_vdw = scParams.alphaVdw; + const real lam_power = scParams.lambdaPower; + const real sigma6_def = scParams.sigma6WithInvalidSigma; + const real sigma6_min = scParams.sigma6Minimum; + const bool doForces = ((flags & GMX_NONBONDED_DO_FORCE) != 0); + const bool doShiftForces = ((flags & GMX_NONBONDED_DO_SHIFTFORCE) != 0); + const bool doPotential = ((flags & GMX_NONBONDED_DO_POTENTIAL) != 0); // Extract data from interaction_const_t const real facel = ic->epsfac; @@ -873,9 +871,11 @@ typedef void (*KernelFunction)(const t_nblist* gmx_restrict nlist, gmx::ForceWithShiftForces* forceWithShiftForces, 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, + int flags, + gmx::ArrayRef lambda, + gmx::ArrayRef dvdl, + gmx::ArrayRef energygrp_elec, + gmx::ArrayRef energygrp_vdw, t_nrnb* gmx_restrict nrnb); template @@ -996,7 +996,9 @@ void gmx_nb_free_energy_kernel(const t_nblist* nlist, gmx::ForceWithShiftForces* ff, const t_forcerec* fr, const t_mdatoms* mdatoms, - nb_kernel_data_t* kernel_data, + int flags, + gmx::ArrayRef lambda, + gmx::ArrayRef dvdl, gmx::ArrayRef energygrp_elec, gmx::ArrayRef energygrp_vdw, t_nrnb* nrnb) @@ -1019,8 +1021,8 @@ void gmx_nb_free_energy_kernel(const t_nblist* nlist, } else { - if (kernel_data->lambda[static_cast(FreeEnergyPerturbationCouplingType::Coul)] - == kernel_data->lambda[static_cast(FreeEnergyPerturbationCouplingType::Vdw)] + if (lambda[static_cast(FreeEnergyPerturbationCouplingType::Coul)] + == lambda[static_cast(FreeEnergyPerturbationCouplingType::Vdw)] && scParams.alphaCoulomb == scParams.alphaVdw) { scLambdasOrAlphasDiffer = false; @@ -1034,5 +1036,5 @@ void gmx_nb_free_energy_kernel(const t_nblist* nlist, vdwModifierIsPotSwitch, useSimd, ic); - kernelFunc(nlist, xx, ff, fr, mdatoms, kernel_data, energygrp_elec, energygrp_vdw, nrnb); + kernelFunc(nlist, xx, ff, fr, mdatoms, flags, lambda, dvdl, 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 7d559e8714..d3cf9f546e 100644 --- a/src/gromacs/gmxlib/nonbonded/nb_free_energy.h +++ b/src/gromacs/gmxlib/nonbonded/nb_free_energy.h @@ -38,7 +38,6 @@ #ifndef _nb_free_energy_h_ #define _nb_free_energy_h_ -#include "gromacs/gmxlib/nonbonded/nb_kernel.h" #include "gromacs/math/vectypes.h" #include "gromacs/utility/basedefinitions.h" @@ -49,16 +48,20 @@ struct t_nblist; namespace gmx { class ForceWithShiftForces; -} +template +class ArrayRef; +} // namespace gmx void gmx_nb_free_energy_kernel(const t_nblist* gmx_restrict nlist, rvec* gmx_restrict xx, gmx::ForceWithShiftForces* forceWithShiftForces, 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, + int flags, + gmx::ArrayRef lambda, + gmx::ArrayRef dvdl, + 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 deleted file mode 100644 index df4148feb0..0000000000 --- a/src/gromacs/gmxlib/nonbonded/nb_kernel.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This file is part of the GROMACS molecular simulation package. - * - * Copyright (c) 2012,2014,2015,2017,2018 by the GROMACS development team. - * Copyright (c) 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. - * - * GROMACS is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 - * of the License, or (at your option) any later version. - * - * GROMACS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with GROMACS; if not, see - * http://www.gnu.org/licenses, or write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * If you want to redistribute modifications to GROMACS, please - * consider that scientific software is very special. Version - * control is crucial - bugs must be traceable. We will be happy to - * consider code for inclusion in the official distribution, but - * derived work must not be called official GROMACS. Details are found - * in the README & COPYING files - if they are missing, get the - * official version at http://www.gromacs.org. - * - * To help us fund GROMACS development, we humbly ask that you cite - * the research papers on the package. Check out http://www.gromacs.org. - */ -#ifndef _nb_kernel_h_ -#define _nb_kernel_h_ - -#include "gromacs/utility/arrayref.h" -#include "gromacs/utility/real.h" - - -/* Structure to collect kernel data not available in forcerec or mdatoms structures. - * This is only used inside the nonbonded module. - */ -struct nb_kernel_data_t -{ - int flags; - gmx::ArrayRef lambda; - gmx::ArrayRef dvdl; -}; - -#endif /* _nb_kernel_h_ */ diff --git a/src/gromacs/mdlib/sim_util.cpp b/src/gromacs/mdlib/sim_util.cpp index 7c51505a53..8850f06ac6 100644 --- a/src/gromacs/mdlib/sim_util.cpp +++ b/src/gromacs/mdlib/sim_util.cpp @@ -58,7 +58,6 @@ #include "gromacs/ewald/pme_pp_comm_gpu.h" #include "gromacs/gmxlib/network.h" #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" diff --git a/src/gromacs/nbnxm/kerneldispatch.cpp b/src/gromacs/nbnxm/kerneldispatch.cpp index 85e1f65b21..ca88b0a5b6 100644 --- a/src/gromacs/nbnxm/kerneldispatch.cpp +++ b/src/gromacs/nbnxm/kerneldispatch.cpp @@ -38,7 +38,6 @@ #include "gromacs/gmxlib/nrnb.h" #include "gromacs/gmxlib/nonbonded/nb_free_energy.h" -#include "gromacs/gmxlib/nonbonded/nb_kernel.h" #include "gromacs/gmxlib/nonbonded/nonbonded.h" #include "gromacs/math/vectypes.h" #include "gromacs/mdlib/enerdata_utils.h" @@ -530,11 +529,10 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality iLo donb_flags |= GMX_NONBONDED_DO_POTENTIAL; } - nb_kernel_data_t kernel_data; - gmx::EnumerationArray dvdl_nb = { 0 }; - kernel_data.flags = donb_flags; - kernel_data.lambda = lambda; - kernel_data.dvdl = dvdl_nb; + gmx::EnumerationArray dvdl_nb = { 0 }; + int kernelFlags = donb_flags; + gmx::ArrayRef kernelLambda = lambda; + gmx::ArrayRef kernelDvdl = dvdl_nb; gmx::ArrayRef energygrp_elec = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR]; gmx::ArrayRef energygrp_vdw = enerd->grpp.energyGroupPairTerms[NonBondedEnergyTerms::LJSR]; @@ -548,8 +546,17 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality iLo { try { - gmx_nb_free_energy_kernel( - nbl_fep[th].get(), x, forceWithShiftForces, fr, &mdatoms, &kernel_data, energygrp_elec, energygrp_vdw, nrnb); + gmx_nb_free_energy_kernel(nbl_fep[th].get(), + x, + forceWithShiftForces, + fr, + &mdatoms, + kernelFlags, + kernelLambda, + kernelDvdl, + energygrp_elec, + energygrp_vdw, + nrnb); } GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR } @@ -575,10 +582,10 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality iLo if (fepvals->n_lambda > 0 && stepWork.computeDhdl && fepvals->sc_alpha != 0) { gmx::EnumerationArray lam_i; - kernel_data.flags = (donb_flags & ~(GMX_NONBONDED_DO_FORCE | GMX_NONBONDED_DO_SHIFTFORCE)) - | GMX_NONBONDED_DO_FOREIGNLAMBDA; - kernel_data.lambda = lam_i; - kernel_data.dvdl = dvdl_nb; + kernelFlags = (donb_flags & ~(GMX_NONBONDED_DO_FORCE | GMX_NONBONDED_DO_SHIFTFORCE)) + | GMX_NONBONDED_DO_FOREIGNLAMBDA; + kernelLambda = lam_i; + kernelDvdl = dvdl_nb; gmx::ArrayRef energygrp_elec = enerd->foreign_grpp.energyGroupPairTerms[NonBondedEnergyTerms::CoulombSR]; gmx::ArrayRef energygrp_vdw = @@ -602,7 +609,9 @@ void nonbonded_verlet_t::dispatchFreeEnergyKernel(gmx::InteractionLocality iLo forceWithShiftForces, fr, &mdatoms, - &kernel_data, + kernelFlags, + kernelLambda, + kernelDvdl, energygrp_elec, energygrp_vdw, nrnb);