Можно использовать массивы графического процессора в качестве аргументов ввода и вывода к функции точки входа при генерации CUDA® MEX, исходного кода, статических библиотек, динамических библиотек и исполняемых файлов. В зависимости от того, идентифицирован ли данный вход к функции точки входа как центральный процессор или основанный на графическом процессоре вход и в зависимости от использования переменной (используемый на графическом процессоре или на центральном процессоре) cudaMemcpy
вызовы вставляются эффективно в сгенерированном коде. При помощи функциональности графического процессора массивов можно минимизировать количество 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
типы данных не поддерживаются. Для использования переменных массивов размерности только поддерживаются ограниченные типы. Скалярные массивы графического процессора, структуры, массивы ячеек, классы, перечислимые типы и типы данных с фиксированной точкой не поддерживаются.
Генератор кода поддерживает все целевые типы для массивов графического процессора - 'mex'
, 'lib'
, 'dll'
, и 'exe'
. Для 'lib'
, 'dll'
, и 'exe'
цели, необходимо передать правильные указатели на функцию точки входа в примере основная функция. Например, если вход отмечен как 'Gpu'
, указатель графического процессора должен быть передан, когда точка входа называется от основной функции. Программное обеспечение В цикле (SIL) поддерживается для 'lib'
и 'dll'
.
Выделение памяти (malloc
) свойство режима объекта настройки кода должно быть установлено в быть 'discrete'
. Например,
cfg.GpuConfig.MallocMode = 'discrete';
'unified'
режим memory.Во время генерации кода, Если один вход к функции точки входа имеет массив графического процессора, то выходные переменные являются всеми типами массива графического процессора, если они поддерживаются для генерации кода графического процессора. Например. если функция точки входа возвращает struct
и потому что struct
не поддерживается, сгенерированный код возвращает CPU выход. Однако, если поддерживаемый матричный тип возвращен, то сгенерированный код возвращает GPU выход.
coder.gpu.constantMemory
| coder.gpu.kernel
| coder.gpu.kernelfun
| gpucoder.matrixMatrixKernel
| gpucoder.stencilKernel