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

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

См. также

| | | |

Похожие темы