В этом примере показано, как объединяться внешний или пользовательский код, чтобы улучшить производительность сгенерированного кода. Несмотря на то, что 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