pmeForcesReady_(pmeForcesReady),
comm_(comm),
ppRanks_(ppRanks),
- deviceContext_(deviceContext),
ppCommStream_(ppRanks.size()),
ppCommEvent_(ppRanks.size()),
- pmeRemoteGpuForcePtr_(ppRanks.size()),
- pmeRemoteCpuForcePtr_(ppRanks.size())
+ deviceContext_(deviceContext),
+ pmeRemoteCpuForcePtr_(ppRanks.size()),
+ pmeRemoteGpuForcePtr_(ppRanks.size())
{
// Create streams and events to manage pushing of force buffers to remote PP ranks
std::unique_ptr<DeviceStream> stream;
*/
PmePpCommGpu(MPI_Comm comm,
int pmeRank,
- std::vector<gmx::RVec>& pmeCpuForceBuffer,
+ std::vector<gmx::RVec>* pmeCpuForceBuffer,
const DeviceContext& deviceContext,
const DeviceStream& deviceStream);
~PmePpCommGpu();
/*!\brief Constructor stub. */
PmePpCommGpu::PmePpCommGpu(MPI_Comm /* comm */,
int /* pmeRank */,
- std::vector<gmx::RVec>& /* pmeCpuForceBuffer */,
+ std::vector<gmx::RVec>* /* pmeCpuForceBuffer */,
const DeviceContext& /* deviceContext */,
const DeviceStream& /* deviceStream */) :
impl_(nullptr)
PmePpCommGpu::Impl::Impl(MPI_Comm comm,
int pmeRank,
- std::vector<gmx::RVec>& pmeCpuForceBuffer,
+ std::vector<gmx::RVec>* pmeCpuForceBuffer,
const DeviceContext& deviceContext,
const DeviceStream& deviceStream) :
deviceContext_(deviceContext),
MPI_Recv(&remotePmeXBuffer_, sizeof(float3*), MPI_BYTE, pmeRank_, 0, comm_, MPI_STATUS_IGNORE);
// send host and device force buffer addresses to PME rank
MPI_Send(&d_pmeForces_, sizeof(float3*), MPI_BYTE, pmeRank_, 0, comm_);
- RVec* pmeCpuForceBufferData = pmeCpuForceBuffer_.data();
+ RVec* pmeCpuForceBufferData = pmeCpuForceBuffer_->data();
MPI_Send(&pmeCpuForceBufferData, sizeof(RVec*), MPI_BYTE, pmeRank_, 0, comm_);
}
PmePpCommGpu::PmePpCommGpu(MPI_Comm comm,
int pmeRank,
- std::vector<gmx::RVec>& pmeCpuForceBuffer,
+ std::vector<gmx::RVec>* pmeCpuForceBuffer,
const DeviceContext& deviceContext,
const DeviceStream& deviceStream) :
impl_(new Impl(comm, pmeRank, pmeCpuForceBuffer, deviceContext, deviceStream))
*/
Impl(MPI_Comm comm,
int pmeRank,
- std::vector<gmx::RVec>& pmeCpuForceBuffer,
+ std::vector<gmx::RVec>* pmeCpuForceBuffer,
const DeviceContext& deviceContext,
const DeviceStream& deviceStream);
~Impl();
//! Rank of PME task
int pmeRank_ = -1;
//! Buffer for PME force on CPU
- std::vector<gmx::RVec>& pmeCpuForceBuffer_;
+ std::vector<gmx::RVec>* pmeCpuForceBuffer_;
//! Buffer for staging PME force on GPU
DeviceBuffer<gmx::RVec> d_pmeForces_;
//! number of atoms in PME force staging array
fr->pmePpCommGpu = std::make_unique<gmx::PmePpCommGpu>(
cr->mpi_comm_mysim,
cr->dd->pme_nodeid,
- cr->dd->pmeForceReceiveBuffer,
+ &cr->dd->pmeForceReceiveBuffer,
deviceStreamManager->context(),
deviceStreamManager->stream(DeviceStreamType::PmePpTransfer));
}