このページの本文へ

前へ 1 2 3 4 次へ

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

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

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

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

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

パイプラインハザード対策には、分岐予測やパーシャルフラッシュ

 これを補うための方策として広く利用されているのが、分岐予測機構である。パイプラインハザードは要するに、「間違った方向の命令をデコードするから発生する」とも言えるわけで、正しく命令をデコードすればこうした事態は防げる。そこで、デコードの際に分岐命令を発見したら、「次にどちらの方向に分岐するか」をきちんと判断して次の命令を決める仕組みが、今のCPUには搭載されている。

 また「パーシャルフラッシュ」と呼ばれる仕組みを搭載しているものもある。図4では分岐ミスが発生した場合、パイプライン全体をフラッシュしていた。しかし図4の場合、間違っているのは命令5~7までの処理で、命令8以降はそのまま継続しても問題ない。そこで、命令5~7を処理しているステージのみフラッシュすることで、パイプラインハザード時のペナルティを軽減しようというものだ。

図5

図5 図4にパーシャルフラッシュを導入した場合

 実際図5の場合、ペナルティは3サイクル分で済んでいる。もっともこの機構は単純なパイプラインでは実装しやすいが、さまざまなテクニックを駆使している昨今のパイプラインでは、機構的に複雑になりすぎてしまうため実装されないこともある。

 ほかにも、分岐ミスが発生することを前提に、発生した場合のペナルティを軽減する仕組みがある。Decodeで分岐を確認した場合、その分岐先を2つとも内部のテーブルに格納しておくというものだ。これにより分岐ミスが発生した場合も、ただちに次のデコードを開始できる。

 もっと積極的な方法としては、「投機実行」という仕組みを実装しているCPUもある。例えばインテルのItaniumだ。図3では、命令4のどちらか片方だけを実行するから、外れた場合にペナルティが大きい。それならば、命令4の後に命令5/6/7と命令8/9/10の両方を同時に処理をしておき、命令4の結果が確定した時点で、間違った分岐の結果を捨てるという、Partial Flushをもっと積極的に行なうような仕組みだ。ただこれはCPUが複雑になりすぎることもあって、採用例はほとんどない。

 パイプラインの問題とそれをカバーする技術をざっとおさらいしたところで、次回は別の高速化技法である「スーパースカラー」について紹介したい。

前へ 1 2 3 4 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

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

ピックアップ

ASCII.jp RSS2.0 配信中

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