なぜ増加したパイプラインの深さは、常にスループットの増加を意味するものではありませんか?

StackOverflow https://stackoverflow.com/questions/2597189

  •  25-09-2019
  •  | 
  •  

質問

これはおそらく、より多くの議論の質問のですが、私はstackoverflowのは、それを求める権利場所であると考えていました。私は、命令パイプラインの概念を勉強しています。私は、パイプライン段数いったん増加し、スループットパイプラインの命令が増加していることを教えられてきたが、いくつかのケースでは、スループットが変更されない場合があります。どのような条件の下では、これが起こるのでしょうか?私は失速し、質問への答えかもしれない分岐を考えていますが、私は重要な何かが欠けていた場合、私は疑問に思う。

役に立ちましたか?

解決

その結果を待っている、またはキャッシュミスにするとき他の命令によってストールすることができます全体の

。パイプライン自体は操作が完全に独立していることを保証するものではありません。 ここでのx86のIntel / AMDアーキテクチャの複雑さについての素晴らしいプレゼンテーションがある: http://www.infoq.com/presentations/click-crash-course-modern-hardwareする

これは、非常に詳細にこのようなものを説明し、さらにいくつかのスループット改善する方法についてのソリューションと非表示の待ち時間をカバーしています。 JustJeffは-のオーダーうちいずれかの実行を述べ、あなたはプログラマモデル(x86版より8つのレジスタ)によって公開されていないシャドウレジスタを持って、あなたはまた、分岐予測を持っています。

他のヒント

合意しました。最大の問題は、屋台(前の命令からの結果を待っている)、そして間違った分岐予測されています。あなたのパイプラインが深い20回の段階で、あなたは条件や操作の結果を待って失速した場合、あなたはあなたのパイプラインは唯一の5段階だった場合よりも長く待つつもりです。あなたは間違ったブランチを予測する場合は、5とは反対に、パイプラインのうち20点の指示をフラッシュする必要があります。

私は、おそらくあなたは複数のステージがうまくいけば、あなたは、各ステージをサポートするのに十分な追加の単位で投げるものの、パフォーマンスヒットを引き起こす同じハードウェア(ALUなど)、アクセスしようとしている深いパイプラインを持つことができると思います。

命令レベル並列性は収穫逓減しています。具体的には、命令間のデータ依存性は、可能な並列性を決定する。

(教科書にRAWとして知られている)の書き込み後読み取りの場合を考えてみましょう。

最初のオペランドが結果を取得する構文では、この例を考えてみます。

10: add r1, r2, r3
20: add r1, r1, r1

ライン10の結果は、ライン10の計算が始まるまでに知られていなければなりません。データのみが知られてますポイントへのデータ転送が緩和する、この問題を、しかし...。

私はまた、シリーズの中で最も長い命令を実行するのにかかる時間の量を超えてパイプラインを増やすと、パフォーマンスの増加を引き起こすないと思うだろう。私は失速し、分岐する基本的な問題はかかわらあると思います。

確かに屋台/スループットの大幅な損失の原因に長いパイプライン中の気泡。そしてもちろん、パイプラインの長い複数のクロックサイクルが浪費されます。

私は長いパイプラインは、パフォーマンスの低下を引き起こす可能性がある他のシナリオを考えるのに長い時間のためにしようとしたが、それはすべての屋台に戻ってきます。 (そして、実行ユニットと発行スキームの数が、それらは、パイプラインの長さとはあまりありません。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top