Support for GPU Arrays - MATLAB & Simulink (original) (raw)
You can use GPU arrays as input and output arguments to an entry-point function when generating CUDA® MEX, source code, static libraries, dynamic libraries, and executables. GPU Coder™ automatically takes care of CPU-GPU copies based on the input type and the usage of the variable in your MATLAB® design. The GPU array functionality is useful in minimizing CPU-GPU copies when you are trying to:
- Integrate the generated code with an existing implementation that has its outputs on the GPU memory.
- Pass MATLAB
gpuArray
inputs to the generated MEX function.
To mark an input to the entry-point function as a GPU type, use one of the following approaches:
- Use coder.typeof to represent the
gpuArray
type of an entry-point function input. For example:
coder.typeof(rand(20),'Gpu',true); - Use the gpuArray function. For example:
in = gpuArray(rand(1,10));
codegen -config cfg -args {in} test
Considerations
- GPU Coder supports all data type supported by
gpuArray
. - For using variable dimension arrays, only the bounded types are supported.
- For
'lib'
,'dll'
, and'exe'
targets, you must pass the corresponding pointers to the entry-point function in the example main function. For example, if an input is marked as'Gpu'
, a GPU pointer should be passed when the entry-point is called from the main function. - The
MemoryMode
(memory allocation mode) property of the code configuration object must be set to'discrete'
. For example,
cfg.GpuConfig.MallocMode = 'discrete'; - During code generation, if one input to entry-point function is of the GPU array, then GPU Coder attempts to make all the output variables GPU array types, provided they are supported by
gpuArray
. For example. if the entry-point function returns astruct
and becausestruct
is not supported bygpuArray
, the generated code returns a CPU output. However, if a supported matrix type is returned, then the generated code returns a GPU output.
Note
PassinggpuArray
inputs does not guarantee the outputs to also begpuArray
.
Limitations
- GPU Coder does not support the following types:
char
half
- Scalar GPU arrays
- Structures
- Cell arrays
- Classes
- Enumerated types
- Fixed-point data types
- GPU Coder does not support the
'unified'
memory mode for GPU arrays.
See Also
coder.gpu.kernel | coder.gpu.kernelfun | gpucoder.matrixMatrixKernel | coder.gpu.constantMemory | gpucoder.stencilKernel