コンピューター アーキテクチャのコースを受講しています。これまでのところ、私を助けているノートとビデオがある別の大学からこのウェブサイトを見つけました: CS6810, Univ of Utah . これらの一連のメモに取り組んでいますが、いくつかの例の問題について説明が必要です。私は現在、17-18 ページの問題 7 を見ています。解決策は 18 ページの注記に示されていますが、教授がどのように結論に達したのか、私にはやや確信が持てません。彼は自分のクラスのウェブページで、何の解決策も提供していないと述べているので、それは問題外です。
PDFが閲覧できない方は、以下の点が問題です。
レジスタ読み取り (RR) とレジスタ書き込み (RW) が 1 サイクルかかる 8 ステージのパイプラインを考えてみましょう。キー: 命令フェッチ = IF、デコード = DE、ALU = AL、データ メモリ = DM、ラッチ # = L#
L1-->IF-->L2-->DE-->L3-->RR-->L4-->AL-->L5-->AL-->L6-->DM-->L7- ->DM-->L8-->RR-->L9
次の一連の命令について、バイパスの有無にかかわらず、2 番目の命令のストール数を決定します。
- ADD R1 + R2 -> R3、ADD R3 + R4 -> R5 : 5 をバイパスせず、1 をバイパスして
- LD[R1] -> R2、ADD R2 + R3 -> R4 : 5 をバイパスせず、3 をバイパスして
- LD[R1] -> R2、SD[R2] -> R3 : バイパスなし 5、バイパスあり 3
- LD[R1] -> R2、SD[R3] -> R2 : バイパスなし 5、バイパスあり 1
それぞれがバイパスなしで 5 つのストールを生成する方法と、最初の 1 つがバイパスで 1 つのストールのみを生成する方法は理解していますが、バイパスを使用したストールが 2-4 でどのように生成されるかはわかりません。
どんな助けでも大歓迎です。
編集(さらに明確にするために、ケースがどのように見えるかについての私の理解):ST =ストール、ラッチが暗示されています
1.
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->ST-->AL-->AL-->DM-->DM-->RW (with)
バイパスしないと、I2 は RR に入る前にストールし、RR に入る前に R3 が書き込まれるまで待機する必要があります。この理解は、すべてのケースで普遍的です。バイパスを使用すると、I2 は RR に入ることができますが、2 番目の ALU ステージの後、I1 によって演算が行われるまでストールします。
2.
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->ST-->ST-->ST-->AL-->AL-->DM-->DM-->RW (with)
バイパスを使用すると、I2 は RR に入ることができますが、R2 が処理されるまで待機する必要があり、これは I1 の 2 番目の DM ステージの後に発生します。
3.
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->ST-->ST-->ST-->AL-->AL-->DM-->DM-->RW (with)
バイパスを使用すると、I2 は RR に入ることができますが、R2 が処理されるまで待機する必要があり、これは I1 の 2 番目の DM ステージの後に発生します。
4.
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->AL-->AL-->ST-->DM-->DM-->RW (with)
バイパスを使用すると、I2 は 2 番目の ALU ステージまでパイプラインに沿って続行でき、2 番目の DM ステージが終わるまで I1 によって処理されない R2 をプルできるようになるまでここで待機する必要があります。
もう1つ、すべてを理解していることを確認するために:
I1: R1+R2→R3、I2: SD[R4]<--R3
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW
IF-->DE-->ST-->ST-->ST-->ST-->ST-->RR-->AL-->AL-->DM-->DM-->RW (without)
IF-->DE-->RR-->AL-->AL-->DM-->DM-->RW (with)
バイパスしないと、同じ場所で同じ数の失速 (5) で失速することが私の理解です。ただし、バイパスを使用すると、I2 が ALU ステージを使用してレジスタ アドレスを計算し、ストアを作成するときに I1 の 2 番目の ALU ステージから情報を取得できるため、ストールは 0 になります。