Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

coder.BLASCallback クラス

パッケージ: coder

BLAS ライブラリと CBLAS ヘッダーおよび生成コードの BLAS 呼び出しのデータ型情報を指定する抽象クラス

説明

coder.BLASCallback は BLAS コールバック クラスを定義するための抽象クラスです。BLAS コールバック クラスは、MATLAB® コードから生成されるコードで BLAS 呼び出しに使用する BLAS ライブラリと CBLAS ヘッダーおよびデータ型情報を指定します。MATLAB Coder™ を使用してスタンドアロン コードを生成するか、MATLAB Function ブロックのコードを生成する場合、特定のベクトル関数および行列関数の呼び出しで、BLAS 呼び出しを生成できます。BLAS 呼び出しを生成するには、適切なコンフィギュレーション パラメーターを BLAS コールバック クラスの名前に設定します。

  • MATLAB Coder codegen コマンドを使用してコードを設定する場合は、CustomBLASCallback を設定する。

  • MATLAB Coder アプリを使用したコード生成の場合は、[カスタム BLAS ライブラリのコールバック] を設定する。

  • Simulink® Coder を使用した MATLAB Function ブロックのコード生成の場合、[カスタム BLAS ライブラリのコールバック] を設定する。

useMyBLAS という名前の BLAS コールバック クラスを定義するには、次の行をクラス定義ファイルの最初の行にします。

classdef useMyBLAS < coder.BLASCallback
updateBuildInfo メソッド、getHeaderFileName メソッド、および getBLASIntTypeName メソッドを定義しなければなりません。他のメソッド getBLASDoubleComplexTypeNamegetBLASSingleComplexTypeName、および useEnumNameRatherThanTypedefcoder.BLASCallback に既に実装されています特定の状況では、コールバック クラスを定義するときに、これらのメソッドを独自の定義でオーバーライドしなければなりません。すべてのメソッドは静的で、コンパイルされません。

クラス属性

Abstract
true

クラス属性の詳細については、クラスの属性を参照してください。

メソッド

すべて展開する

すべて折りたたむ

この例は、Windows® プラットフォーム上の Intel MKL BLAS ライブラリにリンクするための BLAS コールバック クラス mklcallback の実装です。mklcallback には getBLASDoubleComplexTypeNamegetBLASSingleComplexTypeName、および useEnumNameRatherThanTypedef の明示的な実装は含まれません。これは、以下のメソッドを coder.BLASCallback から継承します。

classdef mklcallback < coder.BLASCallback
    methods (Static)
        function updateBuildInfo(buildInfo, ~)
            libPath = fullfile(pwd,'mkl','WIN','lib','intel64');
            libPriority = '';
            libPreCompiled = true;
            libLinkOnly = true;
            libs = {'mkl_intel_ilp64.lib' 'mkl_intel_thread.lib' 'mkl_core.lib'};
            buildInfo.addLinkObjects(libs, libPath, libPriority, libPreCompiled, libLinkOnly);
            buildInfo.addLinkObjects('libiomp5md.lib',fullfile(matlabroot,'bin','win64'), ...
                libPriority, libPreCompiled, libLinkOnly);
            buildInfo.addIncludePaths(fullfile(pwd,'mkl','WIN','include'));
            buildInfo.addDefines('-DMKL_ILP64');
        end
        function headerName = getHeaderFilename()
            headerName = 'mkl_cblas.h';
        end
        function intTypeName = getBLASIntTypeName()
            intTypeName = 'MKL_INT';
        end
    end
end

この例のクラスを、独自の BLAS コールバック クラスを記述するためのテンプレートとして使用します。

異なる BLAS ライブラリを使用している場合は、'mkl_cblas.h' を CBLAS ヘッダー ファイルの名前と置き換えます。

異なる BLAS ライブラリを使用している場合は、'MKL_INT' を CBLAS 整数データ型の名前と置き換えます。

ビルド情報の BLAS ライブラリの名前と場所を updateBuildInfo で更新するには、ビルド情報の addLinkObjects メソッドを使用します。Intel MKL BLAS ライブラリを使用する場合は、リンク行アドバイザーを使用して、使用例に対して推奨されるライブラリおよびコンパイラのオプションを確認します。

ビルド情報の CBLAS ヘッダー ファイルの場所を updateBuildInfo で更新するには、ビルド情報の addIncludePaths メソッドを使用します。

プリプロセッサ マクロ定義を updateBuildInfo でビルド情報に追加するには、ビルド情報 addDefines メソッドを使用します。

コンパイラ オプションを updateBuildInfo で指定するには、ビルド情報 addCompileFlags メソッドを使用します。

リンカー オプションを updateBuildInfo で指定するには、ビルド情報 addLinkFlags メソッドを使用します。

getBLASDoubleComplexTypeName メソッドは、生成コードの倍精度複素変数に使用する型を返します。BLAS ライブラリが倍精度複素数配列引数に double* および void* 以外の型を取る場合は、このメソッドをコールバック クラスの定義に含めます。

function doubleComplexTypeName = getBLASDoubleComplexTypeName()
doubleComplexTypeName = 'my_double_complex_type';
end

my_double_complex_type を、BLAS ライブラリが倍精度複素数配列引数に取る型で置き換えます。

getBLASSingleComplexTypeName メソッドは、生成コードの単精度複素変数に使用する型を返します。BLAS ライブラリが単精度複素数配列引数に float* および void* 以外の型を取る場合は、このメソッドをコールバック クラスの定義に含めます。

function singleComplexTypeName = getBLASSingleComplexTypeName()
doubleComplexTypeName = 'my_single_complex_type';
end

my_single_complex_type を、BLAS ライブラリが単精度複素数配列引数に取る型で置き換えます。

useEnumNameRatherThanTypedef メソッドは既定で false を返します。BLAS ライブラリの列挙の型に enum キーワードが含まれる場合は、コールバック クラス定義で true を返すようにこのメソッドを再定義します。

function p = useEnumNameRatherThanTypedef()
p = true;
end

この例は、Linux® プラットフォーム上の OpenBLAS ライブラリにリンクするための BLAS コールバック クラス openblascallback の実装です。openblascallback には、getBLASDoubleComplexTypeNamegetBLASSingleComplexTypeName、および useEnumNameRatherThanTypedef の明示的な実装はありません。これは、以下のメソッドを coder.BLASCallback から継承します。

classdef openblascallback < coder.BLASCallback
    methods (Static)
        function updateBuildInfo(buildInfo, buildctx)
            libPriority = '';
            libPreCompiled = true;
            libLinkOnly = true;
            libName = 'libopenblas.a';          
            libPath = fullfile(pwd,'openblas');
            incPath = fullfile(pwd,'openblas');
            buildInfo.addLinkFlags('-lpthread');
            buildInfo.addLinkObjects(libName, libPath, ...
                libPriority, libPreCompiled, libLinkOnly);
            buildInfo.addIncludePaths(incPath);
        end
        function headerName = getHeaderFilename()
            headerName = 'cblas.h';
        end
        function intTypeName = getBLASIntTypeName()
            intTypeName = 'blasint';
        end
    end
end

OpenBLAS ライブラリ関数の呼び出しを含む C++ コードを生成する場合、-pedantic オプションでコードをコンパイルすると警告が生成されます。-pedantic コンパイラ オプションを無効にするには、updateBuildInfo メソッドに、次の行を含めます。

if buildctx.getTargetLang() == 'C++'
    buildInfo.addCompileFlags('-Wno-pedantic');
end

OpenBLAS は C89/C90 規格をサポートしません。

R2018b で導入