メインコンテンツ

効率的なコードを生成するための最も簡潔な丸めモードの使用

最も簡潔な丸めモードでは、さまざまな手法を組み合わせることで、生成されたコードに余分な丸めコードを含める必要性を削減または除去しようとします。ほとんどすべての場合には、最も簡潔な丸めモードによって最も効率的なコードが生成されます。この丸めモードは、Simulink® でのみ使用可能です。

3 つの特定の基準を満たす特殊な除算では、負方向の丸めの方が効率が高くなる場合があります。

  • 固定小数点/符号付き整数の除算

  • 分母が不変定数

  • 分母が 2 の正確なべき乗

この場合は、丸めモードを Floor に設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスで、[ハードウェア実行] を選択します。[デバイスの詳細] で、オプション [符号付き整数の除算の丸め] を、量産ターゲットの丸め動作を示すオプションに設定します。

キャスト用の丸めの最適化

Simulink では、Data Type Conversion ブロックを使用して、あるデータ型の信号を別のデータ型にキャストできます。ブロックが元のデータ型よりも短い語長のデータ型に信号をキャストする場合、桁が落ちて丸めが発生します。最も簡潔な丸めモードでは、次のルールに従ってこれらの場合に最適な丸めモードを自動的に選択します。

  • 1 つの整数または固定小数点のデータ型を別のデータ型にキャストする場合は、最も簡潔な丸めモードによって負方向の丸めが行われます。

  • 浮動小数点データ型を整数または固定小数点のデータ型にキャストする場合は、最も簡潔な丸めモードによってゼロ方向への丸めが行われます。

高水準算術演算用の丸めの最適化

最も簡潔な丸めモードでは、高水準算術演算ごとに最適な丸めを選択します。たとえば、Product ブロックを使用して演算 y = u1 × u2 / u3 が実装されるとします。

A Product block configured to implement the above arithmetic operation.

C 標準に記載されているように、乗算操作に最も効率的な丸めモードは常に、負方向になります。ただし、C 標準では少なくとも 1 つのオペランドが負である場合の除算の丸めモードを指定していません。したがって、符号付きデータ型の除算操作に最も効率的な丸めモードは、製品ターゲットに応じて負方向またはゼロ方向になります。

最も簡潔な丸めモード:

  • すべての除算以外の操作に対して負方向に丸めます。

  • [符号付き整数の除算の丸め] パラメーターの設定に応じて、ゼロ方向または負方向に除算を丸めます。

最も効率的なコードを得るには、[符号付き整数の除算の丸め] モデル パラメーターを設定して、量産ターゲットが整数の除算をゼロ方向または負方向のどちらに丸めるかを指定しなければなりません。ほとんどの製品ターゲットでは、整数の除算操作をゼロ方向に丸めます。[最も簡潔] の丸めモードでは、このような場合に対して混合モードの丸めが適用され、乗算に対しては負方向、除算に対してはゼロ方向の丸めが行われます。

[符号付き整数の除算の丸め] モデル パラメーターが [未定義] に設定されている場合、最も簡潔な丸めモードでは最も効率的なコードを生成できない場合があります。最も簡潔な丸めモードではこの場合、除算をゼロ方向に丸めますが、パラメーター値が [未定義] に設定されているので、量産ターゲットに依存して丸めを実行することができません。したがって、丸めコードを追加してゼロ方向の丸めが行われるようにしなければなりません。

メモ

分母が 2 の定数べき乗である符号付き固定小数点除算では、最も簡潔な丸めモードによって最も効率的なコードが生成されません。この場合は、丸めモードを負方向に設定します。

中間算術演算の丸めの最適化

ゼロ以外の傾きとバイアスをもつ固定小数点算術に対し、最も簡潔な丸めモードでは各中間算術演算に対しても最適な丸めを選択します。たとえば、Product ブロックを使用して演算 y = u1 / u2 が実装されるとします。ここで、u1u2 は固定小数点量です。

A Product block configured to implement the above arithmetic operation.

各固定小数点量は、その傾き、バイアスおよび格納された整数を使用して計算されます。詳細については、デジタル ハードウェアでのデータ型とスケーリングを参照してください。この例では、ブロックによって指定された高位の除算により、中間の加算および乗算が発生します。

y=u1u2=S1Q1+B1S2Q2+B2

最も簡潔な丸めモードは、これらの高位および中間の演算に対して最適な丸めを実行して最も効率的なコードを生成します。このプロセスにより混合モードの丸めが有効になります。加算、減算、および乗算では負方向の丸め、除算ではゼロ方向の丸めが最も一般的なモードとして使用されます。

最も簡潔な丸めモードを使用して最も効率的なコードを生成するには、[符号付き整数の除算の丸め] モデル パラメーターを、量産ターゲットの丸め動作を示すオプションに設定しなければならないことに注意してください。

メモ

分母が 2 の定数べき乗である符号付き固定小数点除算では、最も簡潔な丸めモードによって最も効率的なコードが生成されません。この場合は、丸めモードを負方向に設定します。

参考

トピック