title: Python Multiprocessing with PyCUDA
body: <p>I've got a problem that I want to split across multiple CUDA devices, but I suspect my current system architecture is holding me back; </p>
  
  <p>What I've set up is a GPU class, with functions that perform operations on the GPU (strange that). These operations are of the style</p>
  
  <pre><code>for iteration in range(maxval):
      result[iteration]=gpuinstance.gpufunction(arguments,iteration)
  </code></pre>
  
  <p>I'd imagined that there would be N gpuinstances for N devices, but I don't know enough about multiprocessing to see the simplest way of applying this so that each device is asynchronously assigned, and strangely few of the examples that I came across gave concrete demonstrations of collating results after processing.</p>
  
  <p>Can anyone give me any pointers in this area?</p>
  
  <p><strong>UPDATE</strong>
  Thank you Kaloyan for your guidance in terms of the multiprocessing area; if CUDA wasn't specifically the sticking point I'd be marking you as answered. Sorry. </p>
  
  <p>Perviously to playing with this implementation, the gpuinstance class initiated the CUDA device with <code>import pycuda.autoinit</code> But that didn't appear to work, throwing <code>invalid context</code> errors as soon as each (correctly scoped) thread met a cuda command. I then tried manual initialisation in the <code>__init__</code> constructor of the class with...</p>
  
  <pre><code>pycuda.driver.init()
  self.mydev=pycuda.driver.Device(devid) #this is passed at instantiation of class
  self.ctx=self.mydev.make_context()
  self.ctx.push()    
  </code></pre>
  
  <p>My assumption here is that the context is preserved between the list of gpuinstances is created and when the threads use them, so each device is sitting pretty in its own context. </p>
  
  <p>(I also implemented a destructor to take care of <code>pop/detach</code> cleanup)</p>
  
  <p>Problem is, <code>invalid context</code> exceptions are still appearing as soon as the thread tries to touch CUDA. </p>
  
  <p>Any ideas folks? And Thanks to getting this far. Automatic upvotes for people working 'banana' into their answer! :P</p>