x87 は、 x86 アーキテクチャ命令セットの浮動小数点関連のサブセットです。これは、対応する x86 CPU と連携して動作するオプションの浮動小数点コプロセッサの形で、8086命令セットの拡張として始まりました。これらのマイクロチップの名前は「87」で終わります。これは NPX (数値プロセッサ拡張) とも呼ばれます。基本命令セットの他の拡張と同様に、x87 命令は厳密には動作プログラムの構築に必要ではありませんが、一般的な数値タスクのハードウェアおよびマイクロコード実装を提供し、これらのタスクを対応するマシン コードルーチンよりもはるかに高速に実行できるようにします。x87 命令セットには、加算、減算、比較などの基本的な浮動小数点演算の命令だけでなく、たとえば正接関数とその逆関数の計算などのより複雑な数値演算の命令も含まれています。
Intel 80486以降のほとんどの x86 プロセッサでは、メイン CPU にこれらの x87 命令が実装されていますが、この用語は、命令セットのその部分を指すために今でも使用されることがあります。x87 命令が PC で標準になる前は、コンパイラやプログラマは、浮動小数点演算を実行するためにかなり遅いライブラリ呼び出しを使用する必要がありました。この方法は、(低コストの)組み込みシステムでは今でも一般的です。
説明
x87 レジスタは、ST(0) から ST(7) までの8 レベルの深さの非厳密なスタック構造を形成し、レジスタは、トップからのオフセットを使用して、どちらのオペランドからも直接アクセスでき、プッシュおよびポップすることもできます。(このスキームは、スタック フレームがプッシュ/ポップされ、インデックス付けされる方法に似ています。)
このスタックの一番上に値をプッシュ、計算、ポップする命令があります。単項演算(FSQRT、FPTAN など) は暗黙的に最上位の ST(0) をアドレス指定し、二項演算(FADD、FMUL、FCOM など) は暗黙的に ST(0) と ST(1) をアドレス指定します。非厳密スタック モデルでは、二項演算で ST(0) を直接メモリ オペランドと一緒に使用することも、明示的に指定されたスタック レジスタ ST( x ) と一緒に使用することもできます。これは、従来のアキュムレータ(結合された宛先と左オペランド) と同様の役割を果たします。これは、ST(0) を変更されていないオペランド、ST( x )を宛先として、命令ごとに逆にすることもできます。さらに、ST(0) の内容を、FXCH ST( x )という命令を使用して別のスタック レジスタと交換できます。
これらの特性により、x87 スタックは、7 つの自由にアドレス指定可能なレジスタと専用のアキュムレータ (または 7 つの独立したアキュムレータ) として使用できます。これは、スーパースケーラx86 プロセッサ ( 1993 年以降のPentiumなど) に特に当てはまります。これらの交換命令 (コード D9C8..D9CF h ) は、FXCH ST( x )の整数パスの 1 つを FPU 命令と並行して使用することで、クロック ペナルティがゼロになるまで最適化されます。アセンブリ言語プログラマにとっては自然で便利ですが、コンパイラ作成者の中には、x87 コードを効果的にスケジュールする自動コード ジェネレータを構築するのが複雑だと感じた人もいます。このようなスタックベースのインターフェイスは、レジスタベースのインターフェイスと比較して、関数呼び出しでスクラッチ変数を保存する必要性を最小限に抑えることができます[1] (ただし、歴史的には、8087 実装の設計上の問題により、その可能性は制限されていました。[2] [3] )
x87 は、 IEEE 754-1985標準に従って、単精度、倍精度、および 80 ビットの拡張倍精度の 2 進浮動小数点演算を提供します。デフォルトでは、x87 プロセッサはすべて内部で 80 ビットの拡張倍精度を使用します (多くの計算で精度を維持できるようにするため、IEEE 754 の設計原理を参照)。したがって、特定の算術演算シーケンスは、厳密な単精度または倍精度の IEEE 754 FPU と比較してわずかに異なる動作をする可能性があります。[4]これは、正しい操作のために倍精度を前提として記述された一部の半数値計算では問題になる場合があるため、このような問題を回避するために、x87 は特別な構成/ステータス レジスタを使用して、各操作の後に自動的に単精度または倍精度に丸めるように構成できます。SSE2の導入以来、 x87 命令は以前ほど重要ではなくなりましたが、丸め誤差の影響を受けやすく、 80 ビット形式で利用可能な64 ビットの仮数精度と拡張範囲を必要とする数値計算用の高精度スカラー ユニットとして重要なままです。
パフォーマンス
典型的なx87 FPU命令の例のクロックサイクル数(ここではレジスタレジスタバージョンのみを示しています)。[5]
A ... B表記(最小から最大) は、一時的なパイプラインの状態と選択された演算精度 (32、64、または 80 ビット) に依存するタイミングの変動をカバーします。また、数値ケース (設定されたビットの数、ゼロなど) による変動も含まれます。L → H 表記は、使用可能な最低 (L) および最高 (H) の最大クロック周波数に対応する値を表します。
- * スーパースカラー実行により、実質的なゼロクロック遅延が実現できる場合が多くあります。
- § 5 MHz の 8087 は、オリジナルの x87 プロセッサでした。8086 (8087 なし) 上の一般的なソフトウェア実装の浮動小数点ルーチンと比較すると、係数はさらに大きくなり、おそらくさらに 10 倍になります (つまり、アセンブリ言語での正しい浮動小数点加算には 1000 サイクル以上かかる可能性があります)。
メーカー
Intel 8087 以降のモデルと互換性のある浮動小数点ユニットを設計または製造した企業としては、AMD ( 287、387、486DX、5x86、K5、K6、K7、K8 )、Chips and Technologies ( Super MATHコプロセッサ)、Cyrix ( FasMath、Cx87SLC、Cx87DLCなど、6x86、Cyrix MII )、富士通(初期のPentium Mobileなど)、Harris Semiconductor ( 80387および486DXプロセッサを製造)、IBM (さまざまな387および486設計)、IDT ( WinChip、C3、C7、Nanoなど)、IIT ( 2C87、3C87など)、LC Technology ( Green MATHコプロセッサ)、National Semiconductor ( Geode など) などがあります。 GX1、Geode GXmなど)、NexGen ( Nx587 )、Rise Technology ( mP6 )、ST Microelectronics ( 486DX、5x86などを製造)、Texas Instruments ( 486DXプロセッサなどを製造)、Transmeta ( TM5600およびTM5800 )、ULSI ( Math·Coコプロセッサ)、VIA ( C3、C7、Nanoなど)、Weitek ( 1067、1167、3167、4167 )、Xtend ( 83S87SX-25およびその他のコプロセッサ)。
建築の世代
8087
8087は、インテルが設計した 16 ビット プロセッサ用の最初の数値演算コプロセッサでした。インテル 8088または8086マイクロプロセッサと組み合わせて使用するように構築されました。(インテルの以前の8231 および 8232浮動小数点プロセッサは、i8080 CPU で使用するために販売されていましたが、実際には 1977 年と 1979 年の AMD の Am9511 および Am9512 FPU のライセンス バージョンでした。[6] )
80C187

