ストール
読み:ストール
外語:stall
パイプライン
処理の動作が停止すること。
目次
概要
具体例
データ依存性ハザード
発生例
データ依存性ハザードの種類
構造依存性ハザード
概要
例えば計算結果が
レジスター
や
メモリー
に書き込まれないうちに、そのレジスターやメモリーを読み出そうとした場合、後の命令は前の命令が終了するまで待機せざるを得ない。
こうして自動的に待機させられることをストールといい、ストールの原因になったことをハザードという。
ハザードにはデータ依存性ハザードと構造依存性ハザードがある。
具体例
データ依存性ハザード
発生例
例えば、次のようなプログラムがあったとする。
add eax, ebx
mul eax, ecx
この場合、(2)の掛け算は(1)の演算結果を利用するので、(1)の演算が終了するまで(2)は実行できない。
このような状況を、データ依存性ハザード(data dependent hazard)またはレジスター依存性ハザードという。
データ依存性ハザードの種類
データ依存性ハザードには次の3種類がある。
リードアフターライト(RAW)
書き込んだ後に読まねばならないが、この実行順序が逆になると古い値を読んでしまう危険。
ライトアフターライト(WAW)
書き込みをした後、さらに書き込みをせねばならないが、この実行順序が崩れると後続処理で古い値を使ってしまうという危険。
ライトアフターリード(WAR)
レジスターを読んだ後にレジスターに書かねばならないのに、書き込みが早すぎると誤った値を読んでしまう危険。
このうち、WAWとWARは、
投機実行
に対応するプロセッサーには必ずある
レジスターリネーミング機能
により現在は技術で解決されている。
もしハザードが起きそうな時には、CPUはレジスターの対応付けを適時変更することによって、前後の依存性を断ち切る。
なお、RAWについては、現在もハザードを回避する方法は存在しない。
構造依存性ハザード
構造依存性ハザードというのは、異なる命令が同一の
ハードウェア
資源を使おうとする危険をいう。このようなことを競合(
conflict
)や衝突(
collision
)という。
これを回避するためにスケジューリングなどの機能が存在する。
再検索