Keith Brown <[email protected]> writes:

> I have several GPUs and I want to distribute my tasks to each GPU. I
> would like to use multiprocessing.Pool() to accomplish it
>
> import random
> import pycuda.gpuarray as gpuarray
> import atexit
> import pycuda.driver as cuda
> import pycuda.autoinit as autoinit
> import time
> import numpy as np
> import skcuda.linalg as linalg
> import skcuda
> import multiprocessing as mp
> import pycuda.driver as drv
>
> def my_proc(n):
>     drv.init()
>     dev = drv.Device(n)
>     ctx = dev.make_context()
>     atexit.register(ctx.pop)
>     linalg.init()
>     a=np.ones((185,185)).astype(np.float32)
>     a_gpu = gpuarray.to_gpu(a)
>     c_gpu = linalg.dot(a_gpu,a_gpu)
>     return c_gpu.get()
>
> r=[]
> Pool=mp.Pool(10)
> for i in range(1000):
>   Pool.apply_async(my_proc,(random.randint(0,1),))
>
>
> I keep getting
>     pycuda._driver.LogicError: cuCtxPopCurrent failed: invalid device context
>
> Is there somthing I should be doing?

If you have the GPUs set to exclusive mode, then PyCUDA should take care
of round-robin device selection on its own.

Andreas


_______________________________________________
PyCUDA mailing list
[email protected]
http://lists.tiker.net/listinfo/pycuda

Reply via email to