FMA3
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/18 05:57 UTC 版)
「ストリーミングSIMD拡張命令」の記事における「FMA3」の解説
インテルが2009年に仕様を変更し、現在使われているFMA命令セット(FMA instruction set)。4オペランド方式をやめ、3つのソースオペランドのうち任意の1つを破壊することにより3オペランドでFMAを実現している。インテルはHaswellマイクロアーキテクチャ以降で、AMDはBulldozerマイクロアーキテクチャのPiledriverコア以降でサポートしている。なお、AMDが当初SSE5において採用したFMA命令も同じ3オペランド方式であった。 ベーシックなmm256_fmadd_ps命令の場合、Intel CPUで1サイクルあたり16個の単精度FMA演算を実行する (256 [bit/inst.] ÷ 32 [bit/fp32FMA] ÷ 0.5 [CPI=cycle/inst.])。例えば3GHzで動作するプロセッサであれば1コア当たり 48 GMAC/s (=96 GFLOPS) のピーク性能を可能にする(参考: FLOPS#代表的なハードウェアの浮動小数点数演算能力)。 FMA4と比べるとレジスタの退避を行う必要がある場合に不利であるが、命令長を1バイト短くすることができるため、デコーダの実装や命令キャッシュのフットプリントでは有利である。インテルのIvy Bridgeマイクロアーキテクチャ以降やAMDのBulldozerマイクロアーキテクチャでは、レジスタ・リネーミングによってレジスタ間のmov命令をゼロレイテンシで実行できるため、これと組み合わせればレジスタ退避のペナルティは軽減できる。 インテルのマイクロプロセッサにおいてはAVX2命令と同時に採用されたため、AVX2命令の一部であると誤解されることがある。しかし、両者のCPUIDフラグは独立に設けられており、必ずしも両者が同時にサポートされているとは限らない(例えば、FMA3をサポートするAMDのPiledriverコアではAVX2命令はサポートしていない)。
※この「FMA3」の解説は、「ストリーミングSIMD拡張命令」の解説の一部です。
「FMA3」を含む「ストリーミングSIMD拡張命令」の記事については、「ストリーミングSIMD拡張命令」の概要を参照ください。
- FMA3のページへのリンク