LoginSignup
5
3

More than 5 years have passed since last update.

x86の浮動小数計算とSIMD命令の変遷

Last updated at Posted at 2015-12-31

8087(1980)

浮動小数点演算ユニット(FPU)。
精度は80bit、スタック型のレジスタが8本。

80486(1989)

FPUがCPUに内蔵化された。

MMX Pentium(1997)

FPUレジスタ80bit×8のうち64bitを使ってmmレジスタとし、8bit×8~32bit×2の整数SIMD計算が可能(MMX)。
わざわざレジスタを共用にしたのは、コンテキストスイッチ時のレジスタ退避の仕組みに変更点がなく、OSの対応を待つ必要がなかったため。

Pentium Ⅲ(1999)

128bitのxmmレジスタを8本新設、32bit×1、32bit×4の浮動小数点演算が可能(SSE)。

Pentium 4(2000)

xmmレジスタで64bit×1、64bit×2の浮動小数点演算に加え、8bit×16~64bit×2の整数演算も可能(SSE2)。
以降、機能拡張が続いたが、レジスタ幅などの変更はなし。

Sandy Bridge(2011)

xmmレジスタを16本に増やし、さらに256bitに伸ばしてymmレジスタとした(下位128bitはxmmレジスタと共用)。
32bit×8、64bit×4の浮動小数点演算が可能になった(Intel AVX)。

Haswell(2013)

ymmレジスタで8bit×32~64bit×4の整数演算が可能に(Intel AVX2)。

内容別

80bit浮動小数演算、超越関数(sin,cos,exp,log)計算

x87命令(実際にはSSE以降でソフトウェア的に計算した方が速い)

64bit・32bit浮動小数演算

SSEで4並列(32bit)
SSE2で2並列(64bit)
AVXで4並列(64bit)、8並列(32bit)
逆数命令、逆数平方根命令は64bitでは使用できない

64bit~8bit整数演算

MMXで2並列(32bit)~8並列(8bit)
SSE2で2並列(64bit)~16並列(8bit)
AVX2で4並列(64bit)~32並列(8bit)
一部不可能な命令あり

5
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3