coder.gpuConfig

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

Описание

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

Создание

Описание

пример

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.

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

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

Выведите, чтобы создать из сгенерированного кода 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'

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

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

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

Диспетчер памяти графического процессора создает набор больших пулов памяти графического процессора и справляется с выделением и освобождением фрагментов блоков памяти в этих пулах. Путем создания пулов памяти большой емкости диспетчер памяти сокращает количество вызовов API памяти CUDA, улучшая производительность во время выполнения. Можно использовать диспетчера памяти графического процессора для MEX и автономной генерации кода CUDA.

false

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

Отключите использование диспетчер памяти графического процессора для выделения памяти и управления.

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

Задайте пользовательский префикс имени для всех ядер в сгенерированном коде. Например, с помощью значения '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 использует FFTW C библиотеки, где доступный или генерирует ядра из портативного 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 игнорирует эту установку.

Чтобы видеть, что 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 компилятор, чтобы отключить сокращение с плавающей точкой умножается и добавляет к синглу, С плавающей точкой, Умножаются - Добавляет инструкция (FMAD).

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

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

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

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

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

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

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

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

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

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

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

Во много среде графического процессора, такой как платформы Диска 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

Ограничения

  • GPU Coder всегда устанавливает PassStructByReference свойство coder.CodeConfig и coder.EmbeddedCodeConfig настройка кода возражает против истины.

  • GPU Coder всегда устанавливает EnableSignedLeftShifts и EnableSignedRightShifts свойство coder.EmbeddedCodeConfig настройка кода возражает против истины.

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

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

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

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

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

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

Введенный в R2017b