coder.gpuConfig

Параметры конфигурации для генерации кода CUDA из кода MATLAB с помощью GPU Coder

Описание

The coder.GpuCodeConfig или coder.gpuConfig объект содержит параметры конфигурации, которые codegen используется для генерации CUDA® MEX, статическая библиотека, динамически связанная библиотека или исполняемая программа с GPU Coder™. Передайте объект в codegen функция при помощи -config опция.

Создание

Описание

пример

cfg = coder.gpuConfig(build_type) создает объект строения генерации кода для заданного типа сборки, который может быть CUDA MEX, статической библиотекой, динамически связанной библиотекой или исполняемой программой. Если Embedded Coder® продукт установлен, он создает coder.EmbeddedCodeConfig объект для статической библиотеки, динамической библиотеки или исполняемых типов сборки.

cfg = coder.gpuConfig(build_type,'ecoder',false) создает объект строения генерации кода для генерации CUDA 'lib', 'dll', или 'exe' выход, даже если установлен продукт Embedded Coder.

cfg = coder.gpuConfig(build_type,'ecoder',true) создает coder.EmbeddedCodeConfig объект строения, даже если продукт Embedded Coder не установлен. Однако генерация кода с использованием coder.EmbeddedCodeConfig для объекта требуется лицензия Embedded Coder.

Входные параметры

расширить все

Выход для сборки из сгенерированного кода CUDA, заданный как одно из значений в этой таблице.

ЗначениеОписание
'MEX'MEX CUDA
'LIB'Статическая библиотека
'DLL'Динамически связанная библиотека
'EXE'Исполняемая программа

Свойства

расширить все

coder.GpuConfig содержит только параметры конфигурации конкретного графического процессора объекта строения кода. Чтобы увидеть все свойства объекта строения кода, смотрите coder.CodeConfig и coder.EmbeddedCodeConfig.

Управляйте генерацией файлов CUDA (* .cu) с помощью одного из значений в этой таблице.

ЗначениеОписание
true

Это значение является значением по умолчанию.

Включает генерацию кода CUDA.

false

Отключает генерацию кода CUDA.

Пример: cfg.GpuConfig.Enabled = true

Выделение памяти (malloc) режим для использования в сгенерированном коде CUDA, заданный как одно из значений в этой таблице.

ЗначениеОписание
'discrete'

Это значение является значением по умолчанию.

Сгенерированный код использует cudaMalloc API для передачи данных между центральным процессором и графическим процессором. С точки зрения программистов, дискретный режим имеет традиционную архитектуру памяти с отдельным центральным процессором и глобальным адресным пространством памяти графический процессор.

'unified'

Сгенерированный код использует cudaMallocManaged API, который использует общую (унифицированную) центральный процессор и графический процессор глобальная память адресное пространство.

Для NVIDIA® целевые процессоры. См. «Отключение поддержки унифицированного режима выделения памяти на хосте».

Для получения дополнительной информации см. «Дискретный и управляемый режимы».

Пример: cfg.GpuConfig.MallocMode = 'discrete'

Укажите пользовательский префикс имени для всех ядер сгенерированного кода. Для примера используйте значение 'CUDA_' создает ядра с именами CUDA_kernel1, CUDA_kernel2и так далее. Если имя не задано, GPU Coder заполняет имя ядра именем функции точки входа. Имена ядра могут содержать буквы в верхнем регистре, строчные буквы, цифры 0-9 и символы подчеркивания _. GPU Coder удаляет неподдерживаемые символы из имен ядра и добавляет alpha к префиксам, которые не начинаются с буквенной буквы.

Пример: cfg.GpuConfig.KernelNamePrefix = 'myKernel'

Замена вызовов математических функций на NVIDIA cuBLAS вызовы библиотек, заданные как одно из значений в этой таблице.

ЗначениеОписание
true

Это значение является значением по умолчанию.

Позволяет GPU Coder заменять соответствующие вызовы математических функций на вызовы cuBLAS библиотека. Для функций, которые не имеют замен в CUDA, GPU Coder использует портативный MATLAB® функций и попыток сопоставить их с графическим процессором.

