FPU
出典: フリー百科事典『ウィキペディア(Wikipedia)』
FPU(Floating Point number processing Unit、浮動小数点演算装置)とは、浮動小数点演算を専門に行う処理装置のこと。単独では動作せず、主装置であるCPUから利用されるため、コプロセッサ(co processor, 副処理装置)と呼ばれる。また、AMDではAm9511をAPU (Arithmetic Processing Unit) と呼んだ。
インテル社のIntel 8087等、一部で実数演算など浮動小数点以外の演算を行えるものもあるため、インテル社ではNDP(Numeric data processor, 数値演算コプロセッサ)と呼んでいる。NPX(Numeric Processor eXtension)という表記もある。
Apple II用などは完全に周辺機器扱いだったが、8087の頃からCPUの拡張装置とでも呼ぶべき存在になった。
インテル社のx86系アーキテクチャではIntel 80387(Intel 80386用)が最後となり、Intel 486からはCPU自身に浮動小数点演算機能が内蔵されている。同様に、モトローラ社のMC68000系でもMC68040以降のCPUには浮動小数点演算機能を内蔵している。
RISCプロセッサはスーパースケーラによりFPUを整数演算と並列に動作させることができ、現在のプロセッサではFPUはCPUの一ユニットとして扱われる。
目次 |
[編集] 接続の形式
[編集] I/Oプロセッサ形式
FPUをI/Oポートに接続して、通常の周辺機器と同様にI/Oポートを介してデータのやり取りを行なう形式。FPUは周辺機器として扱われるので、CPUと同じメーカのFPUを使わなくてもよく、8ビットCPUの時代には、コストのかかるAm9511などの代わりに別メーカの電卓用CPUをI/Oポートに接続して使うことがホビーストの間で実験的に行なわれた。 モトローラ社のMC68881(同社MC68020/MC68030用FPU)を同社のMC68000やMC68010に接続する場合や、インテル社の80287(同社Intel 80286用FPU)では、データの入出力をプログラム上で明示的に行わなくてはならない(但し80287を80286とともに用いる場合はその必要はなく、8086+8087と同じバイナリで、CPUが自動的にI/O動作を行う)。FPUに対応した数値演算ライブラリを使用すれば、アプリケーション上では、FPUを使用することを意識する必要は無いが、I/Oポートを介してデータをやり取りするため直接接続されている場合に比べて、大きなオーバヘッドが生ずる。逆に利点としては、主プロセッサと、副プロセッサの動作速度を個別に設定できるなど、自由度が高い点がある。
[編集] コプロセッサ方式
CPUとFPUがアドレスバスとデータバスを共有し、協調して動作する方式。ユーザから見るとCPUの命令が拡張されたように見える。
CPUは浮動小数演算命令を検知するとFPUに制御をわたし、自身は動作を停めてFPUからの指示に従ってアドレスバスとデータバスの制御のみを行なうようになる。制御を渡されたFPUはをCPUに指示して後続する命令の一部とデータを読み書きし、浮動小数演算を行なう。演算後CPUに制御を戻し、CPUは浮動小数演算命令の後ろにある次の命令から実行を再開する。特に8087ではデコーダを独立して内蔵しており、真の意味でコプロセッサだったが、80287以降はCPUのデコード結果を専用I/Oポートを介し引き渡す方式を採っていた。 原理からして、パイプライン動作するCPUではこの方式は実現しにくい。 モトローラ社のMC68881やMC68882を同社MC68020またはMC68030と組み合わせる場合、専用に用意された制御線を使用して接続すれば、ソフトウェアの変更は必要なく、プログラマからは単純にCPUの機能が拡張されたように扱える。MC68020の場合、厳密にはコプロセッサの存在を示すフラグが立つ。
[編集] 乗っ取り形
コプロセッサ方式の発展形。FPUを内蔵するCPUをコプロセサとして用いて、制御を完全にコプロセッサ側に渡してしまい、既存のCPUは停止させてしまう方式。 インテル社のi487(i486用FPU)の場合、i486SXとi487を接続すると、i486SXは動作を停止して、i487自身が浮動小数点機能を持ったCPUとして動作するようになっている。これは後に登場したオーバードライブプロセッサの働きと同様である。