Commit f03d9ae2 authored by Peter Eastman's avatar Peter Eastman
Browse files

Use separate events for different stream synchronizations

parent 049db77b
...@@ -701,7 +701,7 @@ private: ...@@ -701,7 +701,7 @@ private:
Kernel cpuPme; Kernel cpuPme;
PmeIO* pmeio; PmeIO* pmeio;
CUstream pmeStream; CUstream pmeStream;
CUevent pmeSyncEvent; CUevent pmeSyncEvent, paramsSyncEvent;
CudaFFT3D* fft; CudaFFT3D* fft;
cufftHandle fftForward; cufftHandle fftForward;
cufftHandle fftBackward; cufftHandle fftBackward;
......
...@@ -1561,6 +1561,7 @@ CudaCalcNonbondedForceKernel::~CudaCalcNonbondedForceKernel() { ...@@ -1561,6 +1561,7 @@ CudaCalcNonbondedForceKernel::~CudaCalcNonbondedForceKernel() {
if (usePmeStream) { if (usePmeStream) {
cuStreamDestroy(pmeStream); cuStreamDestroy(pmeStream);
cuEventDestroy(pmeSyncEvent); cuEventDestroy(pmeSyncEvent);
cuEventDestroy(paramsSyncEvent);
} }
} }
} }
...@@ -1862,6 +1863,7 @@ void CudaCalcNonbondedForceKernel::initialize(const System& system, const Nonbon ...@@ -1862,6 +1863,7 @@ void CudaCalcNonbondedForceKernel::initialize(const System& system, const Nonbon
cufftSetStream(dispersionFftBackward, pmeStream); cufftSetStream(dispersionFftBackward, pmeStream);
} }
CHECK_RESULT(cuEventCreate(&pmeSyncEvent, CU_EVENT_DISABLE_TIMING), "Error creating event for NonbondedForce"); CHECK_RESULT(cuEventCreate(&pmeSyncEvent, CU_EVENT_DISABLE_TIMING), "Error creating event for NonbondedForce");
CHECK_RESULT(cuEventCreate(&paramsSyncEvent, CU_EVENT_DISABLE_TIMING), "Error creating event for NonbondedForce");
int recipForceGroup = force.getReciprocalSpaceForceGroup(); int recipForceGroup = force.getReciprocalSpaceForceGroup();
if (recipForceGroup < 0) if (recipForceGroup < 0)
recipForceGroup = force.getForceGroup(); recipForceGroup = force.getForceGroup();
...@@ -2110,8 +2112,8 @@ double CudaCalcNonbondedForceKernel::execute(ContextImpl& context, bool includeF ...@@ -2110,8 +2112,8 @@ double CudaCalcNonbondedForceKernel::execute(ContextImpl& context, bool includeF
} }
cu.executeKernel(computeParamsKernel, &paramsArgs[0], cu.getPaddedNumAtoms()); cu.executeKernel(computeParamsKernel, &paramsArgs[0], cu.getPaddedNumAtoms());
if (usePmeStream) { if (usePmeStream) {
cuEventRecord(pmeSyncEvent, cu.getCurrentStream()); cuEventRecord(paramsSyncEvent, cu.getCurrentStream());
cuStreamWaitEvent(pmeStream, pmeSyncEvent, 0); cuStreamWaitEvent(pmeStream, paramsSyncEvent, 0);
} }
energy = 0.0; // The Ewald self energy was computed in the kernel. energy = 0.0; // The Ewald self energy was computed in the kernel.
recomputeParams = false; recomputeParams = false;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment