Объединяйтесь Внешний / Пользовательский код

Этот пример показывает, как объединяться внешний или пользовательский код, чтобы улучшить производительность сгенерированного кода. Несмотря на то, что MATLAB® Coder™ генерирует оптимизированный код для большинства приложений, вам можно было оптимизировать пользовательский код для ваших конкретных требований. Например:

  • Вам оптимизировали пользовательские библиотеки для вашего целевого окружения.

  • У вас есть пользовательские библиотеки для функций, не поддерживаемых MATLAB Coder.

  • У вас есть пользовательские библиотеки, которые соответствуют стандартам, установленным вашей компанией.

В таких случаях можно интегрировать пользовательский код с кодом, сгенерированным MATLAB Coder.

Этот пример иллюстрирует, как интегрировать функциональный cublasSgemm от библиотеки Basic Linear Algebra Subroutines (CUBLAS) NVIDIA® CUDA® в сгенерированном коде. Эта функция выполняет умножение матриц на Графическом процессоре (GPU).

  1. Задайте класс ExternalLib_API, который выводит от класса coder.ExternalDependency. ExternalLib_API задает интерфейс к библиотеке CUBLAS через следующие методы:

    • getDescriptiveName: Возвращает описательное имя для ExternalLib_API, который будет использоваться для сообщений об ошибке.

    • isSupportedContext: Определяет, поддерживает ли контекст сборки библиотеку CUBLAS.

    • updateBuildInfo: Добавляют пути к заголовочному файлу и файлы связей к информации о сборке.

    • GPU_MatrixMultiply: Задает интерфейс к библиотечной функции CUBLAS cublasSgemm.

     ExternalLib_API.m

  2. Чтобы выполнить умножение матриц с помощью интерфейса, заданного в методе 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);
  3. Задайте объект настройки MEX использование coder.config. Для того, чтобы пользоваться библиотеками CUBLAS, набор выходной язык для генерации кода к C++.

    cfg=coder.config('mex');
    cfg.TargetLang='C++';
  4. Сгенерируйте код для Matrix_Multiply с помощью cfg в качестве объекта настройки и двух матриц 2 X 2 типа single в качестве аргументов. Поскольку cublasSgemm поддерживает умножение матриц для типа данных float, соответствующие матрицы MATLAB должны иметь, вводят single.

    codegen -config cfg Matrix_Multiply ...
                -args {ones(2,'single'),ones(2,'single')}
  5. Протестируйте сгенерированную функцию MEX Matrix_Multiply_mex с помощью двух единичных матриц 2 X 2 типа single.

    Matrix_Multiply_mex(eye(2,'single'),eye(2,'single'))

    Вывод является также единичной матрицей 2 X 2.

Смотрите также

| | | | | |

Похожие темы