Main Content

外部コードまたはカスタム コードの統合

この例では、外部コードまたはカスタム コードを統合して、生成コードのパフォーマンスを向上させる方法を説明します。MATLAB® Coder™ ではほとんどのアプリケーションに最適なコードを生成しますが、特定の要件に合わせて最適化されたカスタム コードを使用した方がよい場合があります。たとえば、以下の場合です。

  • ターゲット環境に最適化されたカスタム ライブラリがある。

  • MATLAB Coder でサポートされない関数のカスタム ライブラリがある。

  • 企業で設定した標準に合せたカスタム ライブラリがある。

このような場合は、MATLAB Coder で生成されたコードとカスタム コードを統合できます。

この例では、NVIDIA® CUDA® Basic Linear Algebra Subroutines (CUBLAS) ライブラリの関数 cublasSgemm を生成コードで統合する方法を示します。この関数は、グラフィックス処理装置 (GPU) で行列の乗算を実行します。

  1. クラス coder.ExternalDependency から導かれるクラス ExternalLib_API を定義します。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. coder.config を使用して MEX 構成オブジェクトを定義します。CUBLAS ライブラリを使用するには、コード生成のターゲット言語を C++ に設定します。

    cfg=coder.config('mex');
    cfg.TargetLang='C++';
  4. cfg を構成オブジェクトとして、single 型の 2 つの 2 X 2 行列を引数として使用して、Matrix_Multiply のコードを生成します。cublasSgemm はデータ型 float の行列の乗算をサポートするため、対応する MATLAB の行列は single 型でなければなりません。

    codegen -config cfg Matrix_Multiply ...
                -args {ones(2,'single'),ones(2,'single')}
  5. single 型の 2 つの 2 X 2 単位行列を使用して、生成された MEX 関数 Matrix_Multiply_mex をテストします。

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

    この出力も 2 X 2 単位行列になります。

参考

| | | | | |

関連するトピック