Pentium Uのバグ

PentiumUにバグがあるという話を聞きましたが,これはどのようなものでしょうか。また,実害はあるのでしょうか。


今回,発見されたバグの内容は,さほど深刻なものではありません。まず,バグ(インテルはプロセッサが仕様どおり動作しないバグを「エラッタ」と呼んでいますが,ここではバグとしておきます)の内容を簡単に紹介しておきましょう。なお,詳細はインテルのホームページ(画面下。http://www.intel.co.jp/jp/design/news/flag/)に掲載されています。
 i386以降のプロセッサでは,浮動小数点数から整数へ変換する命令(FIST命令)を実行したときに,対象となる浮動小数点数が変換先の整数に収まり切らない場合エラーを示す内部フラグが立つようになっています。しかし,Pentium Pro/PentiumUでは,変換の特定のケースに限り,フラグが立たないことが判明したのです。
 具体的には,
@変換先が16ビットまたは32ビットの整数,変換元が負の浮動小数点数であり,
Aその数の絶対値が,変換先が表現できる範囲の3倍以上の値かつ特定のビットパターンを持つときに,
B丸めモードが「to nearest(近似)」「to zero(切り捨て)」「up(切り上げ)」のいずれかでFIST命令を発行した
という場合にフラグが立つべきなのに立たない,というバグです。
 このエラーは,以上の条件がすべて整わない限り表面化しません。また,インテルのプロセッサに限らず,上述したような浮動小数点数から整数への変換を行った場合,その動作は保証されない(プロセッサによって挙動が変わる)のが一般的です。そのため,ほとんどの高級言語が,このバグが表面化するような変換を禁止しています。
 したがって,通常のアプリケーションで,このエラーが現れることは原則的にはないはずです。実用上の問題はないといってもいいでしょう。
 余談めいた話になりますが,今回の話題を含めて,インテルプロセッサのバグが一般誌にまで掲載される話題になったのは2度めです。前回は,やはりPentiumの浮動小数点処理に関連したもので,比較的表面化しやすい性質を持っていたことに加えて,インテルの初期の対応がまずかったこともあり,かなり話題になったので,覚えている方も多いでしょう。
 しかし,新しくリリースされたCPUに若干のバグが含まれることは珍しいことではありません。とくに今回は「ありそうなバグ」の範囲ですので,神経質になる必要はないでしょう。前回と今回で共通しているのは,どちらも発見がインターネットでレポートされた,という点です。そのため,一般誌を含めた騒ぎになったようです。
(米田 聡)


PentiumUおよびPentium Proのバグ情報を掲載したインテルのホームページ