最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

指定された最小値と最大値を使用した固定小数点の最適化

この例では、モデル内で指定する最小値と最大値を使用して、生成されたコード内の固定小数点演算を最適化する方法を示します。

概要

最小値と最大値は、センサーの出力範囲などの、環境上の制限や機械的制限を表すことができます。コード生成ソフトウェアではこれらの値を使用して、到達不可能なコード分岐や不要なユーティリティ関数を取り除くことで、さらに効率的なコードを生成できます。

メモ: 指定された最小値および最大値の正確性と信頼性を確認しなければなりません。そうしないと、最適化の際に数値がシミュレーションと合わなくなる可能性があります。

生成コードの最適化には、次の利点があります。

  • ROM と RAM の消費を低減する。

  • 実行速度が向上する。

モデルを開く

モデル fxpdemo_min_max_optimization を開きます。

open_system('fxpdemo_min_max_optimization');

モデルの確認

このモデルでは、さまざまな固定小数点ブロックの入力端子の上流に最小値と最大値が指定されています。これらの値を利用することで、モデル内の各固定小数点演算が何らかの方法で最適化されます。

最適化を使用しないコードの生成

まず、指定されている最小値と最大値を使用せずに、このモデルのコードを生成します。青いボタンをダブルクリックします。

rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for model: fxpdemo_min_max_optimization
### Successful completion of code generation for model: fxpdemo_min_max_optimization

最適化を使用しないコードの確認

HTML コード生成レポートが開きます。ブロック "Product with reduced fraction length output data type" に対応するコードを確認します。このブロックを右クリックし、[コード生成]、[コードに移動] を選択します。

rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');

生成コードは次のようになります。

rtY.Out1 = mul_u32_u32_u32_sr10(rtU.In1, rtU.In2);

この固定小数点の乗算を実装するために、コード生成ソフトウェアはユーティリティ関数 mul_u32_u32_u32_sr10 を生成しなければなりません。また、mul_u32_u32_u32_sr10 を実装するために、2 番目のユーティリティ関数 mul_wide_u32 を生成しなければなりません。これらの関数は多くのコード行で構成されており、複数の一時変数を必要とします。

最適化の有効化

  1. 黄色のボタンをダブルクリックして [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. このダイアログ ボックスの [コード生成] の下にある、[指定した最小値と最大値を使用した最適化] を選択します。

set_param('fxpdemo_min_max_optimization', 'UseSpecifiedMinMax', 'on');

最適化を使用したコードの生成

次に、指定されている最小値と最大値を使用してコードを再生成します。

青いボタンをダブルクリックします。

rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for model: fxpdemo_min_max_optimization
### Successful completion of code generation for model: fxpdemo_min_max_optimization

最適化されたコードの検査

ブロック "Product with reduced fraction length output data type" を右クリックし、[コード生成]、[コードに移動] を選択します。

rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');

生成コードは次のようになります。

rtY.Out1 = rtU.In1 * rtU.In2 >> 10;

コード生成ソフトウェアでは、指定されている最小値と最大値を使用して、右にシフトする出力でより短い小数部の長さを安全に実装できることを判断し、ユーティリティ関数を生成しません。

他の演算の検査

生成されたコード内の他の演算を検査して、指定されている最小値と最大値をコード生成ソフトウェアがどのように使用しているかを確認します。コード生成ソフトウェアでは単純な C 演算によって各固定小数点の演算を実装すると、不要な補助関数やコード分岐が取り除かれます。