12

あなたを悩ませているなら、どんな質問もばかげているとは思いません。パイプライニングについて質問がありますか?

パイプライニングとは?

理論によると、「パイプラインを使用すると、CPU は最初の命令が完了する前に 2 番目の命令の実行を開始します。パイプラインを使用すると、マシン サイクルを完了するために 1 つの命令を待つ必要がないため、処理が高速になります。」

私の質問は、一度に 1 つの命令しか実行できないユニプロセッサ システムで作業していると考えているのですが、CPU がビジーなときに次の命令をフェッチする同時操作がどのように実行される可能性がありますか? 概念的な明確さが欠けている場合は、私に光を当ててください。同時処理を可能にする別のハードウェアがある場合、それは何ですか? 親切に説明してください。

4

5 に答える 5

11

パイプライン化は、ユニプロセッサシステムとマルチプロセッサシステムとは何の関係もありません。それは、ハードウェアで、マシン上で単一の命令を実行する際に取られるステップについて真剣に考えることと関係があります。

MIPSの「add-immediate」命令を実装するとします。この命令は、によって指定されたレジスタに格納された整数を、命令に直接エンコードされaddi $d, $s, $tた整数に追加し、その結果をによって指定されたレジスタに格納します。そのために必要な手順を考えてください。これを分解する1つの方法があります(たとえば、これは必ずしも実際のハードウェアに対応しているわけではありません)。$s$t$t

  1. (バイナリエンコードされた)命令を解析して、それがどの命令であるかを調べます。
  2. それが命令であることを認識したらaddi、ソースレジスタとデスティネーションレジスタ、および追加するリテラル整数を解析します。
  3. 適切なレジスタを読み取り、その値と整数の合計を計算します。
  4. 名前付き結果レジスタに結果を書き込みます。

ここで、これらすべてをハードウェアに組み込む必要があることを思い出してください。つまり、これらのそれぞれに関連する物理回路があります。また、一度に1つの命令を実行すると、これらの回路の4分の3がアイドル状態になり、常に何も実行されなくなります。パイプライン処理は、この観察結果を利用します。プロセッサが2つのaddi命令を連続して実行する必要がある場合、次のことができます。

  1. 最初のものを特定する
  2. 最初のものを解析し、そうでなければアイドル状態になる回路で2番目のものを識別します
  3. 最初のものを追加し、2番目のものを解析します
  4. 最初のものを書き、2番目のものを追加します
  5. 2番目のものを書き出す

したがって、各命令は4回の処理ラウンドを必要としますが、プロセッサは合計5回のラウンドで2つの命令を完了しました。

これは、次の命令で何をすべきか(または次の命令が何であるか)を知る前に、ある命令が終了するのを待たなければならないことがあるという事実のために複雑になりますが、それが基本的な考え方です。

于 2012-03-04T02:12:56.870 に答える
9

実際、フェッチ用の別のハードウェアがあります。パイプラインに配置された、個別のハードウェアのビットがたくさんあります。各部分は、別々の命令の一部を同時に実行しています。各クロック エッジで、1 つのステージの結果が次のステージに渡されます。

于 2012-03-04T01:43:46.260 に答える
5

大学の 1 年間のコースをこのテキスト ボックスに詰め込もうとするのではなく、この主題全体を明確に詳細に説明している教科書を紹介します。

ヘネシー、ジョンL.; および Patterson、David A. Computer Architecture、第 5 版: A Quantitative Approach。モーガン・カウフマン。

于 2012-03-04T02:04:31.403 に答える
3

どのように作られたか、または工場が稼働している他のテレビ番組について考えてみてください。自動車工場について読んだり見たりしたことについて考えてみてください。「車」は、フレームまたはボディとして工場を移動し、移動するにつれて物が追加されます。建物の外に座っていれば、タイヤやペンキの缶、ワイヤーやスチールのロールが建物の中に入り込み、絶え間なく車が出ていくのが見えます。単一の (ユニプロセッサー) 工場であるからといって、組立ライン (パイプライン) を持てないわけではありません。パイプラインを備えたユニプロセッサは、実際には、工場で一度に 1 台の車を製造するよりも、一度に 1 つの命令を実行する必要はありません。その車の建設の少しは、それが通過する各駅で起こります.

パイプの典型的な単純なステージは、フェッチ、デコード、および実行の 3 つのステージです。1 つの命令を実行するのに 3 クロックかかります。最小 (I/O が遅いため、通常はそれ以上) は、パイプ内の 3 ステージとします。命令 a は実行フェーズにありますが、命令 b がデコードされ、命令 c がフェッチされています。自動車工場に話を戻すと、彼らは「7 分ごとに 1 台の車」を生産するかもしれませんが、それは車を作るのに 7 分かかるという意味ではありません。車を作るのに 1 週​​間かかるかもしれませんが、彼らは 7 分ごとに新しい車を作り始めます。各駅での所要時間は、7 分ごとに 1 つずつドアの外に出られるようになっています。ここでも同じですが、パイプラインを使用しても、3 つのステップすべてをプロセッサのクロック レートでフェッチ、デコード、および実行できるわけではありません。工場のように、それはより平均的なものです。プロセッサのクロック レートでパイプラインの各ステージにフィードできる場合、クロックごとに 1 つの命令が完了します (そのように設計されている場合)。最近では、データ/命令を高速でフィードすることができず、パイプラインの停止などがあるため、最初からやり直すか、進行状況の一部を破棄して一部をバックアップする必要があります。

パイプライン化とは、プロセッサで命令を実行するためにアセンブリ ライン アプローチを採用しているだけです。

于 2012-03-05T00:34:55.510 に答える
0

コードに分岐がある場合に使用されると思いました。ロジックは、どの分岐が行われるかを予測し、その分岐の命令をキャッシュにプリロードします。予測が間違っていることが判明した場合は、それらの命令を破棄して代替をロードする必要があり、結果として損失が発生します。しかし、特にパターンを何度も繰り返す最新のコンパイラでは、予測をより頻繁に真にするコードのパターンがあると私は信じています。

実際の実装については詳しくわかりませんが、追加のハードウェアが必ずしも必要だとは思いませんが、最適な速度には役立ちます。

于 2012-03-04T01:47:46.610 に答える