
浮動小数点ユニット(FPU 、口語的には数学コプロセッサ)は、浮動小数点数の演算を実行するために特別に設計されたコンピュータシステムの一部です。 [1]一般的な演算は、加算、減算、乗算、除算、平方根です。一部のFPUは指数計算や三角計算などのさまざまな超越関数も実行できますが、精度が低い場合があり、[2] [3]一部のシステムではこれらの関数をソフトウェアで計算することを好みます。
汎用コンピュータ アーキテクチャでは、1 つまたは複数の FPU が中央処理装置内の実行ユニットとして統合される場合があります。ただし、多くの組み込みプロセッサには浮動小数点演算のハードウェア サポートがありません (ただし、標準としてサポートされるものが増えています)。
CPU が浮動小数点演算を必要とするプログラムを実行する場合、それを実行する方法は 3 つあります。
- 浮動小数点ユニットエミュレータ(ソフトウェアの浮動小数点ライブラリ)
- アドオンFPUハードウェア
- 統合FPU(ハードウェア)
歴史
1954 年、IBM 704 には浮動小数点演算が標準機能として搭載されました。これは、前身のIBM 701に対する大きな改良点の 1 つでした。これは、後継の 709、7090、および 7094 にも引き継がれました。
1963年、デジタルは浮動小数点機能を標準装備したPDP-6を発表しました。 [4]
1963年、GE-235は浮動小数点および倍精度計算用の「補助演算装置」を搭載しました。[5]
歴史的に、一部のシステムでは、浮動小数点演算を統合ユニットではなくコプロセッサで実装していました (ただし、現在では CPU に加えて、たとえばGPU (コプロセッサは CPU に必ずしも組み込まれているわけではありません) には、原則として FPU が搭載されていますが、第 1 世代の GPU には搭載されていませんでした)。これは、単一の集積回路、回路基板全体、またはキャビネットである可能性があります。浮動小数点演算ハードウェアが提供されていない場合、浮動小数点演算はソフトウェアで実行されます。これにより、プロセッサ時間は長くなりますが、追加のハードウェアのコストは回避されます。特定のコンピューター アーキテクチャでは、浮動小数点ユニット命令はソフトウェア関数のライブラリによってエミュレートされる場合があります。これにより、同じオブジェクト コードを浮動小数点ハードウェアの有無にかかわらずシステムで実行できるようになります。エミュレーションは、CPU のマイクロコード、オペレーティング システム関数、またはユーザー空間コードとして、いくつかのレベルで実装できます。整数機能のみが利用可能な場合、CORDICメソッドは超越関数の評価に最も一般的に使用されます。 [引用が必要]
現代のコンピュータアーキテクチャのほとんどでは、浮動小数点演算と整数演算が分離されています。この分離はアーキテクチャによって大きく異なります。専用の浮動小数点レジスタを持つものもあれば、Intel x86のように独立したクロック方式を採用しているものもあります。[6]
CORDICルーチンは、 Intel x87コプロセッサ(8087、[7] [8] [9] [10] [11] 80287、[11] [12] 80387 [11] [12])から80486 [7]マイクロプロセッサシリーズまで実装されているほか、 Motorola 68881 [7] [8]および68882にも一部の浮動小数点命令用に実装されており、主にFPUサブシステムのゲート数(および複雑さ)を削減する手段として使用されています。
浮動小数点演算はパイプライン化されることが多いです。一般的なアウトオブオーダー実行のない以前のスーパースカラーアーキテクチャでは、浮動小数点演算は整数演算とは別にパイプライン化されることがありました。
Bulldozerマイクロアーキテクチャのモジュラーアーキテクチャは、同時マルチスレッドを使用するFlexFPUという特殊なFPUを使用します。モジュールごとに2つの物理整数コアはシングルスレッドであり、 2つの仮想同時スレッドが単一の物理コアのリソースを共有するIntelのハイパースレッディングとは対照的です。 [13] [14]
浮動小数点ライブラリ
一部の浮動小数点ハードウェアは、加算、減算、乗算という最も単純な演算のみをサポートしています。しかし、最も複雑な浮動小数点ハードウェアであっても、サポートできる演算の数は限られています。たとえば、任意精度の演算を直接サポートする FPU はありません。
CPU がハードウェアで直接サポートされていない浮動小数点演算を必要とするプログラムを実行している場合、CPU は一連のより単純な浮動小数点演算を使用します。浮動小数点ハードウェアのないシステムでは、CPU は整数演算論理ユニットで実行される一連のより単純な固定小数点演算を使用して浮動小数点演算をエミュレートします。
浮動小数点演算をエミュレートするために必要な一連の演算をリストしたソフトウェアは、多くの場合、浮動小数点ライブラリにパッケージ化されています。
統合FPU
場合によっては、FPU はより単純な浮動小数点演算 (主に加算と乗算) と、より複雑な演算 (除算など) に特化され、分割されることがあります。場合によっては、単純な演算のみがハードウェアまたはマイクロコードで実装され、より複雑な演算がソフトウェアとして実装されることもあります。
現在のアーキテクチャの中には、FPU 機能がSIMDユニットと組み合わされて SIMD 計算を実行するものもあります。その一例は、新しい Intel および AMD プロセッサで使用されるx86-64アーキテクチャでx87命令セットをSSE命令セットで拡張したものです。
アドオンFPU
PDP-11のいくつかのモデル、例えば PDP-11/45、[15] PDP-11/34a、[16] : 184–185 PDP-11/44、[16] : 195, 211 および PDP-11/70、[16] : 277, 286–287 は、浮動小数点命令をサポートするためにアドオン浮動小数点ユニットをサポートしていました。PDP-11/60、[16] : 261 MicroPDP-11/23 [17]およびいくつかのVAXモデル[18] [19]は、アドオン FPU なしで浮動小数点命令を実行でき (MicroPDP-11/23 にはアドオンマイクロコードオプションが必要)、[17]それらの命令の実行をさらに高速化するためにアドオンアクセラレータを提供していました。
1980 年代には、IBM PC互換マイクロコンピュータではFPU がCPUから完全に分離され、通常はオプションのアドオンとして販売されるのが一般的でした。FPU は、計算を集中的に行うプログラムを高速化したり有効にしたりする必要がある場合にのみ購入されました。
IBM PC、XT、および8088または8086をベースにしたほとんどの互換機には、オプションの8087コプロセッサ用のソケットがありました。ATおよび80286ベースのシステムには、通常、 80287用に、80386/80386SXベースのマシンには、それぞれ80387と80387SX用にソケットが使用されていましたが、初期のものは80387がまだ存在していなかったため、80287用にソケットが使用されていました。 他の企業もIntel x86シリーズ用のコプロセッサを製造していました。これらには、CyrixやWeitek が含まれていました。Acorn Computers は、 ARMを搭載したArchimedes製品群に単精度、倍精度、拡張精度[20]を提供するためにWE32206 を選択し、ARM2 プロセッサとWE32206 を接続するゲートアレイを導入して、追加の ARM 浮動小数点命令をサポートしました。[21]エイコーン社は後に、ARMが開発したFPA10コプロセッサを、ARM3プロセッサを搭載したさまざまなマシン向けに提供した。[22]
コプロセッサは、モトローラ 68000 ファミリ、68881 および 68882で利用可能でした。これらは、 Sun-3シリーズなどのモトローラ 68020 / 68030ベースのワークステーションでは一般的でした。また、Apple Macintoshや Commodore Amigaシリーズの上位モデルにもよく追加されましたが、IBM PC 互換システムとは異なり、コプロセッサを追加するためのソケットは下位システムではそれほど一般的ではありませんでした。
マイクロコントローラユニット (MCU/μC)/シングル ボード コンピュータ(SBC)用のアドオン FPU コプロセッサ ユニットもあり、浮動小数点演算機能を提供します。これらのアドオン FPU はホスト プロセッサに依存せず、独自のプログラミング要件 (操作、命令セットなど) を持ち、多くの場合、独自の統合開発環境(IDE) が提供されます。
参照
- 算術論理ユニット(ALU)
- アドレス生成ユニット(AGU)
- ロード・ストアユニット
- CORDICルーチンは多くのFPUで関数を実装するために使用されますが、ゲート数を大幅に増加させることはありません。
- 実行ユニット
- IEEE 754浮動小数点標準
- IBM 16進浮動小数点
- グラフィックス処理ユニット
- 乗算・累算演算
参考文献
- ^アンダーソン、スタンレー F.、 アール、ジョン G.、ゴールドシュミット、ロバート エリオット、パワーズ、ドン M. (1967 年 1 月)。「IBM System/360 モデル 91: 浮動小数点実行ユニット」。IBM Journal of Research and Development。11 (1): 34–53。doi :10.1147/rd.111.0034。ISSN 0018-8646 。
- ^ Dawson, Bruce (2014-10-09). 「Intel が誤差範囲を 1.3 京倍も過小評価」. randomascii.wordpress.com . 2020-01-16閲覧。
- ^ 「『Intel® 64 および IA-32 アーキテクチャー ソフトウェア開発者マニュアル』の FSIN ドキュメントの改善」。intel.com。2014年 10 月 9 日。2020 年 1 月 16 日時点のオリジナルよりアーカイブ。2020年 1 月 16 日閲覧。
- ^ 「PDP-6 ハンドブック」(PDF)。www.bitsavers.org 。2022年 10 月 9 日時点のオリジナルよりアーカイブ(PDF) 。
- ^ 「GE-2xx ドキュメント」www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf、p. IV-4。
- ^ 「Intel 80287 ファミリー」www.cpu-world.com . 2019年1月15日閲覧。
- ^ abc Muller, Jean-Michel (2006). 初等関数: アルゴリズムと実装 (第 2 版). ボストン、マサチューセッツ州: Birkhäuser . p. 134. ISBN 978-0-8176-4372-0. LCCN 2005048094 . 2015年12月1日閲覧。
- ^ パーマー、ジョン F.;モース、スティーブン ポール( 1984 ) 。8087 入門(第 1 版)。John Wiley & Sons Australia、 Limited。ISBN 0471875694. 9780471875697 . 2016年1月2日閲覧。
- ^ Glass, L. Brent (1990 年 1 月)。「数値演算コプロセッサ: その機能と仕組み」Byte . 15 (1): 337–348. ISSN 0360-5280。
- ^ abc Jarvis, Pitts (1990-10-01). 「CORDIC アルゴリズムの実装 - 超越関数を計算するための単一のコンパクトなルーチン」. Dr. Dobb's Journal : 152–156 . 2016-01-02に取得。
- ^ ab Yuen, AK (1988). 「Intel の浮動小数点プロセッサ」. Electro/88 カンファレンス レコード: 48/5/1–7.
- ^ “AMD Steamroller vs Bulldozer”. WCCFtech . 2015年5月9日時点のオリジナルよりアーカイブ。 2022年3月14日閲覧。
- ^ Halfacree, Gareth (2010年10月28日). 「AMDがFlex FPを発表」. bit-tech.net . 2017年3月22日時点のオリジナルよりアーカイブ。 2018年3月29日閲覧。
{{cite web}}: CS1 メンテナンス: 不適切 URL (リンク) - ^ PDP-11/45 プロセッサ ハンドブック(PDF)。Digital Equipment Corporation。1973 年。第 7 章「浮動小数点プロセッサ」。
- ^ abcd PDP-11 プロセッサ ハンドブック(PDF) . Digital Equipment Corporation . 1979 年。
- ^ ab MICRO/PDP-11 ハンドブック(PDF) . Digital Equipment Corporation . 1983. p. 33.
- ^ VAX – ハードウェア ハンドブック 第 1 巻 – 1986 (PDF) . Digital Equipment Corporation . 1985.
- ^ VAX – ハードウェア ハンドブック 第 2 巻 – 1986 (PDF) . Digital Equipment Corporation . 1986 年。
- ^ 「Western Electric 32206 コプロセッサ」www.cpu-world.com . 2021年11月6日閲覧。
- ^ Fellows, Paul (1990 年 3 月)。「ARM のプログラミング: 浮動小数点コプロセッサ」。A &B Computing。pp . 43–44。
- ^ 「Acornが浮動小数点アクセラレータをリリース」(プレスリリース)。Acorn Computers Limited。1993年7月5日。 2021年4月7日閲覧。
さらに読む
- Filiatreault、Raymond (2003)。「SIMPLY FPU」。