false

Отключить использование cuBLAS библиотека в сгенерированном коде.

Для получения дополнительной информации см. раздел «Ядра из вызовов».

Пример: cfg.GpuConfig.EnableCUBLAS = true

Замена вызовов математических функций на NVIDIA cuSOLVER вызовы библиотек, заданные как одно из значений в этой таблице.

ЗначениеОписание
true

Это значение является значением по умолчанию.

Позволяет GPU Coder заменять соответствующие вызовы математических функций на вызовы cuSOLVER библиотека. Для функций, не имеющих замен в CUDA, GPU Coder использует портативные функции MATLAB и пытается сопоставить их с графическим процессором.

false

Отключить использование cuSOLVER библиотека в сгенерированном коде.

Для получения дополнительной информации см. раздел «Ядра из вызовов».

Пример: cfg.GpuConfig.EnableCUSOLVER = true

Замена fft вызовы функций с помощью NVIDIA cuFFT вызовы библиотек, заданные как одно из значений в этой таблице.

ЗначениеОписание
true

Это значение является значением по умолчанию.

Позволяет GPU Coder заменить соответствующие fft вызовы с вызовами на cuFFT библиотека.

false

Отключает использование cuFFT библиотека в сгенерированном коде. При помощи этой опции GPU Coder использует C FFTW библиотеки, где доступно или генерирует ядра из портативного MATLAB fft код.

Для получения дополнительной информации см. раздел «Ядра из вызовов».

Пример: cfg.GpuConfig.EnableCUFFT = true

Управление сложением кода бенчмаркинга к сгенерированному коду CUDA с помощью одного из значений в этой таблице.

ЗначениеОписание
false

Это значение является значением по умолчанию.

Сгенерированный код CUDA не содержит функциональности бенчмаркинга.

true

Генерирует код CUDA с функциями бенчмаркинга. Эта опция использует API CUDA, такие как cudaEvent для точного определения времени kernel, memcpy, и другие события.

Пример: cfg.GpuConfig.Benchmarking = true

Добавьте функциональность проверки ошибок к сгенерированному коду CUDA с помощью одного из значений в этой таблице.

ЗначениеОписание
false

Это значение является значением по умолчанию.

Сгенерированный код CUDA не содержит функций проверки ошибок.

true

Генерирует код с проверкой ошибок для вызовов CUDA API и ядра.

Пример: cfg.GpuConfig.SafeBuild = true

Выберите минимальную вычислительную возможность для генерации кода. Вычислительные возможности определяют функции, поддерживаемые оборудованием графический процессор. Он используется приложениями во время выполнения, чтобы определить, какие аппаратные функции, инструкции доступны на настоящем графическом процессоре. Если вы задаете пользовательские вычислительные возможности, GPU Coder игнорирует эту настройку.

Для просмотра требований к вычислительным возможностям CUDA для генерации кода см. следующую таблицу.

ЦельВычислительные возможности

MEX CUDA

См. раздел Поддержка графического процессора по релизу.

Исходный код, статическая или динамическая библиотека и исполняемые файлы

3.2 или выше.

Применения глубокого обучения с 8-битной целочисленной точностью

6.1, 6.3 или выше.

Применения глубокого обучения с половинной точностью (16-битная плавающая точка)

5,3, 6,0, 6,2 или выше.

Пример: cfg.GpuConfig.ComputeCapability = '6.1'

Укажите имя архитектуры виртуального графического процессора NVIDIA, для которого необходимо скомпилировать входные файлы CUDA.

Например, чтобы задать тип виртуальной архитектуры -arch=compute_50. Вы можете задать реальную архитектуру, используя -arch=sm_50. Для получения дополнительной информации см. раздел «Опции для управления генерацией кода графического процессора» в документации по набору инструментальных средств CUDA.

Пример: cfg.GpuConfig.CustomComputeCapability = '-arch=compute_50'

Передайте дополнительные флаги компилятору графического процессора. Для примера, --fmad=false инструктирует nvcc компилятор, чтобы отключить сужение умножения с плавающей точкой и добавить к одной инструкции Floating-Point Multiply-Add (FMAD).

