Commit 7177e2ad authored by peastman's avatar peastman
Browse files

Fixed a memory leak in OpenCL platform on Nvidia GPUs

parent b32e5832
...@@ -1436,10 +1436,11 @@ private: ...@@ -1436,10 +1436,11 @@ private:
class OpenCLCalcNonbondedForceKernel::SyncQueuePreComputation : public OpenCLContext::ForcePreComputation { class OpenCLCalcNonbondedForceKernel::SyncQueuePreComputation : public OpenCLContext::ForcePreComputation {
public: public:
SyncQueuePreComputation(OpenCLContext& cl, cl::CommandQueue queue, int forceGroup) : cl(cl), queue(queue), events(1), forceGroup(forceGroup) { SyncQueuePreComputation(OpenCLContext& cl, cl::CommandQueue queue, int forceGroup) : cl(cl), queue(queue), forceGroup(forceGroup) {
} }
void computeForceAndEnergy(bool includeForces, bool includeEnergy, int groups) { void computeForceAndEnergy(bool includeForces, bool includeEnergy, int groups) {
if ((groups&(1<<forceGroup)) != 0) { if ((groups&(1<<forceGroup)) != 0) {
vector<cl::Event> events(1);
cl.getQueue().enqueueMarker(&events[0]); cl.getQueue().enqueueMarker(&events[0]);
queue.enqueueWaitForEvents(events); queue.enqueueWaitForEvents(events);
} }
...@@ -1447,17 +1448,18 @@ public: ...@@ -1447,17 +1448,18 @@ public:
private: private:
OpenCLContext& cl; OpenCLContext& cl;
cl::CommandQueue queue; cl::CommandQueue queue;
vector<cl::Event> events;
int forceGroup; int forceGroup;
}; };
class OpenCLCalcNonbondedForceKernel::SyncQueuePostComputation : public OpenCLContext::ForcePostComputation { class OpenCLCalcNonbondedForceKernel::SyncQueuePostComputation : public OpenCLContext::ForcePostComputation {
public: public:
SyncQueuePostComputation(OpenCLContext& cl, cl::Event& event, int forceGroup) : cl(cl), event(event), events(1), forceGroup(forceGroup) { SyncQueuePostComputation(OpenCLContext& cl, cl::Event& event, int forceGroup) : cl(cl), event(event), forceGroup(forceGroup) {
} }
double computeForceAndEnergy(bool includeForces, bool includeEnergy, int groups) { double computeForceAndEnergy(bool includeForces, bool includeEnergy, int groups) {
if ((groups&(1<<forceGroup)) != 0) { if ((groups&(1<<forceGroup)) != 0) {
vector<cl::Event> events(1);
events[0] = event; events[0] = event;
event = cl::Event();
cl.getQueue().enqueueWaitForEvents(events); cl.getQueue().enqueueWaitForEvents(events);
} }
return 0.0; return 0.0;
...@@ -1465,7 +1467,6 @@ public: ...@@ -1465,7 +1467,6 @@ public:
private: private:
OpenCLContext& cl; OpenCLContext& cl;
cl::Event& event; cl::Event& event;
vector<cl::Event> events;
int forceGroup; int forceGroup;
}; };
......
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