Altifigence Academy

18 / 24 · 概念

依存関係、リソースハザード、フォワーディング

演算が先行する結果を必要とする場合のストールとフォワーディングを比較します。

重ね合わせには順序の保持以上が必要

独立したストリーム演算は先行結果を読まないため、安全に重ねられます。一方、レジスタファイル演算器は直前の演算結果を必要とすることがあります。古い書き込みが利用可能になる前にレジスタを読むと、書き込み後読み出しのデータハザードが生じます。算術は正しくてもオペランドの取得が早すぎる場合があります。

R1=4から始めます。I0はR1←R1+3、I1はR2←R1×2とします。この例でI0はエッジ0でオペランド4を取り込み、次のサイクル中に7を計算し、エッジ1でR1を書きます。I1がエッジ1でR1をサンプリングすると古い4を読み、R2=8になる可能性があります。逐次実行ではR2=14が必要です。同じエッジのレジスタファイル読み書きを明示してください。

対処I1が読むオペランド要件
古いR1を読む4ここでは誤り
エッジ2までストール7演算と付随フィールドを保持
実行結果を転送エッジ1直前の7結果が利用可能で経路がタイミングを満たす

フォワーディングは計算結果がアーキテクチャ上の記憶領域に届く前に選択します。宛先番号の一致だけでは不十分です。生成側が有効で、実際にそのレジスタへ書き、結果が準備済みである必要があります。複数の生成側が一致するなら、先行するもののうち最も新しい演算を選びます。バブルやフラッシュされた演算を転送してはいけません。

応答が未到着のロードは、まだ存在しないデータの転送では解決できません。命令コード、入力識別子、タグを保持して消費側をストールさせます。他の独立した段を進めてよいか決めてください。

2段が同時に1つのメモリポートを必要とすると、構造ハザードになります。データ依存がなくても調停や追加リソースが必要です。分岐は誤った経路の処理の取り消しが必要な制御ハザードを生みます。各演算が何を待つか、どの状態を保持するかを分析します。総合課題は独立ストリームのままであり、成功してもCPUの依存処理の証拠にはなりません。

自分で考えてみましょう

R1=4でI0が3を加え、I1が結果を2倍します。古い記憶値を読む場合と正しいフォワーディングでI1の結果を比較してください。I0がデータ未到着のロードならどうしますか。

解説を見る

古い4を読むと8、7を転送すると14です。未到着のロード結果では、演算とタグを保持して消費側をストールさせます。宛先一致だけでは未完成データを転送できません。

選択はこのブラウザに適用されます。フッターからいつでも変更できます。