Manipulate mxGPUArrays in conjunction with shared C libraries

1 visualización (últimos 30 días)
Matt J
Matt J el 7 de Jul. de 2015
Comentada: Matt J el 21 de Jul. de 2015
I'm asking this question on behalf of someone else more technically proficient in the issue than me. If I understand him, though, the goal is to know how to pass (set and get) data between an mxGPUArray object (corresponding to a gpuArray object in the MATLAB workspace) and a loaded C shared library (MEX-compiled). Also, to know how to create a new mxGPUArray object or resize/repopulate an existing one from said library. Finally, it is desirable to do this entirely on the GPU, so that data doesn't have to go through the host.
Is there a way to do all of the above? If so, what is the best way?

Respuesta aceptada

Edric Ellis
Edric Ellis el 8 de Jul. de 2015
Yes, all of this should be possible. You can extract the underlying pointer to the data of a gpuArray. I suggest starting with this section in the documentation, and examining the referenced example code which shows how to first get hold of an mxGPUArray object from the mxArray, and from there how to get hold of the underlying data (e.g. double *) from the mxGPUArray. Once you've got a pointer to the underlying data, you can call external CUDA code with that pointer. You can use mxGPUCreateGPUArray to create a new gpuArray, and then once you've filled out the contents, use mxGPUCreateMxArrayOnGPU to create an mxArray to return back to MATLAB.

Más respuestas (0)

Categorías

Más información sobre GPU CUDA and MEX Programming en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by