Для аналогичных опций компилятора NVIDIA смотрите тему параметров команды NVCC в документации по набору инструментальных средств CUDA.

Пример: cfg.GpuConfig.CompilerFlags = '--fmad=false'

Задайте максимальный предел стека на каждый поток графический процессор в виде целого значения.

Пример: cfg.GpuConfig.StackLimitPerThread = 1024

Задайте размер, выше которого частные переменные выделяются на куче вместо стека, в виде целого значения.

Пример: cfg.GpuConfig.MallocThreshold = 256

Задайте максимальное количество блоков, созданных во время запуска ядра.

Поскольку графические процессоры имеют ограниченные потоковые многопроцессорные (SM) ресурсы, ограничение количества блоков для каждого ядра может избежать падения эффективности от планирования, загрузки и выгрузки блоков.

Если количество итераций в цикле больше максимального количества блоков на ядро, генератор кода создает ядра CUDA с переходом.

Когда вы задаете максимальное количество блоков для каждого ядра, генератор кода создает 1-D ядра. Чтобы заставить генератор кода создать 2-D или 3-D ядра, используйте coder.gpu.kernel прагма. The coder.gpu.kernel pragma имеет приоритет над максимальным количеством ядер для каждого блока.

Пример: cfg.GpuConfig.MaximumBlocksPerKernel = 1024

В окружении с несколькими графическими процессорами, такой как платформы NVIDIA Drive, укажите целевое устройство CUDA.

Пример: cfg.GpuConfig.SelectCudaDevice = <DeviceID>

Примечание

SelectCudaDevice может использоваться с gpuArray только если gpuDevice и SelectCudaDevice указать на тот же графический процессор. Если gpuDevice указывает на другой графический процессор, CUDA_ERROR_INVALID_VALUE выдается ошибка во время выполнения.

Примеры

свернуть все

Сгенерируйте функцию CUDA MEX из функции MATLAB, которая подходит для генерации кода GPU. Кроме того, включите отчет генерации кода.

Написание функции MATLAB VecAdd, который выполняет вектор сложение входных параметров A и B.

function [C] = VecAdd(A,B) %#codegen
    C = coder.nullcopy(zeros(size(A)));
    coder.gpu.kernelfun();
    C = A + B;
end

Чтобы сгенерировать MEX-функцию, создайте объект строения генерации кода.

cfg = coder.gpuConfig('mex');

Включите отчет генерации кода.

cfg.GpuConfig.EnableCUBLAS = true;
cfg.GenerateReport = true;

Сгенерируйте MEX-функцию в текущей папке, задав объект строения используя -config опция.

% Generate a MEX function and code generation report
codegen -config cfg -args {zeros(512,512,'double'),zeros(512,512,'double')} VecAdd

Ограничения

  • GPU Coder всегда устанавливает PassStructByReference свойство coder.CodeConfig и coder.EmbeddedCodeConfig объект строения кода true.

  • GPU Coder всегда устанавливает EnableSignedLeftShifts и EnableSignedRightShifts свойство coder.EmbeddedCodeConfig объект строения кода true.

  • Для автономных целей, таких как статическая библиотека, динамически связанная библиотека или исполняемая программа в Windows® окружение, сгенерированные make-файлы не устанавливаются /MT или /MD флаги компилятора. Эти флаги указывают компилятору Visual Studio на использование библиотеки многопоточности. По умолчанию Visual Studio использует /MT во время компиляции. Чтобы передать другие специальные флаги компилятора, используйте CompilerFlags опция. Для примера,

    cfg.GpuConfig.CompilerFlags = '-Xcompiler /MD';
    

  • The nvcc компилятор имеет ограничения на суффиксы входного файла. Для примера, если файл объекта содержит номера версий, компиляция может оказаться неудачной. В таких случаях создайте символические ссылки или передайте '-Xlinker' на CompilerFlags.

Вопросы совместимости

расширить все

Изменение поведения в будущем релизе

Введенный в R2017b