exponenta event banner

coder.gpuConfig

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

Описание

coder.GpuCodeConfig или coder.gpuConfig объект содержит параметры конфигурации, которые codegen используется для создания CUDA ® MEX, статической библиотеки, динамически связанной библиотеки или исполняемой программы с графическим процессором 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'CUDA MEX
'LIB'Статическая библиотека
'DLL'Динамически связанная библиотека
'EXE'Исполняемая программа

Свойства

развернуть все

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

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

СтоимостьОписание
true

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

Включает создание кода CUDA.

false

Отключает создание кода CUDA.

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

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

СтоимостьОписание
'discrete'

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

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

'unified'

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

Только для встраиваемых целей NVIDIA ®. См. раздел Устаревшая поддержка унифицированного режима выделения памяти на хосте.

Дополнительные сведения см. в разделе Дискретные и управляемые режимы.

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

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

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

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

СтоимостьОписание
true

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

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

false

Деактивизация использования cuBLAS в созданном коде.

Дополнительные сведения см. в разделе Ядра из вызовов библиотеки.

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

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

СтоимостьОписание
true

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

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

false

Деактивизация использования cuSOLVER в созданном коде.

Дополнительные сведения см. в разделе Ядра из вызовов библиотеки.

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

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

СтоимостьОписание
true

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

Позволяет кодеру графического процессора заменить соответствующий fft вызовы с вызовами cuFFT библиотека.

false

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

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

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

CUDA MEX

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

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

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 компилятор для отключения сжатия умножения с плавающей запятой и добавления к одной команде умножения с плавающей запятой (FMAD).

Аналогичные параметры компилятора NVIDIA см. в разделе Параметры команды NVCC в документации по инструментарию CUDA.

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

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

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

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

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

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

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

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

При указании максимального количества блоков для каждого ядра генератор кода создает 1-D ядра. Чтобы заставить генератор кода создать 2-D или 3-D ядра, используйте coder.gpu.kernel прагматика. 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, которая подходит для генерации кода графического процессора. Кроме того, включите отчет о создании кода.

Запись функции 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

Ограничения

  • Кодер графического процессора всегда устанавливает PassStructByReference имущества coder.CodeConfig и coder.EmbeddedCodeConfig объект конфигурации кода true.

  • Кодер графического процессора всегда устанавливает EnableSignedLeftShifts и EnableSignedRightShifts имущества coder.EmbeddedCodeConfig объект конфигурации кода true.

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

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

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

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

развернуть все

Изменение поведения в будущем выпуске

Представлен в R2017b