#include <gromacs/ewald/pme_pp_comm_gpu_impl.h>
Class with interfaces and data for GPU version of PME-PP Communication.
Impl class stub.
|
| Impl (MPI_Comm comm, int pmeRank, gmx::HostVector< gmx::RVec > *pmeCpuForceBuffer, const DeviceContext &deviceContext, const DeviceStream &deviceStream, bool useNvshmem) |
| Creates PME-PP GPU communication object. More...
|
|
void | reinit (int size) |
| Perform steps required when buffer size changes. More...
|
|
void | receiveForceFromPme (Float3 *recvPtr, int recvSize, bool receivePmeForceToGpu) |
| Pull force buffer directly from GPU memory on PME rank to either GPU or CPU memory on PP task using CUDA Memory copy or GPU-aware MPI. More...
|
|
void | sendCoordinatesToPme (Float3 *sendPtr, int sendSize, GpuEventSynchronizer *coordinatesReadyOnDeviceEvent) |
| Push coordinates buffer directly to GPU memory on PME task, from either GPU or CPU memory on PP task using CUDA Memory copy or GPU-aware MPI. If sending from GPU, this method should be called after the local GPU coordinate buffer operations. The remote PME task will automatically wait for data to be copied before commencing PME force calculations. More...
|
|
DeviceBuffer< Float3 > | getGpuForceStagingPtr () |
| Return pointer to buffer used for staging PME force on GPU.
|
|
GpuEventSynchronizer * | getForcesReadySynchronizer () |
| Return pointer to event recorded when forces are ready.
|
|
DeviceBuffer< uint64_t > | getGpuForcesSyncObj () |
| Return pointer to NVSHMEM sync object used for staging PME force on GPU.
|
|
gmx::PmePpCommGpu::Impl::Impl |
( |
MPI_Comm |
comm, |
|
|
int |
pmeRank, |
|
|
gmx::HostVector< gmx::RVec > * |
pmeCpuForceBuffer, |
|
|
const DeviceContext & |
deviceContext, |
|
|
const DeviceStream & |
deviceStream, |
|
|
bool |
useNvshmem |
|
) |
| |
Creates PME-PP GPU communication object.
- Parameters
-
[in] | comm | Communicator used for simulation |
[in] | pmeRank | Rank of PME task |
[in] | pmeCpuForceBuffer | Buffer for PME force in CPU memory |
[in] | deviceContext | GPU context. |
[in] | deviceStream | GPU stream. |
[in] | useNvshmem | NVSHMEM enable/disable for GPU comm. |
void gmx::PmePpCommGpu::Impl::receiveForceFromPme |
( |
Float3 * |
recvPtr, |
|
|
int |
recvSize, |
|
|
bool |
receivePmeForceToGpu |
|
) |
| |
Pull force buffer directly from GPU memory on PME rank to either GPU or CPU memory on PP task using CUDA Memory copy or GPU-aware MPI.
recvPtr should be in GPU or CPU memory if recvPmeForceToGpu is true or false, respectively. If receiving to GPU, this method should be called before the local GPU buffer operations. If receiving to CPU it should be called before forces are reduced with the other force contributions on the CPU. It will automatically wait for remote PME force data to be ready.
- Parameters
-
[out] | recvPtr | CPU or GPU buffer to receive PME force data |
[in] | recvSize | Number of elements to receive |
[in] | receivePmeForceToGpu | Whether receive is to GPU, otherwise CPU |
void gmx::PmePpCommGpu::Impl::reinit |
( |
int |
size | ) |
|
Perform steps required when buffer size changes.
- Parameters
-
[in] | size | Number of elements in buffer |
void gmx::PmePpCommGpu::Impl::sendCoordinatesToPme |
( |
Float3 * |
sendPtr, |
|
|
int |
sendSize, |
|
|
GpuEventSynchronizer * |
coordinatesReadyOnDeviceEvent |
|
) |
| |
Push coordinates buffer directly to GPU memory on PME task, from either GPU or CPU memory on PP task using CUDA Memory copy or GPU-aware MPI. If sending from GPU, this method should be called after the local GPU coordinate buffer operations. The remote PME task will automatically wait for data to be copied before commencing PME force calculations.
- Parameters
-
[in] | sendPtr | Buffer with coordinate data |
[in] | sendSize | Number of elements to send |
[in] | coordinatesReadyOnDeviceEvent | Event recorded when coordinates are available on device |
The documentation for this class was generated from the following files: