Commit 8365dede authored by Peter Eastman's avatar Peter Eastman
Browse files

Fixed two bugs

parent cc5467e7
...@@ -60,6 +60,7 @@ OpenCLContext::OpenCLContext(int numParticles, int deviceIndex) : time(0.0), ste ...@@ -60,6 +60,7 @@ OpenCLContext::OpenCLContext(int numParticles, int deviceIndex) : time(0.0), ste
if (deviceIndex == -1) if (deviceIndex == -1)
throw OpenMMException("No compatible OpenCL device is available"); throw OpenMMException("No compatible OpenCL device is available");
device = devices[deviceIndex]; device = devices[deviceIndex];
this->deviceIndex = deviceIndex;
if (device.getInfo<CL_DEVICE_MAX_WORK_GROUP_SIZE>() < minThreadBlockSize) if (device.getInfo<CL_DEVICE_MAX_WORK_GROUP_SIZE>() < minThreadBlockSize)
throw OpenMMException("The specified OpenCL device is not compatible with OpenMM"); throw OpenMMException("The specified OpenCL device is not compatible with OpenMM");
compilationOptions = "-cl-fast-relaxed-math"; compilationOptions = "-cl-fast-relaxed-math";
......
...@@ -97,6 +97,12 @@ public: ...@@ -97,6 +97,12 @@ public:
cl::Device& getDevice() { cl::Device& getDevice() {
return device; return device;
} }
/**
* Get the index of the cl::Device associated with this object.
*/
int getDeviceIndex() {
return deviceIndex;
}
/** /**
* Get the cl::CommandQueue associated with this object. * Get the cl::CommandQueue associated with this object.
*/ */
...@@ -286,6 +292,7 @@ private: ...@@ -286,6 +292,7 @@ private:
void findMoleculeGroups(const System& system); void findMoleculeGroups(const System& system);
static void tagAtomsInMolecule(int atom, int molecule, std::vector<int>& atomMolecule, std::vector<std::vector<int> >& atomBonds); static void tagAtomsInMolecule(int atom, int molecule, std::vector<int>& atomMolecule, std::vector<std::vector<int> >& atomBonds);
double time; double time;
int deviceIndex;
int stepCount; int stepCount;
int computeForceCount; int computeForceCount;
int numAtoms; int numAtoms;
......
...@@ -1140,7 +1140,7 @@ void OpenCLCalcGBSAOBCForceKernel::executeForces(ContextImpl& context) { ...@@ -1140,7 +1140,7 @@ void OpenCLCalcGBSAOBCForceKernel::executeForces(ContextImpl& context) {
program = cl.createProgram(cl.loadSourceFromFile("gbsaObcReductions.cl"), defines); program = cl.createProgram(cl.loadSourceFromFile("gbsaObcReductions.cl"), defines);
reduceBornSumKernel = cl::Kernel(program, "reduceBornSum"); reduceBornSumKernel = cl::Kernel(program, "reduceBornSum");
reduceBornSumKernel.setArg<cl_int>(0, cl.getPaddedNumAtoms()); reduceBornSumKernel.setArg<cl_int>(0, cl.getPaddedNumAtoms());
reduceBornSumKernel.setArg<cl_int>(1, cl.getNumForceBuffers()); reduceBornSumKernel.setArg<cl_int>(1, nb.getNumForceBuffers());
reduceBornSumKernel.setArg<cl_float>(2, 1.0f); reduceBornSumKernel.setArg<cl_float>(2, 1.0f);
reduceBornSumKernel.setArg<cl_float>(3, 0.8f); reduceBornSumKernel.setArg<cl_float>(3, 0.8f);
reduceBornSumKernel.setArg<cl_float>(4, 4.85f); reduceBornSumKernel.setArg<cl_float>(4, 4.85f);
...@@ -1150,7 +1150,7 @@ void OpenCLCalcGBSAOBCForceKernel::executeForces(ContextImpl& context) { ...@@ -1150,7 +1150,7 @@ void OpenCLCalcGBSAOBCForceKernel::executeForces(ContextImpl& context) {
reduceBornSumKernel.setArg<cl::Buffer>(8, obcChain->getDeviceBuffer()); reduceBornSumKernel.setArg<cl::Buffer>(8, obcChain->getDeviceBuffer());
reduceBornForceKernel = cl::Kernel(program, "reduceBornForce"); reduceBornForceKernel = cl::Kernel(program, "reduceBornForce");
reduceBornForceKernel.setArg<cl_int>(0, cl.getPaddedNumAtoms()); reduceBornForceKernel.setArg<cl_int>(0, cl.getPaddedNumAtoms());
reduceBornForceKernel.setArg<cl_int>(1, cl.getNumForceBuffers()); reduceBornForceKernel.setArg<cl_int>(1, nb.getNumForceBuffers());
reduceBornForceKernel.setArg<cl::Buffer>(2, bornForce->getDeviceBuffer()); reduceBornForceKernel.setArg<cl::Buffer>(2, bornForce->getDeviceBuffer());
reduceBornForceKernel.setArg<cl::Buffer>(3, cl.getEnergyBuffer().getDeviceBuffer()); reduceBornForceKernel.setArg<cl::Buffer>(3, cl.getEnergyBuffer().getDeviceBuffer());
reduceBornForceKernel.setArg<cl::Buffer>(4, params->getDeviceBuffer()); reduceBornForceKernel.setArg<cl::Buffer>(4, params->getDeviceBuffer());
......
...@@ -93,13 +93,12 @@ void OpenCLPlatform::contextCreated(ContextImpl& context) const { ...@@ -93,13 +93,12 @@ void OpenCLPlatform::contextCreated(ContextImpl& context) const {
void OpenCLPlatform::contextDestroyed(ContextImpl& context) const { void OpenCLPlatform::contextDestroyed(ContextImpl& context) const {
PlatformData* data = reinterpret_cast<PlatformData*>(context.getPlatformData()); PlatformData* data = reinterpret_cast<PlatformData*>(context.getPlatformData());
// gpuShutDown(data->gpu);
delete data; delete data;
} }
OpenCLPlatform::PlatformData::PlatformData(int numParticles, int deviceIndex) : removeCM(false), stepCount(0), computeForceCount(0), time(0.0) { OpenCLPlatform::PlatformData::PlatformData(int numParticles, int deviceIndex) : removeCM(false), stepCount(0), computeForceCount(0), time(0.0) {
context = new OpenCLContext(numParticles, deviceIndex); context = new OpenCLContext(numParticles, deviceIndex);
stringstream device; stringstream device;
// device << gpu->device; device << context->getDeviceIndex();
propertyValues[OpenCLPlatform::OpenCLDeviceIndex()] = device.str(); propertyValues[OpenCLPlatform::OpenCLDeviceIndex()] = device.str();
} }
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