FPU

出典: フリー百科事典『ウィキペディア(Wikipedia)』
数値演算プロセッサから転送)
移動先: 案内検索

テンプレート:出典の明記 FPUFloating Point Unit浮動小数点(演算処理)装置)とは、浮動小数点演算を専門に行う処理装置のこと。コンピュータの周辺機器のようなアーキテクチャのものもあれば、CPUと一体化したコプロセッサのようなアーキテクチャのものもある。

AMDではAm9511をAPU (Arithmetic Processing Unit) と呼んでおり、インテルではx87NDPNumeric data processor, 数値演算コプロセッサ)、またその命令についてNPXNumeric Processor eXtension)とも呼んでいる。

マイクロプロセッサにおいては、Apple IIの頃は完全に周辺機器のようなアーキテクチャだったが、8087の頃には命令の一体化など、CPUの拡張装置のようなアーキテクチャになった。

インテルのx86系CPUでは387386用)が最後となり、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ポートに接続して使うことがホビイストの間で実験的に行なわれた。

また、対応機種として設計されていない組み合わせ、たとえばモトローラMC68881MC68020/MC68030用FPU)や、インテル287286用FPU)を、MC68000MC68010に接続する場合は、データの入出力をプログラム上で明示的に行わなくてはならない。そのマシンに対応した数値演算ライブラリを使用すれば、アプリケーションソフトウェアのプログラミングにおいては、FPUを使用することを意識する必要は無いが、I/Oポートを介してデータをやり取りするため直接接続されている場合に比べて、大きなオーバヘッドが生ずる。逆に利点としては、主プロセッサと、副プロセッサの動作速度を個別に設定できるなど、自由度が高い点がある。

コプロセッサ方式

CPUとFPUがアドレスバスとデータバスを共有し、協調して動作する方式。ユーザから見るとCPUの命令が拡張されたように見える。 8087ではデコーダを独立して内蔵しており、真の意味でコプロセッサだったが、287以降はCPUのデコード結果を専用I/Oポートを介し引き渡す方式を採った。8086/87では次の浮動小数点命令を実行する前に、前の命令が終わるまで待つための wait 命令が必要だったが、286/287からは必要なくなっている。

モトローラMC68881MC68882を同社MC68020またはMC68030と組み合わせる場合、専用に用意された制御線を使用して接続すれば、ソフトウェアの変更は必要なく、プログラマからは単純にCPUの機能が拡張されたように扱える。MC68020の場合、厳密にはコプロセッサの存在を示すフラグが立つ。

乗っ取り形

コプロセッサ方式の発展形。コプロセッサが実際にはCPUとしての全機能を持っており、制御は完全にコプロセッサ側に渡してしまい、既存のCPUは停止させてしまう。

487がこれで、要するにFPUというのは名前だけで、実態はオーバードライブプロセッサである。

関連項目

テンプレート:ウィキプロジェクトリンク