exponenta event banner

Поддержка массивов графических процессоров

Массивы графического процессора можно использовать в качестве входных и выходных аргументов для функции начального уровня при создании 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 не поддерживается, сгенерированный код возвращает выходные данные ЦП. Однако если возвращается поддерживаемый тип матрицы, то сгенерированный код возвращает выходной графический процессор.

См. также

| | | |

Связанные темы