Have you tried initializing and releasing the CUDA context directly instead of using pycuda.autoinit ?
- bryan On Thu, Sep 8, 2011 at 4:20 PM, Matthew Graham <m...@cacr.caltech.edu> wrote: > Hi, > > I've made some progress in this by moving the GPU initialization and source > module compilation within the active function: > > class GPU(): > > def __init__(self): > self.kernel_code = '''...''' > > def culsp(self, data, params): > # Initialize GPU > import pycuda.autoinit > mod = compiler.SourceModule(self.kernel_code) > cuker = mod.get_function('culsp_kernel') > # Call function > cuker(data, params) > > When CherryPy receives an HTTP GET, it calls culsp with the data and > params. This now works the first time it is called when CherryPy is running > but subsequent calls give: > > mod = compiler.SourceModule(self.kernel_code) > File > "/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/pycuda-2011.1-py2.6-macosx-10.5-i386.egg/pycuda/compiler.py", > line 271, in __init__ > arch, code, cache_dir, include_dirs) > File > "/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/pycuda-2011.1-py2.6-macosx-10.5-i386.egg/pycuda/compiler.py", > line 218, in compile > arch = "sm_%d%d" % Context.get_device().compute_capability() > LogicError: cuCtxGetDevice failed: invalid context > > So it looks like with subsequent calls to the function (new thread), no > context can be established. I'm sure that there must a simple way to do > this? > > Cheers, > > Matthew > > > > On Sep 1, 2011, at 11:15 AM, Josh Bleecher Snyder wrote: > > > Perhaps CherryPy is spinning up new Python threads to handle the > > inbound requests, and the handle to the CUDA context doesn't transfer > > nicely across threads. > > > > I encountered a similar situation (in a different context), and ended > > up with a solution in which I have standalone single-threaded worker > > processes that do the GPU processing, and my request handler > > communicates with them to get actual processing done. Or perhaps > > CherryPy has a single-threaded mode... > > > > -josh > > > > > > > > On Thu, Sep 1, 2011 at 8:21 AM, Matthew Graham <m...@cacr.caltech.edu> > wrote: > >> Hi Andreas, > >> > >> In both cases, I am the user running the code. > >> > >> Cheers, > >> > >> Matthew > >> > >> > >> On Sep 1, 2011, at 5:06 AM, Andreas Kloeckner wrote: > >> > >>> Hi Matthew, > >>> Pu > >>> On Wed, 31 Aug 2011 22:10:33 -0700, Matthew Graham < > m...@cacr.caltech.edu> wrote: > >>>> I have some code that runs fine as a standalone routine; however, I > want to incorporate it as part of a web service using CherryPy as the > hosting framework. When I try and call it from a client, I get: > >>>> > >>>> [31/Aug/2011:21:56:38] 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 "tscs.py", line 124, in POST > >>>> response = self._analyze(data, kwargs) > >>>> File "tscs.py", line 83, in _analyze > >>>> row.append(self.stats[statid]['method'](data[id])) > >>>> File "/Users/mjg/Projects/python/kiss/statistics.py", line 268, in > gpuls > >>>> lsp = Culsp() > >>>> File "/Users/mjg/Projects/python/kiss/culsp.py", line 146, in > __init__ > >>>> mod = compiler.SourceModule(kernel_code) > >>>> File > "/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/pycuda-2011.1-py2.6-macosx-10.5-i386.egg/pycuda/compiler.py", > line 271, in __init__ > >>>> arch, code, cache_dir, include_dirs) > >>>> File > "/Library/Frameworks/Python.framework/Versions/6.0.0/lib/python2.6/site-packages/pycuda-2011.1-py2.6-macosx-10.5-i386.egg/pycuda/compiler.py", > line 218, in compile > >>>> arch = "sm_%d%d" % Context.get_device().compute_capability() > >>>> LogicError: cuCtxGetDevice failed: invalid context > >>>> > >>>> Any ideas? I'm running CUDA 4.0 and PyCUDA 2011.1.2. > >>> > >>> Have you run your code as the web user? (Often www-data, but maybe > >>> something different?) Does the same thing happen then? In any case, I > >>> suspect that this is some permissions/security issue. It might be > >>> helpful trying to replicate all the restrictions that web > >>> server-executed code has on it... > >>> > >>> HTH, > >>> Andreas > >> > >> > >> _______________________________________________ > >> PyCUDA mailing list > >> PyCUDA@tiker.net > >> http://lists.tiker.net/listinfo/pycuda > >> > > > > _______________________________________________ > > PyCUDA mailing list > > PyCUDA@tiker.net > > http://lists.tiker.net/listinfo/pycuda > > > > > _______________________________________________ > PyCUDA mailing list > PyCUDA@tiker.net > http://lists.tiker.net/listinfo/pycuda >
_______________________________________________ PyCUDA mailing list PyCUDA@tiker.net http://lists.tiker.net/listinfo/pycuda