Main Content

固定小数点ツールを使用したシステムの固定小数点データ型の最適化

この例では、シミュレーション シナリオを定義し、それらのシナリオでシミュレーションを実行することで、固定小数点ツールを使用して範囲を収集する方法を示します。その後、固定小数点ツールを使用してシステムの固定小数点データ型を最適化できます。

最適化中に、ソフトウェアは元のモデルのシミュレーションを実行することで、ベースラインを確立します。次に、モデルの固定小数点バージョンを作成して、シミュレーションを実行し、新しいデータ型を使用して動作を決定します。最適化により、指定された動作の制約を満たし、かつ目的関数を最小化するモデルが選択されます。設定に Simulink.SimulationInput オブジェクトを含めることで、最適化中に考慮する追加のシミュレーション シナリオを定義できます。包括的な入力信号のセットは、最適化プロセス中に設計の動作範囲全体を確実にカバーするのに役立ちます。

モデルを開いてシミュレーションシナリオを定義

モデルを開きます。この例では、Controller サブシステムのデータ型を最適化します。モデルは、ランプ入力またはランダム入力のいずれかを使用するよう設定されています。

model = 'ex_controllerHarness';
open_system(model)

さまざまなシナリオを含む Simulink.SimulationInput オブジェクトを作成します。ランプ入力と、4 つの異なる seed の両方をランダム入力に使用します。

si = Simulink.SimulationInput.empty(5, 0);

% scan through 4 different seeds for the random input
rng(1);
seeds = randi(1e6, [1 4]);

for sIndex = 1:length(seeds)
    si(sIndex) = Simulink.SimulationInput(model);
    si(sIndex) = si(sIndex).setVariable('SOURCE', 2); % SOURCE == 2 corresponds to the random input
    si(sIndex) = si(sIndex).setBlockParameter([model '/Random/uniformRandom'], 'Seed', num2str(seeds(sIndex))); % scan through the seeds
    si(sIndex) = si(sIndex).setUserString(sprintf('random_%i', seeds(sIndex)));
end

% setting SOURCE == 1 corresponds to the ramp input
si(5) = Simulink.SimulationInput(model);
si(5) = si(5).setVariable('SOURCE', 1);
si(5) = si(5).setUserString('Ramp');

変換するシステムの準備

モードにおいてデータ型を最適化するには、固定小数点ツールを使用します。

  1. ex_controllerHarness モデルの [アプリ] ギャラリーで、[固定小数点ツール] を選択します。

  2. 固定小数点ツールの [新規] ワークフローで、[固定小数点の最適化された変換] を選択します。

  3. [設計対象のシステム (SUD)] で、データ型を最適化するサブシステムを選択します。この例では、[Controller] を選択します。

  4. [範囲の収集モード] で、範囲の収集方法として [シミュレーション範囲] を選択します。

  5. [シミュレーション入力]Simulink.SimulationInput オブジェクトを指定すると、その動作範囲全体にわたって設計を実行できます。この例では、定義したシミュレーション シナリオを使用します。[シミュレーション入力][si] に設定します。

  6. テーブルの [信号許容誤差] で、モデル内の信号のログが有効になっている任意の信号について許容誤差を指定できます。この例では、[信号許容誤差] セクションは、モデル内にログに記録される信号がないことを示しています。このモデルでは Model Verification ライブラリの Assertion ブロックを使用して最適化中のシステムの数値的な動作を検証するため、信号許容誤差の指定はオプションです。詳細については、動作の制約の指定を参照してください。

    以前のコマンド ライン最適化で保存した fxpOptimizationOptions オブジェクトがある場合、たとえば、複数のシミュレーション シナリオを使用したデータ型の最適化の例に従って以前にこのモデルのデータ型を最適化した場合は、[詳細オプション] セクションで fxpOptimizationOptions オブジェクトをインポートできます。[設定] ペインとツールストリップの [設定] メニューがインポートした値で更新されます。最適化オプション オブジェクトをインポートしない場合は、固定小数点ツールで手動で変更しない限り、既定値が使用されます。この例では、設定をアプリで手動で指定します。

  7. ツールストリップで [準備] をクリックします。固定小数点ツールは設計対象のシステムについて変換プロセスとの互換性をチェックし、モデルで見つかった問題をレポートします。可能な場合は、固定小数点ツールは互換性のない設定を自動的に変更します。詳細については、固定小数点ツールを使用した変換するシステムの準備を参照してください。

