Можно использовать массивы GPU в качестве входных и выходных аргументов в функцию точки входа при генерации CUDA® MEX, исходный код, статические библиотеки, динамические библиотеки и исполняемые файлы. В зависимости от того, идентифицируется ли данный вход в функцию точки входа как вход на основе CPU или GPU, и в зависимости от использования переменной (используемой на графический процессор или на центральный процессор) cudaMemcpy
вызовы эффективно вставляются в сгенерированный код. При помощи функциональности массива GPU можно минимизировать количество cudaMemcpy
вызовы в сгенерированном коде.
Чтобы использовать эту функциональность, выполните одно из следующих действий:
Использовать coder.typeof
для представления gpuArray
тип входного параметра функции точки входа. Для примера:
coder.typeof(rand(20),'Gpu',true);
Используйте gpuArray
функция. Для примера:
in = gpuArray(rand(1,10)); codegen -config cfg -args {in} test
GPU Coder™ поддерживает все числовые и логические типы. char
и half
типы данных не поддерживаются. Для использования массивов переменных размерностей поддерживаются только ограниченные типы. Скалярные массивы GPU, структуры, массивы ячеек, классы, перечисляемые типы и типы данных с фиксированной точкой не поддерживаются.
Генератор кода поддерживает все целевые типы для массивов GPU - 'mex'
, 'lib'
, 'dll'
, и 'exe'
. Для 'lib'
, 'dll'
, и 'exe'
цели, вы должны передать правильные указатели на функцию точки входа в примере основной функции. Для примера, если вход отмечен как 'Gpu'
, указатель на графический процессор должен передаваться при вызове точки входа из основной функции. Цикл (SIL) поддерживается для 'lib'
и 'dll'
.
Выделение памяти (malloc
) свойство mode объекта строения кода должно быть установлено в 'discrete'
. Для примера,
cfg.GpuConfig.MallocMode = 'discrete';
'unified'
режим памяти.Во время генерации кода, если один вход в функцию точки входа имеет массив GPU, то выходные переменные все типы массива GPU, при условии, что они поддерживаются для генерации кода GPU. Для примера. если функция точки входа возвращает struct
и потому что struct
не поддерживается, сгенерированный код возвращает выход центральный процессор. Однако, если возвращается поддерживаемый тип матрицы, сгенерированный код возвращает выход графический процессор.
coder.gpu.constantMemory
| coder.gpu.kernel
| coder.gpu.kernelfun
| gpucoder.matrixMatrixKernel
| gpucoder.stencilKernel