1982年のオリジナルのデータシート(NMOSベース)80188と80186には特定の数値演算コプロセッサについて言及されているようですが、[7]実際には両方のチップは8087とペアになっていました。
しかし、1987年に、 CMOSベースのIntel 80C186 CPUを刷新するために、Intelは80C187 [8]数値演算コプロセッサを導入した。80C187のメインプロセッサへのインターフェースは8087のものと同じだが、そのコアは基本的に80387SXのものであり、IEEE 754に完全準拠しており、80387の追加命令をすべて実行できる。[9]
80287
80287 ( i287 ) は、Intel 80286 シリーズ マイクロプロセッサ用の数値演算コプロセッサです。Intelのモデルには、 6 MHz から 12 MHz までの上限周波数を持つバリエーションが含まれていました。NMOS バージョンは、6、8、10 MHz で使用できました。[10] 使用可能な 10 MHz Intel 80287-10 数値コプロセッサ バージョンは、 100 個単位で250ドルでした。 [11] これらの 80287、80287-8、80287-10 のボックス バージョンは、それぞれ 212 ドル、326 ドル、374 ドルで使用できました。80C287A のボックス バージョンは 457 ドルで使用できました。[12] 387のような性能を持つ他の287モデルとしては、CHMOS IIIを使用して構築されたIntel 80C287と、完全に静的なゲートのみを使用してAMDのCMOSプロセスで製造されたAMD 80EC287があります。
その後、287ピン配置の387SXマイクロアーキテクチャを採用したi80287XL、[13]、ラップトップ向けの特別バージョンであるi80287XLT、およびその他の派生製品が登場した。内部に3/2乗算器が搭載されているため、コプロセッサをCPUの2/3の速度で実行するマザーボードでは、FPUをCPUと同じ速度で実行できる。80287XLと80287XLTはどちらも、50%のパフォーマンス向上、83%の消費電力削減、および追加命令を提供した。[14]
80287 は80386マイクロプロセッサと連携して動作し、1987 年に 80387 が導入されるまでは、当初は 80386 で使用できる唯一のコプロセッサでした。ただし、80387 は、その高いパフォーマンスと命令セットの優れた機能により、強く好まれています。
-
Intel 80287 の 6 MHz バージョン
-
Intel 80287 ダイショット
-
インテル 80287XL
-
インテル 80287XLT
80387

