GeeksforGeeks
CPUのパフォーマンスを向上させるために、我々は二つのオプシ
2)複数の操作を同時に行うことができるようにハードウェアを配置します。
ハードウェアの速度に制限があり、より高速な回路のコストが非常に高いため、2番目のオプションを採用する必要があります。
パイプライン処理 : パイプライン処理は、その全体的なパフォーマンスが向上するように、CPUのハードウェア要素の配置のプロセスです。 複数の命令の同時実行は、パイプライン化されたプロセッサで行われます。
パイプライン化された操作の概念に基づいて動作する実際の例を見てみましょう。 水差しの包装の植物を考慮しなさい。 ボトルを通過させ、ボトル(I)を挿入し、ボトル(F)に水を充填し、ボトル(S)を密封する3つの段階があるとします。 これらのステージをそれぞれステージ1、ステージ2、ステージ3と考えてみましょう。 各ステージは、その操作を完了するために1分かかりましょう。
今、パイプライン化されていない操作では、ボトルが最初に植物に挿入され、1分後に水が満たされているステージ2に移動されます。 今、ステージ1では何も起こっていません。 同様に、ボトルがステージ3に移動すると、ステージ1とステージ2の両方がアイドル状態になります。 しかしパイプライン処理された操作で、びんが段階2にあるとき、別のびんは段階1で荷を積むことができます。 同様に、ボトルがステージ3にある場合、ステージ1およびステージ2にそれぞれ1つのボトルが存在する可能性があります。 だから、毎分後、私たちはステージ3の終わりに新しいボトルを手に入れます。 したがって、1ボトルを製造するのにかかる平均時間は次のとおりです。
パイプラインなし=9/3分=3m
I F S | | | | | || | | I F S | | || | | | | | I F S (9 minutes)
パイプラインなし=5/3分=1.67m
I F S | || I F S || | I F S (5 minutes)
したがって、パイプライン化された操作は、システムの効率を向上させます。
基本的なパイプラインの設計
- パイプライン処理されたプロセッサでは、パイプラインは入力端と出力端の2つの端を持っています。 これらの端の間には、ある段の出力が次の段の入力に接続され、各段が特定の動作を行うような複数の段/セグメントがある。
- インターフェイスレジスタは、二段間の中間出力を保持するために使用されます。 これらのインタフェースレジスタはラッチまたはバッファとも呼ばれます。
- パイプライン内のすべてのステージとインターフェイスレジスタは、共通のクロックによって制御されます。
パイプライン化されたプロセッサでの実行
パイプライン化されたプロセッサ内の命令の実行シーケンスは、時空図を使用して視覚化するこ たとえば、4つのステージを持つプロセッサを考え、実行する2つの命令があるとします。 次の時空図を使用して実行シーケンスを視覚化することができます:
重複しない実行:
Stage / Cycle | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
S1 | I1 | I2 | ||||||
S2 | I1 | I2 | ||||||
S3 | I1 | I2 | ||||||
S4 | I1 | I2 |
Total time = 8 Cycle
Overlapped execution:
Stage / Cycle | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
S1 | I1 | I2 | |||
S2 | I1 | I2 | |||
S3 | I1 | I2 | |||
S4 | I1 | I2 |
Total time = 5 サイクル
パイプラインステージ
RISCプロセッサは、RISC命令セット内のすべての命令を実行する5段階の命令パイプラインを持っています。 RISCパイプラインの5つのステージには、それぞれの操作があります。
- ステージ1(命令フェッチ)
このステージでは、CPUはプログラムカウンタに値が存在するメモリ内のアドレスから命令を読み取ります。 - Stage2(Instruction Decode)
このステージでは、命令がデコードされ、レジスタファイルにアクセスされ、命令で使用されるレジスタから値が取得されます。 - ステージ3(命令実行)
このステージでは、ALU操作が実行されます。 - ステージ4(メモリアクセス)
このステージでは、メモリオペランドは、命令に存在するメモリとの間で読み書きされます。 - ステージ5(ライトバック)
このステージでは、計算/フェッチされた値が命令に存在するレジスタに書き戻されます。
パイプライン化されたプロセッサの性能
クロックサイクル時間を’Tp’とする’k’セグメントパイプラインを考えてみましょう。 パイプライン化されたプロセッサで完了する’n’タスクがあるとします。 さて、最初の命令はパイプラインから出てくるために’k’サイクルを取るつもりですが、他の’n–1’命令はそれぞれ’1’サイクル、すなわち合計’n–1’サイク したがって、パイプライン化されたプロセッサで’n’命令を実行するのにかかる時間:
ETpipeline = k + n – 1 cycles = (k + n – 1) Tp
同じ場合、非パイプライン化されたプロセプロセッサは:
S = Performance of pipelined processor / Performance of Non-pipelined processor
プロセッサのパフォーマンスは実行時間に反比例するため、
S = ETnon-pipeline / ETpipeline => S = / S = /
タスク’n’の数がkよりも大幅に大きい場合、つまりn>>>k
S = n * k / n S = k
ここで、’k’はパイプライン内のステージの数です。
また、効率=与えられたスピードアップ/最大スピードアップ=S/Smax
私たちは、Smax=k
だから、効率=S/k
スループット=命令の数/命令を完了するための合計時間
だから、スループット=n/(k+n–1)*Tp
注:理想的なパイプライン化されたプロセッサの命令(CPI)値あたりのサイクルは1である
セット2を参照してください依存関係とデータの危険性については、パイプラインと失速のタイプについては3を設定します。