以下に示す一連の機械命令を考えてみましょう。
MUL R5, R0, R1
DIV R6, R2, R3
ADD R7, R5, R6
SUB R8, R7, R4
上記のシーケンスで、R0
toR8
は汎用レジスタです。示されている命令では、最初のレジスタは、2 番目と 3 番目のレジスタで実行された演算の結果を格納します。この一連の命令は、次の 4 つのステージを持つパイプライン化された命令プロセッサで実行されます。
- 命令フェッチおよびデコード (IF)、
- オペランドフェッチ (OF)、
- オペレーション(PO)を実行し、
- 結果 (WB) を書き戻します。
IF
、OF
およびステージはWB
、命令ごとにそれぞれ 1 クロック サイクルかかります。PO
ステージは or 命令に 1 クロック サイクル、命令ADD
にSUB
3 クロック サイクル、MUL
命令に 5 クロック サイクルかかりDIV
ます。パイプライン プロセッサは、PO ステージから OF ステージへのオペランド転送を使用します。上記の一連の命令の実行にかかるクロック サイクル数は、次のとおりです。
POステージからOFステージまでオペランド転送を使用する必要があることが明確に与えられているため、上記の答えは15クロックサイクルである必要があります。
しかし、多くの場所で答えは 13 クロック サイクルとして与えられます。POからPOへのオペランド転送を使用すると、13の答えが得られます。
私の答え:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
IF OF PO PO PO WB
IF OF PO PO PO PO PO WB
IF OF PO WB
IF OF PO WB
多くの場所で与えられた答え:
1 2 3 4 5 6 7 8 9 10 11 12 13
IF OF PO PO PO WB
IF OF PO PO PO PO PO WB
IF OF PO WB
IF OF PO WB
どちらの答えが正しいか誰にもわかりますか?