coder.gpuConfig

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

Описание

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

Создание

Синтаксис

cfg = coder.gpuConfig(build_type)
cfg = coder.gpuConfig(build_type,'ecoder',false)
cfg = coder.gpuConfig(build_type,'ecoder',true)

Описание

пример

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

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

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

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

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

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

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

Свойства

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

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

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

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

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

false

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

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

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

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

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

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

'Unified'

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

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

Пример: 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

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

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

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

Пример: 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

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

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

Примечание

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

Примеры

свернуть все

Сгенерируйте MEX-функцию CUDA от функции 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

Введенный в R2017b