exponenta event banner

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

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

  • Пользовательские библиотеки оптимизированы для целевой среды.

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

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

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

В этом примере показано, как интегрировать функцию cublasSgemm из библиотеки подпрограмм NVIDIA ® CUDA ® Basic Linear Algebra Subroutines (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 библиотеки, установите целевой язык для создания кода в 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 единичная матрица.

См. также

| | | | | |

Связанные темы