主要内容

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

MATLAB函数ブロックからの生成コ,ド内の行列演算の高速化

MATLAB函数ブロックで特定の低水準なベクトル演算および行列演算(行列乗算など)に対して生成されたコードの実行速度を向上させるには,コードジェネレーターが布拉斯特区呼び出しを作成するように指定します。布拉斯特区は、高度に最適化された、マシンに特定的な実装をいくつか持つ、低水準なベクトル計算および行列計算用ソフトウェア ライブラリです。コード ジェネレーターは、BLAS に対してCBLASC @ C @ C @ C @ C @ C @ C @ C布拉斯特区呼び出しを生成すると指定し、行列関数の入力配列が特定の基準を満たす場合、コード ジェネレーターは BLAS 呼び出しを生成します。それ以外の場合は、コード ジェネレーターは行列関数のコードを生成します。

コドジェネレタは指定のblasラブラリを使用します。実行環境に合わせて最適化されたBlasラブラリを指定します。

Blasラブラリの指定

生成されたコードで巴拉斯呼び出しを生成するには,布拉斯特区コールバッククラスにアクセスできなければなりません。Blasコ,ルバッククラスでは BLAS ライブラリ、CBLAS ヘッダー ファイル、特定の CBLAS インターフェイスで使用する C データ型、およびビルドプロアセスのコンパイラとリンカー オプションを指定します。

布拉斯特区呼び出しを生成して特定の巴拉斯ライブラリを使用することを指定するには,布拉斯特区コールバッククラスの名前を指定します。[コンフィギュレ,ションパラメ,タ,]ダ,[カスタムblasラブラリのコルバック]を,コ,ルバッククラスの名前に設定します。

Blasコ,ルバッククラスの記述

生成されたコードで特定の巴拉斯ライブラリの呼び出しを生成するには,布拉斯特区コールバッククラスを記述します。スタンドアロンコードで巴拉斯呼び出しにこの巴拉斯ライブラリを使用する他のユーザーとコールバッククラスを共有します。

コ,ルバッククラスは抽象クラス编码器。布拉斯特区Callbackから派生しなければなりません。以下に,Windows®プラットフォ,ムで英特尔MKLBlasラブラリと統合するためのコルバッククラスmklcallbackの実装例を示します。

