FPU
テンプレート:出典の明記 FPU(Floating Point Unit、浮動小数点(演算処理)装置)とは、浮動小数点演算を専門に行う処理装置のこと。コンピュータの周辺機器のようなアーキテクチャのものもあれば、CPUと一体化したコプロセッサのようなアーキテクチャのものもある。
AMDではAm9511をAPU (Arithmetic Processing Unit) と呼んでおり、インテルではx87をNDP(Numeric data processor, 数値演算コプロセッサ)、またその命令についてNPX(Numeric Processor eXtension)とも呼んでいる。
マイクロプロセッサにおいては、Apple IIの頃は完全に周辺機器のようなアーキテクチャだったが、8087の頃には命令の一体化など、CPUの拡張装置のようなアーキテクチャになった。
インテルのx86系CPUでは387(386用)が最後となり、486からは同一のチップ内に内蔵された(486の初期には、FPUを内蔵しない廉価版と、事実上はオーバードライブプロセッサであった487もあった)。同様に、モトローラの68000系でもMC68040以降のMPUではチップ内に内蔵している。
(現在の)高性能プロセッサではFPUは完全にCPU内の一ユニットとなっている。
接続の形式
I/Oプロセッサ形式
FPUをI/Oポートに接続して、通常の周辺機器と同様にI/Oポートを介してデータのやり取りを行なう形式。たとえばAm9511はこの形式で設計されている。FPUは周辺機器として扱われるので、CPUと同じメーカのFPUを使わなくてもよく、8ビットCPUの時代には、コストのかかるAm9511などの代わりに別メーカの電卓用CPUをI/Oポートに接続して使うことがホビイストの間で実験的に行なわれた。
また、対応機種として設計されていない組み合わせ、たとえばモトローラのMC68881(MC68020/MC68030用FPU)や、インテルの287(286用FPU)を、MC68000やMC68010に接続する場合は、データの入出力をプログラム上で明示的に行わなくてはならない。そのマシンに対応した数値演算ライブラリを使用すれば、アプリケーションソフトウェアのプログラミングにおいては、FPUを使用することを意識する必要は無いが、I/Oポートを介してデータをやり取りするため直接接続されている場合に比べて、大きなオーバヘッドが生ずる。逆に利点としては、主プロセッサと、副プロセッサの動作速度を個別に設定できるなど、自由度が高い点がある。
コプロセッサ方式
CPUとFPUがアドレスバスとデータバスを共有し、協調して動作する方式。ユーザから見るとCPUの命令が拡張されたように見える。 8087ではデコーダを独立して内蔵しており、真の意味でコプロセッサだったが、287以降はCPUのデコード結果を専用I/Oポートを介し引き渡す方式を採った。8086/87では次の浮動小数点命令を実行する前に、前の命令が終わるまで待つための wait 命令が必要だったが、286/287からは必要なくなっている。
モトローラのMC68881やMC68882を同社MC68020またはMC68030と組み合わせる場合、専用に用意された制御線を使用して接続すれば、ソフトウェアの変更は必要なく、プログラマからは単純にCPUの機能が拡張されたように扱える。MC68020の場合、厳密にはコプロセッサの存在を示すフラグが立つ。
乗っ取り形
コプロセッサ方式の発展形。コプロセッサが実際にはCPUとしての全機能を持っており、制御は完全にコプロセッサ側に渡してしまい、既存のCPUは停止させてしまう。
487がこれで、要するにFPUというのは名前だけで、実態はオーバードライブプロセッサである。