From: Andrey Alekseenko Date: Thu, 15 Apr 2021 06:17:53 +0000 (+0000) Subject: Ensure coordinates are copied for dipole moment calculation X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=04550aba067d1ec4ba02a431abddaea90c1b7a3e;p=alexxy%2Fgromacs.git Ensure coordinates are copied for dipole moment calculation --- diff --git a/docs/release-notes/2021/2021.2.rst b/docs/release-notes/2021/2021.2.rst index 2dc166fe55..c60ee464af 100644 --- a/docs/release-notes/2021/2021.2.rst +++ b/docs/release-notes/2021/2021.2.rst @@ -16,6 +16,14 @@ in the :ref:`release-notes`. Fixes where mdrun could behave incorrectly ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Removed a potential race condition with GPU update +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Fixed possible (but so far unobserved) race condition in coordinate copy when +using GPU update with dipole moment calculation. + +:issue:`4024` + Fixes for ``gmx`` tools ^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/gromacs/mdlib/sim_util.cpp b/src/gromacs/mdlib/sim_util.cpp index 9ef783b67a..a235dbc1d5 100644 --- a/src/gromacs/mdlib/sim_util.cpp +++ b/src/gromacs/mdlib/sim_util.cpp @@ -3,7 +3,7 @@ * * Copyright (c) 1991-2000, University of Groningen, The Netherlands. * Copyright (c) 2001-2004, The GROMACS development team. - * Copyright (c) 2013-2019,2020, by the GROMACS development team, led by + * Copyright (c) 2013-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. @@ -1231,7 +1231,7 @@ void do_force(FILE* fplog, bool gmx_used_in_debug haveCopiedXFromGpu = false; if (simulationWork.useGpuUpdate && !stepWork.doNeighborSearch && (runScheduleWork->domainWork.haveCpuLocalForceWork || stepWork.computeVirial - || haveHostPmePpComms || haveHostHaloExchangeComms)) + || haveHostPmePpComms || haveHostHaloExchangeComms || simulationWork.computeMuTot)) { stateGpu->copyCoordinatesFromGpu(x.unpaddedArrayRef(), AtomLocality::Local); haveCopiedXFromGpu = true; @@ -1573,6 +1573,13 @@ void do_force(FILE* fplog, { const int start = 0; + if (simulationWork.useGpuUpdate && !stepWork.doNeighborSearch) + { + GMX_ASSERT(haveCopiedXFromGpu, + "a wait should only be triggered if copy has been scheduled"); + stateGpu->waitCoordinatesReadyOnHost(AtomLocality::Local); + } + /* Calculate total (local) dipole moment in a temporary common array. * This makes it possible to sum them over nodes faster. */