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.h
lapackeヘッダーヘッダーファイル名前に置き换え。。UpdateBuildInfo
lapackライブラリライブラリリンクするプロセスに必要情报を提供提供。。テンプレートテンプレートにあるあるあるコードとと同様同様同様ののコードコードコードををを使用使用使用ししししてて,,,ヘッダーヘッダーヘッダーファイルファイルファイル场所场所とととの例で,mylapack
lapackライブラリライブラリライブラリ名前に置き换え。。
コンパイラがとして表さ复素数データのみサポートしている场合は,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ライブラリのの,の关数关数をコードを生成するする方法をを示しますます。。。この例例ででででははUsemylapack
lapackライブラリライブラリライブラリ指定と仮定し。。
金宝app®モデルを作成ます。
MATLAB功能ブロックをに追加し。。
MATLAB功能ブロックに、線形代数関数を呼び出すコードを追加します。たとえば、MATLAB®关数
SVD
を呼び出す关数mysvd
を追加します。功能s = mySVD(a)%#codegens = svd(a);结尾
MATLAB功能ブロックの左に常数ブロックをします。をを
零(500)
に设定し。MATLAB功能ブロックの右にOutportブロックを追加ます。
ブロックを结线ます。
[コンフィギュレーション パラメーター],[コード],[详细设定],[カスタムlapackライブラリライブラリ]パラメーターを
Usemylapack
に设定し。Matlabパスパスパスにばなりませ。。。
モデルを作成ます。
mysvd
へのがに大きい,コードジェネレーターはSVD
lapack呼び出し呼び出しをします。。SVD
lapackライブライブラリのの例を示し。。
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));