В этом примере показано, как интегрировать внешний или пользовательский код для повышения эффективности сгенерированного кода. Хотя MATLAB® Coder™ генерирует оптимизированный код для большинства приложений, у вас может быть пользовательский код, оптимизированный под ваши конкретные требования. Для примера:
У вас есть пользовательские библиотеки, оптимизированные для целевого окружения.
У вас есть пользовательские библиотеки для функций, не поддерживаемых MATLAB Coder.
У вас есть пользовательские библиотеки, которые соответствуют стандартам, установленным вашей компанией.
В таких случаях можно интегрировать свой пользовательский код с кодом, сгенерированным MATLAB Coder.
Этот пример иллюстрирует, как интегрировать функцию cublasSgemm
от NVIDIA® CUDA® Базовые подпрограммы линейной алгебры библиотеку (CUBLAS) в сгенерированном коде. Эта функция выполняет матричное умножение на графическом процессорном Модуле (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
libraries, установите целевой язык для генерации кода равным 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.ceval
| coder.ExternalDependency
| coder.opaque
| coder.rref
| coder.wref