Можно использовать массивы 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