チップセット黒歴史が一段落してしまったので、しばらくは、やや違うロードマップを伝えていきたい。そこで今回からは、コプロセッサーの歴史をいくつか取り上げよう。
コプロセッサー、英語で書くとCo-Processorで、名前から判るようにProcessorの機能を補うものである。日本語では副プロセッサーなどと呼ばれた事もあるが、最近はコプロセッサーで話が通じるようだ。
副、というからにはもちろん正プロセッサーもあり、両方が対になって動くことでシステムを構成する。ただし「正プロセッサーはなにを処理し、副プロセッサーはなにを処理するか」はケースバイケースで決まる。
連載139回でお伝えしたRenditionの「Vérité V1000」の場合、正プロセッサーに当たるものは固定機能の描画パイプラインで、副プロセッサーが独自のRISC CPUだった。
あるいは(オンライン連載にない、書籍版だけの書きおろし記事で恐縮だが)MotorolaのMC88100の場合、「MC88200」というBus I/F兼キャッシュコントローラー兼キャッシュが別チップの形で用意されており、コンパニオンチップと分類すべきか微妙なところではあるが、一応MMUが入っているあたりは、コプロセッサーと呼べなくもない。
もっと巨大なシステムでは、「Intel iAPX 432」の場合、I/O処理などのために8086/8088プロセッサーを接続することになっており、システム的にはこれらはコプロセッサーの扱いとなっていた。つまり、システムの構成や定義次第で、どんなものでもコプロセッサーと扱われる可能性があるということだ。
ただPCのマーケットでは、主にFPU(Floating Point Unit:浮動小数点演算ユニット)をコプロセッサーとして扱うことが非常に多い。事実、FPUは80486の世代になるまでは別チップで実装されていたし、その後もNexGenのNX586は、FPUとして「NX587」というチップをコプロセッサーとして別に必要としていた。なぜ別チップとして用意する必要があるのかを、今回は解説していきたい。
CPU回路の巨大化を防ぐために
FPUを別のチップとして供給
小数点の演算には、大別して固定小数点演算と浮動小数点演算の2種類がある。固定小数点演算の場合、10進数の表現は32bitだと
XXXX.YYYYY
で固定になる。小数点の位置はインプリメント次第で変更可能だが、普通は
0.YYYYYYYYY~XXXXXXXX.Y
という範囲までである。32bitでは有効桁数が9桁ほどしかないので、整数部の最大値はどんなにがんばっても8桁どまりになる。9桁をフルに使うと小数でなくなってしまうからだ。これが64bitになると有効桁数が18桁に増えるので、
0.YYYYYYYYYYYYYYYYYY~XXXXXXXXXXXXXXXXX.Y
までの表現が可能になるが、場合によってはこれでも足りないことがある。他方浮動小数点の場合、10進数の表現は32bitだと
0.YYYYYY×10ZZ
で、有効桁数が若干減る代わりに、-10-126~10127という非常に広い範囲の数字を表現できる。同様に64bitでは
0.YYYYYYYYYYYYYYY×10ZZZ
となり、-10-1022~101023までが表現可能となる。小数部の有効桁数も15桁まで広がるので、科学技術演算であっても、それなりの精度で演算できる。
こうした特殊なデータフォーマットを扱うことの必要性そのものは昔から知られていたものの、問題はこれを実現しようとするとCPUの回路が巨大化してしまうことだ。特に乗算/除算の処理や、Sin/Cosやexp/logといった特殊関数の演算回路がかなり大きくなってしまう。
実際、後述する「Intel 8086」と、そのFPUである「Intel 8087」を比較した場合、8086のトランジスター数は2万9000個なのに対し、8087は4万5000個とFPUのほうがサイズが大きくなっている。これを1つのパッケージにすると、当然ダイサイズも大きくなり、歩留まりが悪くなるため、価格も引き上げざるを得ない。
かといって、8086を購入したユーザー全員がFPUを必要としたかというと、そういうわけではなく、大多数のユーザーはFPUを使っていなかった。したがって、FPUを別チップに分けるのは経済合理性の観点から言っても、生産の容易さからいっても理にかなっている。
余談であるが、浮動小数点数演算の標準をまとめたものに、IEEE 754がある。このなかでは基本形式や交換形式、丸め規格、演算、例外処理など浮動小数点演算に求められる要素を規格化したもので、x86系以外にも多くのCPUやFPUがこのIEEE 754に準じた形でFPUを構成している。
IEEE 754の基本形式のうち2進数に関して、当初は16bit(半精度)、32bit(単精度)、64bit(倍精度)、128bit(4倍精度)の4種類のフォーマットが予定されていたが、8087は最大でも80bit精度しか搭載しない。
これは128bitをフルに実装すると回路規模が大きくなりすぎてしまうため、80bitという中間的な桁数を認めるようにIEEEに強く働きかけた結果である。ただこの結果として、4倍精度をサポートするFPUは非常に少なくなってしまい、ほとんどのものが80bit精度の実装で済ませてしまっているあたりは、先例を作った8087の罪は重いと筆者は考える。
この連載の記事
-
第789回
PC
切り捨てられた部門が再始動して作り上げたAmpereOne Hot Chips 2024で注目を浴びたオモシロCPU -
第788回
PC
Meteor Lakeを凌駕する性能のQualcomm「Oryon」 Hot Chips 2024で注目を浴びたオモシロCPU -
第787回
PC
いまだに解決しないRaptor Lake故障問題の現状 インテル CPUロードマップ -
第786回
PC
Xeon 6は倍速通信できるMRDIMMとCXL 2.0をサポート、Gaudi 3は価格が判明 インテル CPUロードマップ -
第785回
PC
Xeon 6のIOチップレットには意地でもDDR5のI/Fを搭載しないインテルの強いこだわり インテル CPUロードマップ -
第784回
PC
Intel 3は300~500MHz動作周波数が向上する インテル CPUロードマップ -
第783回
PC
Lunar LakeにはWi-Fi 7があるがPCIe x16レーンは存在しない インテル CPUロードマップ -
第782回
PC
Lunar LakeはNPUの動作周波数がアップし性能は2倍、ピーク性能は4倍に インテル CPUロードマップ -
第781回
PC
Lunar LakeのGPU動作周波数はおよそ1.65GHz インテル CPUロードマップ -
第780回
PC
Lunar Lakeに搭載される正体不明のメモリーサイドキャッシュ インテル CPUロードマップ -
第779回
PC
Lunar LakeではEコアの「Skymont」でもAI処理を実行するようになった インテル CPUロードマップ - この連載の一覧へ