classdefMklcallback <编码器。BLASCallback方法(静态)函数updateBuildInfo(buildInfo, ~) libPath = fullfile(pwd, ~)“mkl”“赢”“自由”“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“本”...“win64”), libPriority, libPreCompiled, libLinkOnly);buildInfo.addIncludePaths (fullfile (pwd,“mkl”“赢”“包括”));buildInfo.addDefines (“-DMKL_ILP64”);结束函数headerName = getHeaderFilename(“mkl_cblas.h”结束函数intTypeName = getBLASIntTypeName() intTypeName =“MKL_INT”结束结束结束

getHeaderFilenameメソッド,getBLASIntTypeNameメソッド,およびupdateBuildInfoメソッドを指定しなければなりません。getHeaderFilenameメソッドはcblasヘッダファル名を返します。異なるblasラescブラリを使用している場合は,mkl_cblas.hをcblasヘッダファルの名前と置き換えます。getBLASIntTypeNameメソッドは,cblasンタフェスで使用する整数デタ型の名前を返します。異なるblasラescブラリを使用する場合は,MKL_INTを使用するcblasンタフェス固有の整数デタ型の名前に置き換えます。updateBuildInfoメソッドはblasラブラリにリンクするビルドプロセスに必要な情報を提供します。コールバッククラス例のコードと同様のコードを使用してヘッダーファイルの場所,布拉斯特区ライブラリの絶対パス名,コンパイラとリンカーオプションを指定します。英特尔MKL BLASラ苹果笔记本电脑ブラリを使用する場合は,リンク行アドバザを使用して,使用例に対して推奨されるラaaplブラリおよびコンパaaplラのオプションを確認します。

他にも3のメソッドが编码器。布拉斯特区Callbackに既に実装されています。これらのメソッドは,getBLASDoubleComplexTypeNamegetBLASSingleComplexTypeName,およびuseEnumNameRatherThanTypedefです。既定では,コ,ルバッククラスはこれらの実装を编码器。布拉斯特区Callbackから継承します。特定の状況では,コールバッククラスを定義するときに,これらのメソッドを独自の定義でオーバーライドしなければなりません。

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

函数doubleComplexTypeName = getBLASDoubleComplexTypeName() doubleComplexTypeName =“my_double_complex_type”结束

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

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

函数singleComplexTypeName = getBLASSingleComplexTypeName() doubleComplexTypeName =“my_single_complex_type”结束

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

useEnumNameRatherThanTypedefメソッドは既定でを返します。布拉斯特区ライブラリの列挙の型に枚举キ,ワ,ドが含まれる場合は,コ,ルバッククラス定義で真正的を返すようにこのメソッドを再定義します。

函数p = useEnumNameRatherThanTypedef() p = true;结束

以下は,枚举キワドを含む生成されたcソスコドの抜粋です。

enum CBLAS_SIDE;enum cblas_upo b_t;双温度;enum CBLAS_TRANSPOSE c_t;enum CBLAS_DIAG d_t;

Blasコ,ルバッククラスの指定によるBlas呼び出しの生成

この例では,特定の巴拉斯ライブラリの巴拉斯関数を呼び出すコードを生成する方法を示します。Blasコ,ルバッククラスuseMyBLASは,この例で使用するblasラescブラリを指定します。

  1. 金宝app®モデルを作成します。

  2. MATLAB函数ブロックをモデルに追加します。

  3. MATLAB函数ブロックに,基本的な行列演算の関数を呼び出すコ,ドを追加します。たとえば,2の行列一个Bを乗算する関数myMultiplyを追加します。

    函数C = myMultiply(A,B)% # codegenC = a * b;结束

  4. MATLAB函数ブロックの左に2の常数ブロックを追加します。それらの値を0 (1000)に設定します。

  5. MATLAB函数ブロックの右に外港ブロックを追加します。

  6. ブロックを結線します。

  7. [コンフィギュレ,ションパラメ,タ,]ダ,[カスタムblasラブラリのコルバック]を,コ,ルバッククラスの名前useMyBLASに設定します。

    コ,ルバッククラスはmatlab®パス上になければなりません。

  8. モデルを作成します。

    一个Bが十分な大きさである場合,コ,ドジェネレ,タ,は行列乗算関数のblas呼び出しを生成します。

実行環境でのblasラブラリの場所の指定

Blasラブラリは実行環境で利用できなければなりません。Blasラブラリが共有されている場合、環境変数またはリンカー オプションを使用して BLAS ライブラリの場所を指定します。

  • Windowsプラットフォ,ムでは,PATH環境変数を編集します。

  • Linux®プラットフォ,ムでは,ld_library_path環境変数を修正するか,rpathリンカ,オプションを使用します。

  • macOSプラットフォ,ムでは,ld_library_path環境変数を修正するか,rpathリンカ,オプションを使用します。

rpathリンカ,オプションを指定するには,blasコ,ルバッククラスのupdateBuildInfoメソッド内のビルド情報addLinkFlagsメソッドを使用します。たとえば,gccコンパaaplラの場合,次のようになります。

buildInfo.addLinkFlags (sprintf (' - wl rpath、“% s”,libPath));

OpenBLASラブラリの使用上の注意および制限事項

OpenBLASラ▪▪ブラリ関数の呼び出しを含むコ▪▪ドを生成する場合は,次のガ▪▪ドラ▪▪ンと制限に従います。

  • OpenBLASラブラリ関数の呼び出しを含むc++コドを生成する場合,学究式的オプションでコドをコンパルすると警告が生成されます。学究式的コンパesc escラオプションを無効にするには,以下の行をupdateBuildInfoメソッドに含めます。

    如果ctx.getTargetLang () = =“c++”buildInfo.addCompileFlags (“-Wno-pedantic”);结束
  • OpenBLASはC89/C90規格をサポトしません。

参考

関連するトピック

外部のWebサ电子邮箱ト