Интеграция внешнего/пользовательского кода

В этом примере показано, как интегрировать внешний или пользовательский код для повышения эффективности сгенерированного кода. Хотя MATLAB® Coder™ генерирует оптимизированный код для большинства приложений, у вас может быть пользовательский код, оптимизированный под ваши конкретные требования. Для примера:

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

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

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

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

Этот пример иллюстрирует, как интегрировать функцию cublasSgemm от NVIDIA® CUDA® Базовые подпрограммы линейной алгебры библиотеку (CUBLAS) в сгенерированном коде. Эта функция выполняет матричное умножение на графическом процессорном Модуле (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 libraries, установите целевой язык для генерации кода равным 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 единичная матрица.

См. также

| | | | | |

Похожие темы