2012-01-02 16 views
2

私はパイプラインの危険の基本的な概念を理解しようとしています。私はパイプラインがどのように実装されているのか知っていますが、パイプラインの効率にハザードがどのように影響するのかよくわかりません。パイプラインの一般的なパイプラインの危険性は何ですか?

私はそれをオンラインで読んだことがありますが、説明する際に使用される言語の複雑さのために、実際に理解できませんでした。誰も簡単な言葉でそれらを説明することはできますか?

例:分岐動作の影響? (ハザードがどのように働くかを示す図で簡単な説明を見つけることができませんでした)

+0

なぜ気になりますか? ARMのasmコードを最適化しようとしていますか?または、おそらくコンパイラのバックエンドを書いていますか?あなたのモチベーションを説明した場合は、より具体的な回答を得るのに役立ちます。 –

+0

パイプラインの基本的な概念を理解しようとしています。 - 私はそれをもっと明確にするために私の質問を編集しました。 – NLed

+4

ハザードに関する[ウィキペディアの記事](http://en.wikipedia.org/wiki/Hazard_(computer_architecture))はかなり良いです。 –

答えて

2

私はそこに多分あると思います。パイプライニングが何であるか、あるいはどのようにして物事をより速く/より良くするかを考えてください。これは製造工場の組立ラインのようなものです。車全体が建てられた場所を1つしか持たず、道具や材料を車に移動して、他の道具を動かさなくてはならずに、車を車に動かす必要があります。ちょっとしたことが1歩ずつ進んでいく。

分岐問題は簡単です。パイプに12の命令があり、パイプの端または端の近くまでいくつかの分岐が決まっていないとします。分岐が取られたら、あなたが実行できないパイプに一連の命令があります。それらを破棄しなければなりません。分岐先のパイプを再起動すると、パイプラインを完全な状態に戻すためにいくつかの命令サイクルを待たなければなりません。

そして、問題を解決するための多くのアプローチがありました。ブランチシャドウ、ブランチの後に実行される命令、ブランチシャドウがあります。他のものは分岐予測であり、分岐先が何であるかを推測し、遅延スロットのようなそれらの代替パスから命令を独立してフェッチすると、おそらくパイプラインがある世代から次の世代に長くなる命令セットが一致するように変更することなく)、基本的にパイプをフラッシュする必要があります。

私の最大の問題はCPUではなく、CPUがボトルネックになったときに問題を解決するためにパイプラインが発明されたことです。たとえば、分岐予測はランダムなフェッチサイクルを引き起こすため、I/Oの問題は悪くなりません。

Simonが提供したウィキペディアのリンクでも、読み書き前のような他の危険について話しています。ソースコードが場所を記述すると言うと、コードを書き込んだ後でコードを実行する必要があります。ハードウェアなどのコンパイラやアーキテクチャが、それが書かれた方法で起こらないようにするならば、ソフトウェアはクラッシュしたり失敗したりする可能性があります。読取りと書込みが異なる実行単位に分割され、読取り実行単位の書込みが少ない場合や、書込みが実行される前に読取りを実行する場合は、並列実行の問題が生じる可能性があります。これは、CPUコアの外側ではあるがメモリやキャッシュシステム内でも同様に簡単に発生する可能性があります。読み出しと書き込みは、メモリ・コントローラ内の別々の経路上に存在することができ、それによってキャッシュ・ラインが読み出され、他方が書き込みバッファ内のラインの終わりに到着し、読み出しが最初に行われる。書き込みは通常火災であり、忘れている、ここにアドレスがあり、ここにデータがあり、メッセンジャーがメッセージを受け取り、あなたが完了している。フェデックスで荷物を落とすのと同じように、ここに住所のある箱があります。私の部分は終わっていますが、箱は実際には何日も届けられません。あなたが結果を返すのを待たなければならないことは、CPUやメモリコントローラ内の実行ユニットにとってはかなり長くなる可能性があります。これはすべてシステムレベルで管理する必要があります。書き込み前の問題を並列CPUで解決すると、期待したとおりに動作しないようにメモリシステムを結び付けることができます。あなたが戦いに勝ったと思っていることをお読みください。このため、遅延スロットのようなソリューションは、多くの場合、最終的にノップで満たされることになります。 (システムエンジニアリングには、プログラミング言語と人間がコードを記述するためには、人間とそのやり方を含める必要があります)。ESP Wikipediaのリンク

http://en.wikipedia.org/wiki/Hazard_(computer_architecture)

によって記載されているように

これらの危険性は、スループットを向上させるために使用されるパイプラインは、出力に適切な製品を提供するために失敗した例です。

あなたのパイプラインが自動車であると言うと、組み立てラインに沿った各ステップは車に1つのものを置く、例えばフロントガラスや車輪、またはシャーシに取り付けられたエンジンなどです。そして、この組立ラインで。ある国では青い塗料の世界への供給に影響を与える自然災害があり、自動車を生産する組立ラインに供給するドアを作る組立ラインは青いドアを使い果たしています。あなたはラインの青い車で何をしていますか?リード・サイクルでデータ・アボートを取得するのとは異なり、パイプを停止し、アボート・ハンドラをコールし、影響を受ける命令またはそれに続く命令から実行を開始する必要があります。

実際にパイプライン設計が機能しなくなることが考えられますが、それはパイプラインの危険です。はい、私は、システムレベルの障害を引き起こすメモリシステムの何かがパイプラインの障害ではなく、パイプラインの危険ではないことに同意します。誤った場所や命令に命令を置くコンパイラのバグと同じことは、パイプラインの障害でもありません。システム障害、パイプライン障害ではありません。

+1

のリンクは問題ありません。 "common"という言葉が分岐するのは、おそらくパイプラインを持つCPUの唯一の共通点です。次に、設計上の問題、複数の実行単位、または並列実行を取得します。呼び出したいものがあれば、順序の狂った実行や、単一のCPU(通常のケース)上の単一のパイプライン上に表示されないその他のものにつながります。新しいハザードを引き起こすソリューションは、その設計に固有であり、すべての設計に共通ではないこともあります。 –

+0

私がここで受け取った最高の答えの一つ。この非常に有益な答えに感謝します!!!!! – NLed

+0

私はそれをはるかに上手く書けたかもしれませんが、いずれの方法でも賛辞をいただきありがとうございます。 –

関連する問題