Commit 9f77efc2 authored by Peter Eastman's avatar Peter Eastman
Browse files

Bug fixes to OpenCL version of CustomManyParticleForce

parent 9cd18aeb
...@@ -5009,7 +5009,8 @@ double CudaCalcCustomManyParticleForceKernel::execute(ContextImpl& context, bool ...@@ -5009,7 +5009,8 @@ double CudaCalcCustomManyParticleForceKernel::execute(ContextImpl& context, bool
cu.executeKernel(startIndicesKernel, &startIndicesArgs[0], 256, 256, 256*sizeof(int)); cu.executeKernel(startIndicesKernel, &startIndicesArgs[0], 256, 256, 256*sizeof(int));
cu.executeKernel(copyPairsKernel, &copyPairsArgs[0], maxNeighborPairs); cu.executeKernel(copyPairsKernel, &copyPairsArgs[0], maxNeighborPairs);
} }
cu.executeKernel(forceKernel, &forceArgs[0], cu.getNumAtoms()*forceWorkgroupSize, forceWorkgroupSize); int maxThreads = min(cu.getNumAtoms()*forceWorkgroupSize, cu.getEnergyBuffer().getSize());
cu.executeKernel(forceKernel, &forceArgs[0], maxThreads, forceWorkgroupSize);
if (nonbondedMethod != NoCutoff) { if (nonbondedMethod != NoCutoff) {
// Make sure there was enough memory for the neighbor list. // Make sure there was enough memory for the neighbor list.
......
...@@ -5073,7 +5073,7 @@ double OpenCLCalcCustomManyParticleForceKernel::execute(ContextImpl& context, bo ...@@ -5073,7 +5073,7 @@ double OpenCLCalcCustomManyParticleForceKernel::execute(ContextImpl& context, bo
// Set arguments for the force kernel. // Set arguments for the force kernel.
int index = 0; int index = 0;
forceKernel.setArg<cl::Buffer>(index++, cl.getForce().getDeviceBuffer()); forceKernel.setArg<cl::Buffer>(index++, cl.getLongForceBuffer().getDeviceBuffer());
forceKernel.setArg<cl::Buffer>(index++, cl.getEnergyBuffer().getDeviceBuffer()); forceKernel.setArg<cl::Buffer>(index++, cl.getEnergyBuffer().getDeviceBuffer());
forceKernel.setArg<cl::Buffer>(index++, cl.getPosq().getDeviceBuffer()); forceKernel.setArg<cl::Buffer>(index++, cl.getPosq().getDeviceBuffer());
setPeriodicBoxSizeArg(cl, forceKernel, index++); setPeriodicBoxSizeArg(cl, forceKernel, index++);
...@@ -5175,7 +5175,8 @@ double OpenCLCalcCustomManyParticleForceKernel::execute(ContextImpl& context, bo ...@@ -5175,7 +5175,8 @@ double OpenCLCalcCustomManyParticleForceKernel::execute(ContextImpl& context, bo
cl.executeKernel(startIndicesKernel, 256, 256); cl.executeKernel(startIndicesKernel, 256, 256);
cl.executeKernel(copyPairsKernel, maxNeighborPairs); cl.executeKernel(copyPairsKernel, maxNeighborPairs);
} }
cl.executeKernel(forceKernel, cl.getNumAtoms()*forceWorkgroupSize, forceWorkgroupSize); int maxThreads = min(cl.getNumAtoms()*forceWorkgroupSize, cl.getEnergyBuffer().getSize());
cl.executeKernel(forceKernel, maxThreads, forceWorkgroupSize);
if (nonbondedMethod != NoCutoff) { if (nonbondedMethod != NoCutoff) {
// Make sure there was enough memory for the neighbor list. // Make sure there was enough memory for the neighbor list.
......
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
#pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable #pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable
/** /**
...@@ -82,7 +83,7 @@ __kernel void computeInteraction( ...@@ -82,7 +83,7 @@ __kernel void computeInteraction(
, __global int* restrict particleTypes, __global int* restrict orderIndex, __global int* restrict particleOrder , __global int* restrict particleTypes, __global int* restrict orderIndex, __global int* restrict particleOrder
#endif #endif
#ifdef USE_EXCLUSIONS #ifdef USE_EXCLUSIONS
, int* __global restrict exclusions, __global int* restrict exclusionStartIndex , __global int* restrict exclusions, __global int* restrict exclusionStartIndex
#endif #endif
PARAMETER_ARGUMENTS) { PARAMETER_ARGUMENTS) {
real energy = 0.0f; real energy = 0.0f;
......
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