80387 ( 387またはi387 )は、 IEEE 754-1985規格に完全準拠した最初の Intel コプロセッサです。386 チップの 2 年後の 1987 年にリリースされた[15] i387 は、Intel の以前の 8087/80287 コプロセッサよりも大幅に高速化され、三角関数の特性も向上しています。100 個単位で 500 ドルで販売されました。[16]その後まもなく、Intel の Personal Computer Enhancement Operation を通じて小売市場価格 795 ドルで販売されました。[17] 25 MHz バージョンは小売チャネルで 1395 ドルで販売されました。[18] Intel M387 数値演算コプロセッサは、MIL-STD-883 Rev. C 規格に準拠していました。このデバイスは、-55~125℃の温度サイクル、気密封止、長時間のバーンインを含むテストを受けました。この軍用バージョンは16MHzで動作します。この軍用バージョンは、68ピンPGAとクワッドフラットパックで提供されました。この軍用バージョンは、PGAバージョンの場合、100個単位で1155ドルで提供されました。[19] 387DXの33MHzバージョンも提供されており、毎秒 3.4メガ砥石の性能を持っています。[20] 16、20、25、33MHzの387DX数値演算コプロセッサの次のボックスバージョンは、それぞれ570ドル、647ドル、814ドル、994ドルで提供されていました。[21] 8087と80287のFPTANとFPATAN命令は、引数の範囲が±π/4(±45°)に制限されており、8087と80287にはSIN関数とCOS関数を直接実行する命令はありません。 [22] [全文引用が必要]
コプロセッサがない場合、386 は通常、ソフトウェア例外ハンドラによって実行時に実装される (比較的低速な) ソフトウェア ルーチンを通じて浮動小数点演算を実行します。数値演算コプロセッサが 386 とペアになっている場合、コプロセッサはハードウェアで浮動小数点演算を実行し、(エミュレートする) ソフトウェア ライブラリ呼び出しよりもはるかに高速に結果を返します。
i387は、32ビットプロセッサバスを持つ標準のi386チップとのみ互換性があります。後にコストが削減されたi386SXは、より狭い16ビットデータバスを持ち、i387の32ビットバスとインターフェイスできません。i386SXには、SXのより狭い16ビットデータバスと互換性のある独自のコプロセッサ80387SXが必要です。Intelは387SXコプロセッサの低電力バージョンをリリースしました。[23]
Intel387 SL モバイル数学コプロセッサには、バッテリ寿命を大幅に減らすことなく動作できる電力管理機能があります。バッテリ節約のためのパワーダウン モードは 2 つあります。最初のモードには「ストップ クロック」モードがあり、不要なときに数学コプロセッサを自動的にシャットダウンします。このモードでは、約 25 マイクロアンペアを消費します。2 番目のモードは、コプロセッサが命令を実行することを必要とするアプリケーションをユーザーが実行しているときに自動的に動作します。このモードでは通常、通常の Intel387 SX 数学コプロセッサよりも 30 パーセント少ないバッテリ電力 (約 100 mA) を消費します。命令を実行していないときは「アイドル」モードになり、アクティブ モードと比較して 96 パーセントの電力削減が 4 mA 未満になります。16 から 25 MHz の範囲で動作し、BIOS またはハードウェアの再設定は必要ありません。価格は 189 ドルでした。[24]
-
387 円
-
387SX の
-
387DX の
-
i386DX と i387DX
-
80387用ソケット
80487

