固定小数点の自動変換
固定小数点への自動変換機能
浮動小数点の MATLAB® コードを固定小数点コードに変換するには、固定小数点コンバーター アプリを使用するか、コマンド ラインで関数 fiaccel
の -float2fixed
オプションを使用します。シミュレーション範囲データまたは派生 (静的とも呼ばれる) 範囲データのいずれかまたは両方に基づいてデータ型を推奨するよう選択できます。
静的範囲を手動で入力できます。手動で入力された範囲はシミュレーション範囲より優先され、アプリはデータ型を推奨する際にこれらの範囲を使用します。さらに、アプリによって変更されないように推奨型を変更してロックすることができます。詳細は、推奨されたデータ型のロックを参照してください。
サポートされている MATLAB の機能と関数のリストは、固定小数点の自動変換でサポートされる MATLAB 言語機能を参照してください。
固定小数点の変換では、以下を実行できます。
コード カバレッジの結果により、テスト ファイルが目的のアルゴリズムの動作範囲のすべてに対応していることを確認。
既定の語長に基づいた小数部の長さの推奨。
既定の小数部の長さに基づいた語長の推奨。
0 または正の整数の最適化。
シミュレーションの最小値/最大値データに対する安全余裕の指定。
推奨されたデータ型でプロジェクトをビルドできるかどうかの検証。
固定小数点型を適用してテスト ファイルを実行し、数値をテスト。
各変数で使用されるビットのヒストグラムの表示。
オーバーフローの検出。
コード カバレッジ
既定では、アプリはコード カバレッジ結果を表示します。テスト ファイルは、シミュレーション範囲が正確になるよう、動作範囲全体に対してアルゴリズムを実行しなければなりません。推奨される固定小数点データ型の性質は、テスト ファイルが適切な精度でアルゴリズムの動作範囲をどの程度カバーしているかによって決まります。
コード カバレッジの結果を確認すると、テスト ファイルがアルゴリズムを適切に実行しているか検証できます。コード カバレッジが適切でない場合、テスト ファイルを変更するか、テスト ファイルを追加してカバレッジを大きくします。1 回の実行で複数のテスト ファイルをシミュレートすると、累積カバレッジが表示されます。一方、複数のテスト ファイルを指定して 1 つずつ実行すると、最後に実行したファイルのカバレッジが表示されます。
コードの左側に色分けされたカバレッジ バーが表示されます。
次の表では色分けを説明します。
カバレッジ バーの色 | 意味 |
---|---|
緑 | 以下のいずれかに該当します。
さまざまな緑の色調は、行の実行回数の各範囲を示しています。最も濃い緑の色調は、最大の範囲を示しています。 |
オレンジ | エントリポイント関数が複数回実行され、コードが 1 回実行される。 |
赤 | コードが実行されない。 |
カバレッジ バーの上にカーソルを置くと、色の強調表示がコード上に拡大されます。コードの各セクションにそのセクションの実行回数が表示されます。
テスト ファイルが目的の動作範囲全体でアルゴリズムをテストしていることを検証するには、コード カバレッジの結果を確認します。
カバレッジ バーの色 | 作業 |
---|---|
緑 | コードのセクションがカバレッジの表示よりも頻繁に実行されることを想定する場合、MATLAB コードまたはテスト ファイルを変更します。 |
オレンジ | これは初期化コード (永続変数の初期化など) の想定された動作です。コードが 1 回を超えて実行されることを想定する場合、MATLAB コードまたはテスト ファイルを変更します。 |
レッド | 実行されないコードがエラー条件である場合、これは許容できる動作です。コードが実行されることを想定する場合、MATLAB コードまたはテスト ファイルを変更します。コードが保守的に作成されていて上限と下限があり、テスト ファイルを変更してもこのコードにアクセスできない場合は、静的最小値と静的最大値を追加します。派生範囲の計算を参照してください。 |
既定の設定では、コード カバレッジはオンです。テスト ファイルのカバレッジが適切であると確認できた場合のみオフにしてください。コード カバレッジをオフにするとシミュレーションの速度が向上します。コード カバレッジをオフにするには、[固定小数点に変換] ページで、次の操作を実行します。
[解析] 矢印
をクリックします。
[コード カバレッジを表示] チェック ボックスをオフにします。
データ型の推奨
[入力の型を定義] ステップで、エントリポイント関数を呼び出すテスト ファイルを指定します。アプリによってテスト ファイルが実行され、コードが解析されて、エントリポイントの入力引数の型が推定されます。
アプリは、計算された範囲と、語長または小数部の長さの設定に基づいて固定小数点データ型を推奨します。範囲はシミュレーション範囲データと派生範囲データ (静的範囲とも呼ばれる) のいずれかまたは両方に基づいて計算されます。シミュレーションを実行して派生範囲を計算した場合、アプリはシミュレーション範囲と派生範囲をマージします。
メモ
MATLAB クラスには、派生範囲に基づいてデータ型を推奨することはできません。
派生範囲の解析は非スカラー変数ではサポートされていません。
静的範囲を手動で入力できます。手動で入力された範囲はシミュレーション範囲より優先され、アプリはデータ型を推奨する際にこれらの範囲を使用します。派生範囲の解析のみを使用して範囲を解析する場合は、静的範囲を入力する必要があります。
推奨された型を変更し、ツールによって変更されないようにロックすることもできます。詳細は、推奨されたデータ型のロックを参照してください。
シミュレーションの実行
固定小数点の変換中、エントリポイント MATLAB ファイル用にインストルメント化された MEX 関数がアプリによって生成されます。エラーが発生せずにビルドが完了すると、アプリによりコード内の関数と変数のコンパイルされた情報 (型、サイズおよび実数/複素数) が表示されます。ローカル関数に移動するには、[関数] タブをクリックします。ビルド エラーが発生すると、ビルドの問題が発生したコード行へのリンクを示すエラー メッセージが表示されます。シミュレーションを実行する前にこれらのエラーに対処しなければなりません。MATLAB エディターでリンクを使用して問題のコード行に移動し、コードを変更して問題を修正します。固定小数点変換でサポートされない関数がコードに使用されている場合、それらが [関数の置き換え] タブに表示されます。関数の置換を参照してください。
シミュレーションを実行する前に、実行するテスト ファイル (複数可) を指定します。シミュレーションを実行すると、アプリはテスト ファイルを実行し、インストルメント化された MEX 関数を呼び出します。MATLAB の設計コードを変更した場合、アプリはテスト ファイルを実行する前に更新された MEX 関数を自動的に生成します。
テスト ファイルが正常に実行された場合、シミュレーションの最小値と最大値および推奨された型が [変数] タブに表示されます。手動で変数の静的範囲を入力する場合、手動で入力した範囲がシミュレーション範囲より優先されます。推奨された型を手動で入力するかヒストグラムを使用して変更すると、アプリによって変更されないようにデータ型がロックされます。
テスト ファイルが正常に実行されなかった場合、エラーが [出力] タブに表示されます。
テスト ファイルによってアルゴリズムが動作範囲全体にわたって実行されなければなりません。推奨される固定小数点データ型の品質は、テスト ファイルが適切な精度でアルゴリズムの動作範囲をどの程度カバーしているかによって決まります。テスト ファイルを追加して、シミュレーション中に 1 つを超えるテスト ファイルを選択して実行できます。複数のテスト ファイルを実行する場合、シミュレーションの結果はアプリによってマージされます。
オプションで、ヒストグラムのデータを記録するよう選択できます。シミュレーションの実行後、各変数のヒストグラムを表示できます。詳細は、ヒストグラムのデータの記録を参照してください。
派生範囲の計算
派生範囲に基づいてデータ型を推奨すると、動作範囲全体にわたってアルゴリズムを実行するテスト ファイルを提供する必要がないというメリットがあります。一般に、このようなテスト ファイルの実行には時間がかかります。アプリでは、スカラー変数のみについて派生範囲を計算できます。
派生範囲を計算し、これらの範囲に基づいてデータ型を推奨するには、すべての入力変数に対して、静的最小値と最大値または推奨データ型を指定します。解析結果を向上させるために、他の変数にはできるだけ多くの静的範囲情報を入力してください。範囲を手動で入力するか、シミュレーション範囲をプロモートして静的範囲として使用できます。手動で入力した静的範囲は常にシミュレーション範囲より優先されます。
ハードウェア ターゲットの使用するデータ型が既知の場合、この型と一致するように推奨されるデータ型を設定します。手動で入力されたデータ型は、アプリで変更されないようにロックされます。アプリはこれらのデータ型を使用して入力の最小値と最大値を計算し、他の変数の範囲を派生させます。詳細は、推奨されたデータ型のロックを参照してください。
[派生範囲の計算] を選択した場合、アプリは派生範囲の解析を実行して MATLAB アルゴリズムの変数の静的範囲を計算します。解析が完了すると、[変数] タブに静的範囲が表示されます。実行により、派生範囲として +/-Inf
が作成された場合は、すべての永続変数の範囲を定義することを検討してください。
オプションで、[派生範囲のクイック解析] を選択できます。このオプションを使用すると、アプリはより高速に静的解析を実行します。計算された範囲は必要以上に大きい場合があります。このオプションは、静的解析に時間がかかりすぎる場合に選択してください。
プロジェクトの派生範囲の解析に時間がかかっている場合は、オプションでタイムアウトを設定できます。タイムアウト時間に到達するとアプリは解析を中止します。
推奨されたデータ型のロック
推奨されたデータ型をロックすることで、アプリによる変更を防げます。次のいずれかの方法で行います。
アプリで、推奨データ型を手動で設定。
ツールによって推奨された型を右クリックして
[計算値をロック]
を選択。
ロックされたデータ型は識別しやすいように太字で表示されます。以下のいずれかの方法で型のロックを解除できます。
手動で上書き。
右クリックして
[変更を元に戻す]
を選択。この場合、選択された型のみロックが解除されます。右クリックして
[すべての変数の変更を元に戻す]
を選択。これにより、ロックされているすべての推奨されたデータ型のロックが解除されます。
関数の表示
固定小数点変換プロセスの [固定小数点に変換] のステップでは、プロジェクトの関数のリストを左ペインで表示できます。このリストには関数の特殊化とクラス メソッドも含まれます。リストから関数を選択すると、その関数またはクラス メソッドの MATLAB コードがコード ウィンドウに表示され、使用する変数が [変数] タブに表示されます。
変換後、左側のペインに、元のアルゴリズムの固定小数点バージョンを含む出力ファイルのリストも表示されます。関数が特殊化されていない場合、変換後の固定小数点のファイル名は、元の関数名に固定小数点を示す接尾辞を付けたものになります。たとえば、ex_2ndOrder_filter.m
の固定小数点バージョンは ex_2ndOrder_filter_fixpt.m
です。
クラス
アプリでは、クラスとそのメソッドのそれぞれについての情報が表示されます。たとえば、静的メソッド MAX_VALUE
とメソッド next
をもつクラス Counter
を考えます。
クラスを選択する場合、[変数] タブにクラスとそのプロパティがアプリによって表示されます。
メソッドを選択する場合、メソッドによって使用される変数のみがアプリによって表示されます。
特殊化
関数が特殊化されている場合、アプリは特殊化をそれぞれリストし、順番に番号を付けます。たとえば、サブ関数 foo
および bar
を異なる入力の型を使用して複数回呼び出す関数 dut
を考えます。
function y = dut(u, v) tt1 = foo(u); tt2 = foo([u v]); tt3 = foo(complex(u,v)); ss1 = bar(u); ss2 = bar([u v]); ss3 = bar(complex(u,v)); y = (tt1 + ss1) + sum(tt2 + ss2) + real(tt3) + real(ss3); end function y = foo(u) y = u * 2; end function y = bar(u) y = u * 4; end
最上位の関数を選択する場合、アプリは [変数] タブにすべての変数を表示します。
ツリー ビューを選択する場合、アプリは各特殊化への呼び出しの行番号も表示します。
特殊化の 1 つを選択すると、その特殊化が使用する変数だけが表示されます。
生成された固定小数点コードでは、固定小数点の各特殊化の番号が [ソース コード] リストにある番号に一致しているので、コードの浮動小数点バージョンと固定小数点バージョンを簡単に比較できます。たとえば、foo > 1
に対して生成される固定小数点関数には foo_s1
という名前が付きます。
変数の表示
[変数] タブには [ナビゲーション] ペインで選択した関数の各変数に関する以下の情報が表示されます。
[型] - MATLAB アルゴリズムで使用される変数の元のデータ型。
[シミュレーションの最小値] と [シミュレーションの最大値] - シミュレーション中に変数に代入される最小値と最大値。
シミュレーションの最小値と最大値は編集できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが、その後の解析では編集された値が使用されます。アプリによって推奨された型に戻すことができます。
[静的最小値] と [静的最大値] — 静的最小値と最大値。
派生範囲を計算し、これらに基づいてデータ型を推奨するには、すべての入力変数に静的最小値および最大値を指定します。解析結果を向上させるために、他の変数にはできるだけ多くの静的範囲情報を入力してください。
派生範囲の計算時、アプリは静的解析を実行してコード内の変数の静的範囲を計算します。解析が完了すると静的範囲が表示されます。計算結果は編集できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが、その後の解析では編集された値が使用されます。アプリによって推奨された型に戻すことができます。
[0 または正の整数] - シミュレーション中に変数に代入される値がすべて整数かどうか。
アプリは変数が常に 0 または正の整数であるかどうかを判定します。このフィールドは変更できます。編集されたフィールドは太字で表示されます。これらのフィールドを編集しても静的な範囲解析は開始されませんが、その後の解析では編集された値が使用されます。アプリによって推奨された型に戻すことができます。
指定された語長 (または小数部の長さ) の推奨された固定小数点データ型。推奨されたデータ型では
numerictype
表記が使用されます。たとえば、numerictype(1,16,12)
は語長が 16 で小数部の長さが 12 の符号付き固定小数点型を表します。numerictype(0,16,12)
は語長が 16 で小数部の長さが 12 の符号なし固定小数点型を表します。アプリはデータ型を式に適用しないので、式に対する推奨型は表示されません。代わりに、元のデータ型が表示されます。
コード ペインでカーソルを変数名に移動させて、変数の情報を表示および編集することもできます。
Ctrl+F
キーを使用して MATLAB コード内および [変数] タブ上で変数を検索できます。アプリによってコード内の出現場所が強調表示され、[変数] タブ上に指定された名称で変数のみが表示されます。
MATLAB クラスの情報の表示
アプリによって以下が表示されます。
MATLAB クラスのコードおよびクラス メソッドのコード カバレッジ (コード ウィンドウ内)。[固定小数点に変換] ページの [ソース コード] リストを使用して表示するクラスまたはクラス メソッドを選択します。クラス メソッドを選択する場合、アプリはコード ウィンドウでメソッドを強調表示します。
MATLAB クラスについての情報 ([変数] タブ内)。
ヒストグラムのデータの記録
ヒストグラムのデータを記録するには、次の手順に従います。
[固定小数点に変換] ページで [解析] 矢印
をクリックします。
[ヒストグラム データを記録] を選択します。
[範囲の解析] をクリックします。
シミュレーションの終了後に変数のヒストグラムを表示するには、[変数] タブで、その変数の [推奨された型] フィールドをクリックします。
ヒストグラムは、推奨されるデータ型および推奨されるデータ型がカバーするシミュレーション値の割合を示します。ビットの重みが X 軸、出現割合が Y 軸に沿って表示されます。ヒストグラムの各ビンはバイナリ ワード中のビットに対応しています。たとえば、このヒストグラムでは numerictype(1,16,14)
型の変数の範囲を表示します。
以下の操作により、推奨されるデータ型の変更による影響を表示することもできます。
ヒストグラム ウィンドウ内で境界ボックスの端をドラッグして、推奨されるデータ型を変更。
[符号付き] を選択または選択解除。
自動変換によって推奨された型に戻すためには、ヒストグラム ウィンドウ内で をクリックします。
関数の置換
MATLAB コードで固定小数点に対応していない関数を使用している場合、これらの関数が [関数の置き換え] タブに一覧表示されます。サポートされていない関数を、カスタム関数とルックアップ テーブルのどちらに置き換えるかを指定できます。
このリストから関数の置換を追加したり削除したりできます。関数に対して関数の置換を入力すると、プロジェクトの作成時に置換関数が使用されます。置換を入力しない場合、関数には元の MATLAB コード内で指定された型が使用されます。
メモ
このテーブルを使用して関数名を置換することが可能ですが、引数パターンを置換することはできません。
コード生成の準備状態のスクリーニングが無効になっている場合、[関数の置き換え] タブでサポートされていない関数が不完全または正しくならない場合があります。この場合、手動で関数を追加します。を参照してください。
型の検証
コードを固定小数点に変換すると、推奨される固定小数点データ型を使用してビルドが検証されます。検証に合格すると、固定小数点型 MATLAB アルゴリズムの数値的な動作のテストの準備が整います。
検証時にエラーまたは警告が発生した場合は、[出力] タブに表示されます。エラーまたは警告が発生した場合、以下を行ってください。
[変数] タブで、推奨される型および手作業で修正した型を確認し、それらが有効であることを検証します。
[関数の置き換え] タブで、サポートされていない関数に対して関数の置換を行ったことを確認します。
数値のテスト
固定小数点へのコードの変換と推奨される固定小数点データ型の検証の後、[テスト] をクリックし、固定小数点 MATLAB アルゴリズムの動作を検証します。既定では、テスト ファイルを追加して入力を定義した場合またはシミュレーションを実行した場合は、アプリはこのテスト ファイルを使用して数値をテストします。オプションで、テスト ファイルを追加し、1 つを超えるテスト ファイルを選択して実行することもできます。アプリは生成された固定小数点 MATLAB コードを元の浮動小数点 MATLAB コードの数値的な動作と比較します。比較プロットの入力と出力を記録するように選択した場合は、アプリは各スカラー出力の追加プロットを生成します。このプロットは浮動小数点と固定小数点の結果およびこれらの差を示します。非スカラー出力についてはエラー情報のみを示します。
固定小数点シミュレーション後に数値的な結果が所要の精度を満たさない場合は、固定小数点データ型の設定を修正し、型の検証と数値的なテストの手順を繰り返します。必要な結果を得るには、これらのステップを複数回繰り返す必要がある場合があります。
オーバーフローの検出
数値のテストを行う場合、[スケーリングされた double を使用してオーバーフローを検出] を選択するとオーバーフローの検出が有効になります。このオプションが選択されている場合、変換アプリは推奨された固定小数点型のスケーリングされた double バージョンを使用してシミュレーションを実行します。スケーリングされた double は、倍精度浮動小数点のデータを格納するため、演算を全範囲で実行します。また、固定小数点設定も保持するため、計算が固定小数点型の範囲から外れた場合に報告することが可能です。詳細は、スケーリングされた doubleを参照してください。
アプリによってオーバーフローが検出された場合、[オーバーフロー] タブに次が表示されます。
オーバーフローした変数と式のリスト
各変数のオーバーフローの量に関する情報
コード ウィンドウ内の変数または式へのリンク
元のアルゴリズムがスケーリングされた double を使用している場合、それらの式のオーバーフロー情報もアプリによって提供されます。