Этот пример показывает, как объединяться внешний или пользовательский код, чтобы улучшить производительность сгенерированного кода. Несмотря на то, что MATLAB® Coder™ генерирует оптимизированный код для большинства приложений, вам можно было оптимизировать пользовательский код для ваших конкретных требований. Например:
Вам оптимизировали пользовательские библиотеки для вашего целевого окружения.
У вас есть пользовательские библиотеки для функций, не поддерживаемых MATLAB Coder.
У вас есть пользовательские библиотеки, которые соответствуют стандартам, установленным вашей компанией.
В таких случаях можно интегрировать пользовательский код с кодом, сгенерированным MATLAB Coder.
Этот пример иллюстрирует, как интегрировать функциональный cublasSgemm
от библиотеки Basic Linear Algebra Subroutines (CUBLAS) NVIDIA® CUDA® в сгенерированном коде. Эта функция выполняет умножение матриц на Графическом процессоре (GPU).
Задайте класс ExternalLib_API
, который выводит от класса coder.ExternalDependency
. ExternalLib_API
задает интерфейс к библиотеке CUBLAS
через следующие методы:
getDescriptiveName
: Возвращает описательное имя для ExternalLib_API
, который будет использоваться для сообщений об ошибке.
isSupportedContext
: Определяет, поддерживает ли контекст сборки библиотеку CUBLAS
.
updateBuildInfo
: Добавляют пути к заголовочному файлу и файлы связей к информации о сборке.
GPU_MatrixMultiply
: Задает интерфейс к библиотечной функции CUBLAS
cublasSgemm
.
Чтобы выполнить умножение матриц с помощью интерфейса, заданного в методе GPU_MatrixMultiply
и информация о сборке в ExternalLib_API
, включайте следующую строку в код MATLAB:
C= ExternalLib_API.GPU_MatrixMultiply(A,B);
Например, можно задать функцию MATLAB Matrix_Multiply
, который только выполняет это умножение матриц.
function C = Matrix_Multiply(A, B) %#codegen C= ExternalLib_API.GPU_MatrixMultiply(A,B);
Задайте объект настройки MEX
использование coder.config
. Для того, чтобы пользоваться библиотеками CUBLAS
, набор выходной язык для генерации кода к C++
.
cfg=coder.config('mex'); cfg.TargetLang='C++';
Сгенерируйте код для Matrix_Multiply
с помощью cfg
в качестве объекта настройки и двух матриц 2 X 2
типа single
в качестве аргументов. Поскольку cublasSgemm
поддерживает умножение матриц для типа данных float
, соответствующие матрицы MATLAB должны иметь, вводят single
.
codegen -config cfg Matrix_Multiply ... -args {ones(2,'single'),ones(2,'single')}
Протестируйте сгенерированную функцию MEX
Matrix_Multiply_mex
с помощью двух единичных матриц 2 X 2
типа single
.
Matrix_Multiply_mex(eye(2,'single'),eye(2,'single'))
Вывод является также единичной матрицей 2 X 2
.
assert
| coder.BuildConfig
| coder.ExternalDependency
| coder.ceval
| coder.opaque
| coder.rref
| coder.wref