このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
fiaccel
固定小数点コードの高速化と浮動小数点 MATLAB コードの固定小数点 MATLAB コードへの変換
説明
fiaccel
では、MATLAB® ファイル -options
fcn
fcn
.m
が、固定小数点コードを高速化する MEX 関数に変換されます。fiaccel
を使用するには、コードが次の要件のいずれかを満たしていなければなりません。
最上位の関数が入力や出力をもたず、コードで
fi
が使用されている。最上位の関数が出力または非定数の入力をもち、少なくとも 1 つの出力または入力が
fi
である。最上位の関数が組み込み整数クラス (
int8
、uint8
、int16
、uint16
、int32
、uint32
、int64
またはuint64
) を含む入力または出力を少なくとも 1 つもち、コードでfi
が使用されている。
例
固定小数点 MATLAB コードの高速化
この例では、関数 fiaccel
を使用して固定小数点 MATLAB コードを高速化する方法を示します。
移動平均を計算する関数を定義します。
type("moving_average.m")
function [avg,z] = moving_average(x,z) %#codegen if nargin < 2 z = fi(zeros(10,1),1,16,15); end z(2:end) = z(1:end-1); % Update buffer z(1) = x; % Add new value avg = mean(z); % Compute moving average end
テスト ファイルを作成します。
type("test_moving_average.m")
function avg = test_moving_average(x) %#codegen if nargin < 1 x = fi(rand(100,1),1,16,15); end z = fi(zeros(10,1),1,16,15); avg = x; for k = 1:length(x) [avg(k),z] = moving_average(x(k),z); end end
関数 fiaccel
を使用し、MEX 関数を作成して MATLAB コードを高速化します。
x = fi(rand(100,1),1,16,15); fiaccel test_moving_average -args {x} -report
高速化されていないコードと高速化されたコードを比較します。
tic avg = test_moving_average(x); toc % Non-compiled version tic avg = test_moving_average_mex(x); toc % Compiled version
浮動小数点 MATLAB コードの固定小数点への変換
coder.FixptConfig
オブジェクト fixptcfg
を既定の設定で作成します。
fixptcfg = coder.config('fixpt');
テスト ベンチの名前を設定します。この例では、テスト ベンチ関数名は dti_test
です。
fixptcfg.TestBenchName = 'dti_test';
浮動小数点の MATLAB 関数を固定小数点の MATLAB コードに変換します。この例では、MATLAB 関数名は dti
です。
fiaccel -float2fixed fixptcfg dti
入力引数
fcn
— MEX を生成する MATLAB 関数
関数名
MEX を生成する MATLAB 関数。現在の作業フォルダーまたはパス上に存在する関数として指定します。
メモ
最上位レベル ファイルが Unicode 文字を含むパス上にある場合、コード生成はそのファイルを検出できない場合があります。
-options
— コンパイラ オプション
オプション値 | スペースで区切られたオプション値のリスト
コンパイラ オプション。スペースで区切られたオプション値のリストとして指定します。fiaccel
では、構成オブジェクトを使用して指定されたオプションよりも、個々のコマンド ライン オプションが優先されます。コマンド ライン オプションが競合する場合は、最も右にあるオプションが優先されます。
以下の 1 つ以上の値として指定します。
-args example_inputs | サンプル入力値の cell 配列を指定して、MATLAB 関数入力のサイズ、クラスおよび実数/複素数を定義します。cell 配列におけるサンプル入力の位置は、MATLAB 関数定義における入力引数の位置に対応していなければなりません。関数定義よりも入力引数が少ない関数を生成するには、適用しない引数に対するサンプル値を省略します。 サンプル入力は、そのサンプル入力を適用する関数の直後に指定します。 サンプル値の代わりに、 |
-config config_object |
以下に例を示します。 cfg = coder.mexconfig; |
-d out_folder | 生成されたファイルを フォルダーの場所を指定しない場合、 フォルダー名にはアスタリスク ( |
-float2fixed float2fixed_cfg_name |
このオプションでは、
たとえば、次のようにします。 fixptcfg.TestBenchName = 'myadd_test'; myadd_test が浮動小数点から固定小数点への構成オブジェクト fixptcfg のテスト ファイルであることを指定します。このオプションは、 |
-g | 最適化を無効にして、デバッグ モードで MEX 関数をコンパイルします。指定しない場合、 |
-global global_values | MATLAB ファイルのグローバル変数の初期値を指定します。コンパイルする関数でグローバル変数を初期化するために cell 配列 生成された MEX コードと MATLAB は、それぞれ独自のグローバル データのコピーをもっています。一貫性を維持するために、これらの 2 つが情報をやり取りするときには必ずそれらのグローバル データを同期しなければなりません。データを同期しないと、グローバル変数は異なるものになる可能性があります。 このオプションは、 |
-I include_path |
MATLAB コードを MEX コードに変換する際には、 |
-launchreport | コード生成レポートを生成して開きます。このオプションを指定しないと、 |
-nargout | 生成されたエントリポイント関数で出力引数の数を指定します。コード ジェネレーターは指定した数の出力引数を MATLAB 関数定義での発生順に生成します。 |
-o output_file_name |
出力ファイル名を指定しないと、基本名は |
-O optimization_option |
指定しない場合、 |
-report | コード生成レポートを生成します。このオプションを指定しないと、 |
-? |
|
バージョン履歴
R2011a で導入R2023a: 定数入力に対する fiaccel
の既定の動作の変更
関数 fiaccel
で MEX ファイルを生成する際に、MEX ファイルの呼び出しで定数が自動的に削除されなくなりました。この変更により、MEX 生成時の定数入力についての既定の動作が fiaccel
と codegen
で同じになりました。
fiaccel myfun -args {x,coder.Constant(c)} myfun_mex(x,c)
以前の動作に戻すには、coder.MexConfig
オブジェクトの ConstantInputs
プロパティを 'Remove'
に設定します。
cfg = coder.MexConfig; cfg.ConstantInputs = "Remove"; fiaccel myfun -args {x,coder.Constant(c)} -config cfg myfun_mex(x)
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)