主要内容

MATLAB功能ブロックからの生成コード内の線形代数の高速化

MATLAB功能ブロックで代数关数に対してさたコードの速度を向上向上させるせるにはは,が拉帕克呼び出しをように指定しますます。はは数値线形代数のソフトウェアライブラリですです。コードコードコードジェネレータージェネレーターは拉帕克cインターフェイス。ます。呼び出し呼び出しすると指定しし代数关数关数の入力入力入力配列配列がが特定のの基准基准をを満たす満たす场合场合,コードコードコードジェネレーターはははははははははは呼び出し呼び出し呼び出し呼び出し呼び出し关数のを生成し。。

lapackライブラリはライブラリライブラリ使用ます。环境环境合わせ合わせて最适最适化さされれたたたたたライブラリライブラリwww.netlib.org/lapack/faq.html#_what_and_and_are_are_are_the_lapack_vendors_implementationsを参照しください。

拉帕克ライブラリの指定

lapack lapack lapack lapackコールバックにアクセスアクセスできなけれなりませません。。。。lapacklapack lapack lapack lapack lapack lapacke lapacke lapackeヘッダーlapackライブラリ使用するを示すには,,コールバックコールバックの名前指定しし。[カスタムlapackライブラリライブラリ]を、たとえばUsemylapackのようコールバックの名前设定します。

拉帕克コールバックコールバック记述记述

拉帕克lapack lapackeヘッダーヘッダーのを指定指定するに,,はははコールバックコールバックコールバックコールバッククラスクラスををを记述ししますます。。生成生成さされたたたたコードコードコードででででででででででで

コールバック クラスは抽象クラスcoder.lapackcallbackから派生ばません。このクラス例をテンプレートとしてします。

ClassDefusemylapack 方法(静止的)功能hn = getheaderfilename()hn ='mylapacke_custom.h';结尾功能updateBuildInfo(buildInfo,buildctx)buildinfo.addincludepaths(fullfile(pwd,'包括');libname =“ mylapack”;libpath = fullfile(pwd,'lib');[〜,linklibext] = buildctx.getstdlibinfo();buildinfo.addlinkobjects([[libname linklibext],libpath,...'',是的,是的);buildinfo.adddefines('has_lapack_config_h');buildinfo.adddefines('lapack_complex_structure');buildinfo.adddefines('lapack_ilp64');结尾结尾结尾

GetheaderFilenameメソッドとUpdateBuildInfoメソッドをしなけれなりません。GetheaderFilenameメソッドはLAPACKEヘッダーファイル名を返します。コールバック クラスの例では、mylapacke_custom.hlapackeヘッダーヘッダーファイル名前に置き换え。。UpdateBuildInfolapackライブラリライブラリリンクするプロセスに必要情报を提供提供。。テンプレートテンプレートにあるあるあるコードとと同様同様同様ののコードコードコードををを使用使用使用ししししてて,,,ヘッダーヘッダーヘッダーファイルファイルファイル场所场所とととの例で,mylapacklapackライブラリライブラリライブラリ名前に置き换え。。

コンパイラがとして表さ复素数データのみサポートしている场合は,UpdateBuildInfoメソッドに次の行を含めます。

buildinfo.adddefines('has_lapack_config_h');buildinfo.adddefines('lapack_complex_structure');

lapack lapackライブラリ整数型をしばなりませ整数整数型型を指定指定指定しとと,结果としてとして不不正确な动作动作やクラッシュクラッシュクラッシュ生じる生じる可能可能

  • UpdateBuildInfoメソッドにの行を。。

    buildinfo.adddefines('has_lapack_config_h');buildinfo.adddefines('lapack_ilp64');

  • lapackライブラリライブラリがする整数を指定することできます。たとえば,,型型漫长である场合,UpdateBuildInfoメソッドに行を含め。。

    buildinfo.adddefines('lapack_int =长');

拉帕克コールバッククラス指定したたたた

lapack lapackライブラリのの,の关数关数をコードを生成するする方法をを示しますます。。。この例例ででででははUsemylapacklapackライブラリライブラリライブラリ指定と仮定し。。

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

  2. MATLAB功能ブロックをに追加し。。

  3. MATLAB功能ブロックに、線形代数関数を呼び出すコードを追加します。たとえば、MATLAB®关数SVDを呼び出す关数mysvdを追加します。

    功能s = mySVD(a)%#codegens = svd(a);结尾

  4. MATLAB功能ブロックの左に常数ブロックをします。をを零(500)に设定し。

  5. MATLAB功能ブロックの右にOutportブロックを追加ます。

  6. ブロックを结线ます。

  7. [コンフィギュレーション パラメーター][コード][详细设定][カスタムlapackライブラリライブラリ]パラメーターをUsemylapackに设定し。

    Matlabパスパスパスにばなりませ。。。

  8. モデルを作成ます。

mysvdへのがに大きい,コードジェネレーターはSVDlapack呼び出し呼び出しをします。。SVDlapackライブライブラリのの例を示し。。

info_t = lapacke_dgesvd(... lapack_col_major,'n','n',(lapack_int)500,...(lapack_int)500)500,&a [0],(lapack_int)500(lapack_int)1,null,(lapack_int)1,&superb [0]);

lapackライブラリでライブラリライブラリの指定指定

lapackライブラリライブラリを利用できなければません。。。がががライブラリライブラリライブラリライブラリライブラリ有有有れれてているいるいる场合场合,,环境环境环境変数変数またはまたはリンカーオプションオプション使用使用し

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

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

  • 苹果系统プラットフォームで,ld_library_path环境环境変数修正する,,rpathリンカーオプション使用します。

rpathリンカーオプション指定するに,,coder.lapackcallbackクラスのUpdateBuildInfoメソッド内の情报addlinkflagsメソッドをます。たとえば,,,コンパイラコンパイラ,次のににます。

buildinfo.addlinkflags(sprintf(' -  wl,-rpath,“%s”,libpath));

参考

关连するトピック

外部の网サイト