Gromacs  2020.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
List of all members | Public Member Functions
gmx::GpuHaloExchange Class Reference

#include <gromacs/domdec/gpuhaloexchange.h>

Description

Manages GPU Halo Exchange object.

Public Member Functions

 GpuHaloExchange (gmx_domdec_t *dd, MPI_Comm mpi_comm_mysim, void *streamLocal, void *streamNonLocal)
 Creates GPU Halo Exchange object. More...
 
void reinitHalo (DeviceBuffer< float > d_coordinateBuffer, DeviceBuffer< float > d_forcesBuffer)
 Initialization for GPU halo exchange of coordinates buffer. More...
 
void communicateHaloCoordinates (const matrix box, GpuEventSynchronizer *coordinatesReadyOnDeviceEvent)
 GPU halo exchange of coordinates buffer. More...
 
void communicateHaloForces (bool accumulateForces)
 GPU halo exchange of force buffer. More...
 
GpuEventSynchronizergetForcesReadyOnDeviceEvent ()
 Get the event synchronizer for the forces ready on device. More...
 

Constructor & Destructor Documentation

gmx::GpuHaloExchange::GpuHaloExchange ( gmx_domdec_t *  dd,
MPI_Comm  mpi_comm_mysim,
void *  streamLocal,
void *  streamNonLocal 
)

Creates GPU Halo Exchange object.

Coordinate Halo exchange will be performed in StreamNonLocal, and the communicateHaloCoordinates method must be called before any subsequent operations that access non-local parts of the coordinate buffer (such as the non-local non-bonded kernels). It also must be called after the local coordinates buffer operations (where the coordinates are copied to the device and hence the coordinatesReadyOnDeviceEvent is recorded). Force Halo exchange will be performed in streamNonLocal (also potentally with buffer clearing in streamLocal)and the communicateHaloForces method must be called after the non-local buffer operations, after the local force buffer has been copied to the GPU (if CPU forces are present), and before the local buffer operations. The force halo exchange does not yet support virial steps.

Parameters
[in,out]dddomdec structure
[in]mpi_comm_mysimcommunicator used for simulation
[in]streamLocallocal NB CUDA stream.
[in]streamNonLocalnon-local NB CUDA stream.

Member Function Documentation

void gmx::GpuHaloExchange::communicateHaloCoordinates ( const matrix  box,
GpuEventSynchronizer coordinatesReadyOnDeviceEvent 
)

GPU halo exchange of coordinates buffer.

Must be called after local setCoordinates (which records an event when the coordinate data has been copied to the device).

Parameters
[in]boxCoordinate box (from which shifts will be constructed)
[in]coordinatesReadyOnDeviceEventevent recorded when coordinates have been copied to device
void gmx::GpuHaloExchange::communicateHaloForces ( bool  accumulateForces)

GPU halo exchange of force buffer.

Parameters
[in]accumulateForcesTrue if forces should accumulate, otherwise they are set
GpuEventSynchronizer* gmx::GpuHaloExchange::getForcesReadyOnDeviceEvent ( )

Get the event synchronizer for the forces ready on device.

Returns
The event to synchronize the stream that consumes forces on device.
void gmx::GpuHaloExchange::reinitHalo ( DeviceBuffer< float >  d_coordinateBuffer,
DeviceBuffer< float >  d_forcesBuffer 
)

Initialization for GPU halo exchange of coordinates buffer.

Parameters
[in]d_coordinateBufferpointer to coordinates buffer in GPU memory
[in]d_forcesBufferpointer to coordinates buffer in GPU memory

The documentation for this class was generated from the following file: