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

丸めモード: 最も簡潔

最も簡潔な丸めモードでは、以下の節で説明するさまざまな手法を組み合わせることで、生成されたコードに余分な丸めコードを含める必要性を削減または除去しようとします。

ほとんどすべての場合には、最も簡潔な丸めモードによって最も効率的なコードが生成されます。3 つの特定の基準を満たす非常に特殊な除算では、負方向の丸めの方が効率が高くなる場合があります。これらの 3 つの基準は次のとおりです。

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

  • 分母が不変定数

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

この場合は、丸めモードを負方向に設定し、[モデル コンフィギュレーション パラメーター]、[ハードウェア実行]、[製品ハードウェア]、[符号付き整数の除算の丸め] パラメーターが量産ターゲットの丸め動作を記述するように設定します。

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

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

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

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

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

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

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

最も簡潔な丸めモード:

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

  • [モデル コンフィギュレーション パラメーター]、[ハードウェア実行]、[製品ハードウェア]、[符号付き整数の除算の丸め] パラメーターの設定に応じて、ゼロ方向または負方向に除算を丸めます。

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

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

    メモ

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

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

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

デジタル ハードウェアでのデータ型とスケーリングで説明されているように、各固定小数点量は、その勾配、バイアスおよび格納された整数を使用して計算されます。そのためこの例では、ブロックの動作によって高位の除算が必要となるだけでなく、中間の加算と乗算も実行されます。

y=u1u2=S1Q1+B1S2Q2+B2

最も簡潔な丸めモードは、これらの高位および中間の演算に対して最適な丸めを実行して最も効率的なコードを生成します。中間算術演算に適した丸めの選択に使用されるルールは、高水準算術演算用の丸めの最適化で説明されているルールと同じです。ここでも、混合モードの丸めが行われます。一般的には、加算、減算、および乗算に対して負の無限大方向の丸めが適用され、除算に対してはゼロ方向の丸めが適用されます。

最も簡潔な丸めモードを使用して最も効率的なコードを生成するには、[モデル コンフィギュレーション パラメーター]、[ハードウェア実行]、[製品ハードウェア]、[符号付き整数の除算の丸め] パラメーターが、量産ターゲットの丸め動作を記述するように設定しなければならないことに注意してください。

メモ

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