Received from Gavin Weiguang Ding on Tue, Oct 07, 2014 at 06:40:46PM EDT:
> Hi Lev,
> 
> Thanks a lot for the example! It really helps!
> 
> Just to make sure I understand the example in the right way:
> 
> The actual p2p data transfer happens when executing the following line?
> x_gpu = gpuarray.GPUArray(shape, dtype,  gpudata=drv.IPCMemoryHandle(h))
> 
> So, if I use different devices in proc1 and proc2, then
> x_gpu = gpuarray.GPUArray(shape, dtype,  gpudata=drv.IPCMemoryHandle(h))
> would actually transfer the data from device 1 to device 2 through p2p?
> 
> My GPU server has 3 gpus, and only device 1 and 2 can do p2p.
> What I observed is that
> the example works when
> 1. proc1 and proc2 using the same device
> 2. proc1 and proc2 using device 1 and 2 respectively or vice versa
> 
> it doesn't work when
> proc1 using device 0 and proc2 using 1 or 2 and vice versa
> it also returns the error of
> "LogicError: cuIpcOpenMemHandle failed: invalid/unknown error code"
> 
> So I guess that's the desired behaviour? and IPCMemoryHandle only works
> when p2p (or within same GPU) is possible?
> 
> Thanks a lot!

CUDA's IPC mechanism doesn't actually copy any data; it makes it possible
to share a device pointer created in one process with some other process. You
still need to transfer the data from one location to the other.
-- 
Lev Givon
Bionet Group | Neurokernel Project
http://www.columbia.edu/~lev/
http://lebedov.github.io/
http://neurokernel.github.io/


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

Reply via email to