[PyCUDA] Successive calls not freeing memory
Matthew Graham
mjg at cacr.caltech.edu
Tue Oct 11 17:41:56 PDT 2011
Hi,
I'm making successive calls to a function with each call requiring an initialization and a release of the CUDA context. However, memory on the device is not getting freed between calls. What I have in a call is:
driver.init()
dev = driver.Device(num)
context = dev.make_context()
print driver.mem_get_info()
mod = compiler.SourceModule(code)
... # application logic here
context.pop()
and this is showing:
Obj 1
(195731456, 265945088)
(182132736, 265945088)
(168099840, 265945088)
(154075136, 265945088)
Obj 2
(140050432, 265945088)
(126025728, 265945088)
(112001024, 265945088)
(98009088, 265945088)
Obj 3
(83984384, 265945088)
Obj 4
(69959680, 265945088)
(55934976, 265945088)
(41517056, 265945088)
(26443776, 265945088)
Obj 5
[11/Oct/2011:16:23:57] HTTP Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/cherrypy/_cprequest.py", line 606, in respond
cherrypy.response.body = self.handler()
File "/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/cherrypy/_cpdispatch.py", line 25, in __call__
return self.callable(*self.args, **self.kwargs)
File "/Users/mjg/Projects/python/kiss/culsp.py", line 203, in culsp
context = dev.make_context()
MemoryError: cuCtxCreate failed: out of memory
I've tried to put in del calls for the gpuarrays used after popping the context (as per the 2DFFT and MultipleThreads example codes) but this is not doing anything. How can I release the memory on the device between calls?
Cheers,
Matthew
More information about the PyCUDA
mailing list