このページの本文へ

ロードマップでわかる!当世プロセッサー事情 第68回

CPU高速化の常套手段 パイプライン処理の基本 【その2】

2010年09月13日 12時00分更新

文● 大原雄介(http://www.yusuke-ohara.com/)

  • この記事をはてなブックマークに追加
  • 本文印刷

分岐命令で発生するパイプライン処理のやりなおし
パイプラインハザード

 問題のもうひとつはパイプラインハザード(Pipeline Hazard)である。Hazardには「危険、偶然、運、障害」などの意味があるが、ここでの意味は「事故」が一番適切だろう。ではどんな事故か? というのは、図3のようなケースがわかりやすい。いわゆる「分岐命令」が登場するシーンで、ある値によって処理を分ける、なんてケースに必ず利用されるものだ。

図3

図3 処理の途中で分岐命令が出た場合のフローチャート

 図3の例では、命令5~7ではなく命令8~10を処理する方向に分岐すると仮定しよう。この場合のパイプラインの動作は図4のようになる。

図4

図4 処理中に命令4で条件分岐が発生した場合

 パイプラインは命令1から順にどんどんFetchを行ないながら、順次処理してゆく。命令1~3については問題ない。ところが分岐処理をする命令4については、その分岐方向が確定するのはExecuteが終り、Writebackのステージに入ってからになる。サイクルで言えば12サイクル目でようやく、「命令4の後で命令8がこなければいけない」ことが確定するわけだ。

 ところが、パイプラインはすでに命令5~7を順次処理している。そのため、13サイクル目にパイプラインフラッシュが発生する。つまりパイプラインを一度まっさらに戻すわけだ。その後、14サイクルから改めて、命令8以降のDecodeを開始する形になる。こうしてパイプライン処理のやり直しが発生するのが、パイプラインハザードである。

 このパイプラインハザードもまた、一度起きると大幅に処理性能が落ちることになる。もしパイプラインハザードが一切起きずに処理できれば、命令1~命令13まで合計10命令だから(命令5~7は処理しないので)、理論上は19サイクルあれば処理が完了するはずだ。だが実際には28サイクルを要しているわけで、メモリーアクセスに起因するパイプラインストールほどの悪影響ではないものの、動作周波数が3割減ったのと同じ程度に性能が低下するわけだ。

 特にこのパイプラインストールの場合、パイプラインが長くなるほど性能への悪影響が大きくなるという特徴があり、性能を引き上げるためにパイプライン段数を増やすと、むしろ性能が落ちかねない状況になっている。

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン