Hi,
> Le 20 avr. 2018 à 18:17, Andreas Kloeckner <[email protected]> a écrit :
>
>> Did anybody manage to (actually) interleave sending buffers, retrieving
>> buffers and calculation on the GPU with PyOpenCL ?
>
> I have (at one point) verified that this does work. In order for
> overlapped transfers to actually happen, you need to allocate the
> host-side end of the transfer with ALLOC_HOST_PTR (or some such--I don't
> remember precisely)--the same as 'page-locked' memory in CUDA.
Yes, I finally managed to have some pinned memory also using pyopencl
(following test_map_to_host in
https://github.com/inducer/pyopencl/blob/master/test/test_array.py
<https://github.com/inducer/pyopencl/blob/master/test/test_array.py> ) it seems
to require something like:
psi = np.random.uniform(0, 1, (n_view, nz, ny, nx)).astype(np.complex64)
# Re-allocate psi using pinned memory ?
allocator = cl_tools.DeferredAllocator(cl_ctx, mf.READ_WRITE |
mf.ALLOC_HOST_PTR)
psi_dev = cla.to_device(cl_queue, psi, allocator=allocator)
psi = psi_dev.map_to_host()
I am however not sure if that’s the only way - it would seem you need
to allocate (or at least declare) a GPU array before creating the corresponding
pinned host array ? Is this correct ?
Full test snippet
@https://gist.github.com/vincefn/613649f5df1879db6c0e36dbf0cdc838
<https://gist.github.com/vincefn/613649f5df1879db6c0e36dbf0cdc838>
It _seems_ to work in //, as the speed increases, but when using CUDA 6
OpenCL, the code runs 2x slower when using COMPUTE_PROFILE=1…
Vincent
—
Vincent Favre-Nicolin
Co-editor, J. Synchrotron Radiation http://journals.iucr.org/s/
<http://journals.iucr.org/s/>
Director, HERCULES school http://hercules-school.eu
<http://hercules-school.eu/>
ESRF-The European Synchrotron http://www.esrf.eu <http://www.esrf.eu/>
71, Avenue des Martyrs
Grenoble, France
X-Ray NanoProbe (XNP) group
Tel: +33 4 76 88 28 11
On leave from Univ. Grenoble Alpes
_______________________________________________
PyOpenCL mailing list
[email protected]
https://lists.tiker.net/listinfo/pyopencl