Массивы графического процессора можно использовать в качестве входных и выходных аргументов для функции начального уровня при создании CUDA ® MEX, исходного кода, статических библиотек, динамических библиотек и исполняемых файлов. В зависимости от того, идентифицируется ли данный вход в функцию начальной точки как вход на базе CPU или GPU, и от использования переменной (используется на GPU или на CPU )cudaMemcpy вызовы эффективно вставляются в сгенерированный код. Используя функциональность массива GPU, можно минимизировать количество cudaMemcpy вызовы в сгенерированном коде.
Чтобы использовать эту функцию, выполните одно из следующих действий.
Использовать coder.typeof для представления gpuArray тип ввода функции точки входа. Например:
coder.typeof(rand(20),'Gpu',true);
Используйте gpuArray функция. Например:
in = gpuArray(rand(1,10)); codegen -config cfg -args {in} test
Графический процессор Coder™ поддерживает все числовые и логические типы. char и half типы данных не поддерживаются. Для использования массивов переменных размеров поддерживаются только ограниченные типы. Скалярные массивы графических процессоров, структуры, массивы ячеек, классы, перечислимые типы и типы данных с фиксированной точкой не поддерживаются.
Генератор кода поддерживает все целевые типы для массивов GPU - 'mex', 'lib', 'dll', и 'exe'. Для 'lib', 'dll', и 'exe' targets, необходимо передать правильные указатели на функцию точки входа в примере основной функции. Например, если вход помечен как '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