固定小数点ツールでのデータ型の最適化

  1. 最適化で使用する設定を指定するには、ツールストリップで [最適化オプション] をクリックします。

    この例では、次の設定を使用します。

    • [許容される語長][2:32] に設定します。

      この設定は、最適化されたシステムで使用できる語長を定義します。この設定は、最適化プロセスの近傍探索をターゲットにする場合に使用します。最適化の最終結果で、この設定の交差部分の語長とモデルの [ハードウェア実行] ペインで指定されたハードウェアの制約と互換性がある語長が使用されます。

    • [最大反復回数]3e2 に設定します。

      この設定は、最適化で実行する最大反復回数を指定します。理想的な解が見つかるか、最大反復回数に達するか、別の停止条件に達するまで、最適化プロセスで異なる解が反復して求められます。

    • [許容回数]50 に設定します。

      この設定は、新しい最適解が見つからない状況での最大反復回数を定義します。アルゴリズムで新しい最適解を求め続けている限り最適化が続行されます。

    • [目的関数][ビット幅合計] に設定します。この設定を使用して、指定された制約を満たしながら、総ビット幅を最小化するよう最適化に指定します。

    最適化設定の詳細については、fxpOptimizationOptions を参照してください。

  2. 指定した設定に従ってモデルのデータ型を最適化するには、[データ型の最適化] をクリックします。

    最適化プロセスにおいて、設計対象のシステム内のオブジェクトの範囲と設定で指定された制約がソフトウェアで解析され、目的関数を最小化しながら異種混合のデータ型がシステムに適用されます。最適化プロセスに関する詳細が固定小数点ツールの [最適化の詳細] ペインに出力されます。

    固定小数点ツールのツールストリップの [停止] をクリックすることで、最適化探索が完了する前に、最適化ソルバーを停止することができます。最適化を前回中断したところから再開するには、[データ型の最適化] をクリックして最適化ソルバーを再起動します。最適化を再開するには [近傍探索の実行] を有効にする必要があります。また、最適化ソルバーの停止条件 ([最大反復回数][最大時間 (秒)][許容回数 (反復回数)] など) の変更もできます。これにより、大規模な最適化探索空間をすばやく絞り込むことができます。

結果の確認

最適化が完了すると、固定小数点ツールのテーブルに最適化プロセスで見つかったすべての解が表示されます。テーブルの最初の解がコストが最も低い (総ビット幅が最も小さい) 解に相当します。

Fixed Point Tool displaying the solutions table at the bottom

最適化に使用された設定を表示するには、[結果] ペインで [最適化オプションの表示] をクリックします。

最適化プロセス中にモデル内のオブジェクトに対して収集された範囲を調べるには、[ワークフロー ブラウザー] ペインで [BaselineRun] を選択します。

固定小数点ツールには、モデル内のオブジェクトの範囲と各オブジェクトによって使用されているビットのヒストグラムの概要が表示されます。[シミュレーション データの可視化] ペインの各列は、モデル内の 1 つのオブジェクトのヒストグラムを表しています。ヒストグラムの各ビンはバイナリ ワード中のビットに対応しています。

列を選択すると固定小数点ツールの [結果] スプレッドシート内の対応するモデル オブジェクトが強調表示され、選択した結果に関する詳細情報が [結果の詳細] ペインに表示されます。

データ型の可視化を使用することで、モデル内にあるオブジェクトの範囲の概要を表示したり、オーバーフロー、アンダーフロー、非効率なデータ型のソースを見つけることができます。固定小数点ツールの [探索] タブを使用すると、追加の基準に基づいてツールの結果の並べ替えやフィルター処理ができます。

Fixed Point Tool displaying the visualization of ranges collected during optimization at the bottom

最適化されたデータ型をモデルに適用

  1. 最適化されたデータ型をモデルに適用するには、解テーブルから適用する解を選択します。ツールストリップの [探索] セクションで、[適用して比較] をクリックします。最適化されたデータ型を含む選択した解が固定小数点ツールによってモデルに適用され、シミュレーション データ インスペクターが開きます。

    この例では、最適解である [解 1] がモデルに自動的に適用されます。

  2. Controller サブシステムで、最適化された固定小数点データ型が適用されたことを確認できます。

    Controller subsystem with fixed point data types displayed on signals

ヒント

固定小数点ツールではシミュレーション データ インスペクター ツールのプロット機能を使用して、グラフィカルな解析用にログ信号をプロットできます。このモデルにはログに記録される信号がないため、この例では [比較] ボタンは無効になったままです。シミュレーション データ インスペクターを使用してデータ型最適化の結果を比較するには、モデル内の 1 つ以上の信号をログ記録します。

最適化ワークフロー ステップの MATLAB スクリプトへのエクスポート

固定小数点ツールでデータ型を最適化した後、最適化ワークフロー ステップを MATLAB® スクリプトにエクスポートすることを選択できます。これにより、現在の最適化ワークフロー ステップを保存し、コマンド ラインで fxpopt を使用してデータ型最適化を続行できるようになります。

ツールストリップの [スクリプトのエクスポート] をクリックします。固定小数点ツールは、fxpOptimizationScript.m という名前のスクリプトを現在の作業ディレクトリにエクスポートします。

model = 'ex_controllerHarness';

sud = 'ex_controllerHarness/Controller';

options = fxpOptimizationOptions();

options.MaxIterations = 300; % Maximum number of iterations to perform.

options.Patience = 50; % Maximum number of iterations where no new best solution is found.

options.AllowableWordLengths = 2:32; % Word lengths that can be used in your optimized system under design.

savedOptions = load('fxpOptimizationScript');

options.AdvancedOptions.SimulationScenarios = savedOptions.simulationScenarios;

result = fxpopt(model, sud, options);

explore(result);

最適化中に使用された Simulink.SimulationInput オブジェクト、si は、fxpOptimizationScript.mat という名前の MAT ファイルにエクスポートされます。

参考

|

関連するトピック