このページの本文へ

前へ 1 2 3 次へ

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

CPU黒歴史 大損失と貴重な教訓を生んだPentiumのバグ

2013年01月15日 12時00分更新

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

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

 2bit分の演算をもう一歩進めたのがSRT法である。前ページでの①~③の関係を、図にまとめたのが図3になる。除数と非除数、各々の商の関係をまとめたもので、「正規化」というのは、「0~1の間になるように調整」という意味である。

図3 一度に2bitの演算をグラフ化したもの

 この図3に、さらに「引き戻し法」と呼ばれる方法を加えたものが図4になる。引き戻し法とは、除算の結果として「余りが負になる」ことを許すというものだ。負になった場合、あとで余りを正に引き戻す処理が入ることから、「引き戻し法」と呼ばれる。この場合、1桁ならあまりは-1、0、1の3種類となる。それが2桁なので、あまりは-2から2までの5種類となる。

図4 図3の計算に引き戻し法を加えた場合のグラフ

 図4の例では、商が重なりあう場所がいくつかあるが、これは「商がどちらの場合もあり得る」という意味だ。最終的な商はどちらかに確定するが、その判断は後の引き戻しの処理で決まる。

 図4の右上を拡大したのが図5である。この例では、除数を16等分(1マスあたり32分の1)、余りを12等分(1マスあたり2分の1)としたが、数ヵ所の例外を除けば、除数と余りから「商を得られるテーブル」が構築できることがわかる。数ヵ所の例外は、余りをもう一段細かくする(1マスあたり1/4)ことで、これを回避できる。

図5 図4の右上部分のグラフを拡大。マス目を埋めるように商が並んだテーブルができる

 結果として、「ある2bitの除算の商が、テーブルを参照するだけで求められる」ことになり、大幅な高速化が可能になる……というのが、このSRT法の要点である。ある2bitの商を算出すると、次の2bit分の余りが算出できるので、これを繰り返すことで除算が可能になるわけだ。

なぜFDIVバグは発生したのか

 Pentiumに話を戻そう。Pentium FDIVバグが発生した理由は、このテーブルの値が5ヵ所間違っていたことによるものだった。その結果、このテーブルの当該ヵ所を参照する割り算は、必ず値がおかしくなる。残念ながら、これはファームウェアで修正できるレベルではなかったし、当時はまだ「CPUのバグをファームウェアで修正をする」という概念がなかったから、CPUの交換が必要になったのは致し方ないところだろう。

お詫びと訂正:掲載当初、テーブルの値が1ヵ所間違っていたと記載していましたが、正しくは5ヵ所でした。ここに訂正するとともに、お詫びいたします。(2013年1月18日)

 この話をなぜCPU黒歴史第1シーズンで触れなかったかというと、確かに大問題は大問題であったのだが、結果から言えばそれほどインテルに悪影響を与えなかったからだ。むしろ、インテルのサポート対応を良くするうえで、効果的だったとも言える。

 確かに、FDIVバグを持ったPentiumの交換には非常に金がかかった。しかしこのトラブルがあったにも関わらず、Pentiumの売れ行きはすぐ元に戻り、Socket 5からSocket 7の時代にかけて、広く利用される製品となった。当時、浮動小数点演算を積極的に扱うユーザーは、それほど多くなかった。科学技術計算系はともかく、一般消費者は「まだ整数演算だけできればOK」という時代だったから、とも言える。また、最終的なインテルの対応に好感を持った消費者が、少なくなかったこともこれを後押しした。

 またインテルはこれに懲りて、問題があったらすぐに公開して対応するという姿勢を全社的に整えることとなる。これにより、それまではあまり表に出てこなかった「エラッタ」※1のリストなどもこの後は入手が容易になった。
※1 Eratta、CPUが抱えるバグや設計上の問題点。

 Pentium関係のバグでは、1997年に発覚した「F00Fバグ」※2の方が重大だった。しかしインテルが速やかに情報を公開するとともに、解決法を提供したため、OSベンダー側がこれに対応して、バグを発生させないように対処したことで、大きな影響はなかった。
※2 「lock cmpxchg8b eax」という命令を処理しようとすると、ハングアップする。本来は不正命令として例外処理を行なうべき命令。

 その後インテルがリリースした製品でも、Intel 820チップセットや、最近ではIntel 6シリーズチップセット、Intel SSD 520などでリコールの問題が起きている。だが、これらが深刻な影響を与えずに済んでいるのは、やはりPentium FDIVバグの教訓がいまだにきちんと生きていることの証拠と考えられる。

 その意味では、インテルの黒歴史のひとつになりそうだったのが、一転して貴重な体験をもたらした功労者となったのがPentium、と言えるだろう。

前へ 1 2 3 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

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

ピックアップ

ASCII.jp RSS2.0 配信中

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