i487SX (P23N)は、 Intel i486SXマシン用の浮動小数点ユニット コプロセッサとして販売されました。実際には、本格的なi486DX実装が含まれていました。i486SX システムにインストールされると、i487 はメイン CPU を無効にし、すべての CPU 操作を引き継ぎました。i487 は i486SX の存在を検出する手段を講じており、元の CPU がなければ機能しませんでした。[25] [26] [検証失敗]
80587
Nx587は、CPU (この場合は NexGen のNx586)とは別に製造された最後の x86 用 FPU でした。
参照
注記
- ^ ファブレス企業はチップを設計し、製造をファブ企業に委託しますが、ファブ企業は設計と製造の両方を自社で行うことができます。
参考文献
- ^ William Kahan (1990年11月2日). 「8087スタックの利点について」(PDF)。未発表のコースノート、カリフォルニア大学バークレー校コンピュータサイエンス部門。2017年1月18日時点のオリジナル(PDF)からアーカイブ。
- ^ William Kahan (1989年7月8日). 「Intel 8087 スタックオーバーフロー/アンダーフローの処理方法」(PDF)。2013年6月12日時点のオリジナル(PDF)よりアーカイブ。
- ^ Jack Woehr (1997年11月1日). 「ウィリアム・カハンとの会話」
- ^ David Monniaux (2008 年 5 月). 「浮動小数点計算の検証の落とし穴」. ACM Transactions on Programming Languages and Systems . 30 (3): 1–41. arXiv : cs/0701192 . doi :10.1145/1353445.1353446. S2CID 218578808.
- ^ 数値は、各プロセッサのデータシート、プログラミング マニュアル、最適化マニュアルから取得されています。
- ^ 「算術プロセッサ:当時と現在」www.cpushack.com 2010年9月23日2023年5月3日閲覧。
- ^ Intel (1983). Intel マイクロプロセッサ & 周辺機器ハンドブック。pp. 3-25 (iAPX 186/20) および 3-106 (iAPX 188/20)。
- ^ 「CPU Collection – Model 80187」。cpu-info.com。2011年7月23日時点のオリジナルよりアーカイブ。2018年4月14日閲覧。
- ^ 「80C187 80ビット数学コプロセッサ」(PDF) 1992年11月. 2023年5月3日閲覧。
- ^ 吉田、ステイシー、「数値演算コプロセッサ: コンピュータの稼働率を維持する」、インテル コーポレーション、マイクロコンピュータ ソリューション、1990 年 9 月/10 月、16 ページ
- ^ Intel Corporation、「新製品の焦点コンポーネント: 友人たちのちょっとした助けを借りた 32 ビット マイクロプロセッサ」、Special 32-Bit Issue Solutions、1985 年 11 月/12 月、13 ページ。
- ^ Intel Corporation、「パーソナル コンピュータの機能強化」、パーソナル コンピュータの機能強化オペレーション、注文番号 245.2、10-89/75K/AL/GO、1989 年 10 月、4 ページ
- ^ Intel Corporation、「新製品フォーカス: システム: SnapIn 386 モジュールによる PS/2 PC のアップグレード」、Microcomputer Solutions、1991 年 9 月/10 月、12 ページ
- ^ 吉田、ステイシー、「数値演算コプロセッサ: コンピュータの稼働率を維持する」、インテル コーポレーション、マイクロコンピュータ ソリューション、1990 年 9 月/10 月、16 ページ
- ^ Moran, Tom (1987-02-16). 「Intel 社、386 マシンのパフォーマンスを向上させるチップを発表」InfoWorld . 第 9 巻、第 7 号、p. 5. ISSN 0199-6649.
- ^ 「新製品のフォーカス コンポーネント: 32 ビット コンピューティング エンジンが全速前進」。ソリューション。Intel Corporation: 1987 年 5 月 10 日 - 6 月。
- ^ 「NewsBit: Intel 80387 が小売チャネルを通じて入手可能に」。ソリューション。Intel Corporation: 1. 1987 年 7 月~8 月。
- ^ Intel Corporation、「NewsBits: 25 MHZ 80387 が小売チャネルを通じて入手可能」、Microcomputer Solutions、1988 年 9 月/10 月、1 ページ
- ^ Intel Corporation、「Focus: コンポーネント: 軍用周辺機器が M386 マイクロプロセッサをサポート」、Microcomputer Solutions、1989 年 3 月/4 月、12 ページ
- ^ Lewnes, Ann、「Intel386 アーキテクチャは今後も存続する」、Intel Corporation、Microcomputer Solutions、1989 年 7 月/8 月、2 ページ
- ^ Intel Corporation、「パーソナル コンピュータの機能強化」、パーソナル コンピュータの機能強化オペレーション、注文番号 245.2、10-89/75K/AL/GO、1989 年 10 月
- ^ Borland Turbo Assembler のドキュメント。
- ^ Lewnes, Ann、「Intel386 アーキテクチャは今後も存続する」、Intel Corporation、Microcomputer Solutions、1989 年 7 月/8 月、2 ページ
- ^ Intel Corporation、「新製品の焦点: エンドユーザー: 数値演算コプロセッサがデスクトップ パフォーマンスをポータブルにもたらす」、Microcomputer Solutions、1992 年 5 月/6 月、16-17 ページ
- ^ Intel 487SX は、無料のオンライン コンピューティング辞書に掲載されています。
- ^ “Intel 80487”. www.cpu-world.com . 2021年6月9日閲覧。
- Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル 第 1 巻: 基本アーキテクチャ(PDF)。Intel。
外部リンク
- 数値演算コプロセッサについて知りたいことすべて
