SSE

提供: MonoBook
2019年11月28日 (木) 02:42時点におけるAdministrator (トーク | 投稿記録)による版 (→‎JITコンパイル)
ナビゲーションに移動 検索に移動

ストリーミングSIMD拡張命令(英語:Streaming SIMD Extensions、通称:SSE)とは、インテルが開発したCPUSIMD拡張命令セット、およびその拡張版の総称である。

概要

Pentium IIと激闘を繰り広げたAMDK6-2に実装された3DNow!に対抗すべくPentium IIIに実装されたSIMD命令群である。

大雑把にいえばSSEはMMXを拡張したものであり、MMXでは整数演算だけだったものが、SSEでは浮動小数点演算にも対応した。あとSSEでは新たに8本の128ビットレジスタも追加されている。

プログラミング

MMX,3DNow!,SSEまでの世代はこららに対応したまともなコンパイラがなくアセンブラを用いてプログラムを組んでいた。C言語C++で大枠を書いて、インラインアセンブラで部分的に高速化を試みるという書き方が主流であった。

後に機能強化されたSSE2SSE3SSSE3(Supplemental/補足的なSSE3)、SSE4などが登場している。この世代になるとC言語などのコンパイラも優秀になりアセンブラで書くことはほとんどなくなった。

実情

WindowsVisual C++が主流だった時代のソフトウェアは99.9999%が「SSE非対応」どころか「i386」をターゲットにコンパイルされていた。SSEどころかi486Pentiumの機能も使われていない。これはほとんどのソフトウェアは「最低動作環境」となるPCのスペックを下げることで「多くの人に使ってもらおう」という最小公倍数的な考え方であったためである。

MMXが登場した当初はその話題性から「MMX対応版」「MMX非対応版」といった二種類の実行ファイルを用意したゲームなどもあったが、3DNow!やSSEの時代になると話題性も薄れベンチマークソフトくらいしか対応ソフトがなくなった。

また、ベンチマークソフトみたいに何秒間も負荷100%で砂時計カーソルを表示するような処理でもない限り大して速くはならないという事実がプログラマーたちに知れ渡り「開発コストに見合わない」という認識が広まったことで対応ソフトはどんどん減っていた。

JITコンパイル

SSEがまともに使われだしたのはJavaなどのJITコンパイラの技術が発達し「SSEの有無」を実行環境で判別してコンパイルするようになってからである。

ただJavaでSSEを使うようなプログラムを書くかと言われると、まず書かない。やっぱりベンチマークソフトくらいしか使っていない。

オープンソース界隈

ソースコードを落としてきて実行環境でコンパイルするスタイルのオープンソース界隈ではなんぼか使われていた。一昔前は「apachemysqlの性能を向上させる方法!」などとしてググるとよく出てきていた。

ただオープンソース界隈もCentOSUbuntuが主流になり、「configure;make;make install」が廃れ、パッケージからソフトウェアを入れるのが主流になったことでやっぱりベンチマークソフトくらいしか使われていない。

ベンチマーク

2019年時点

SIMD関連のベンチマークでは、 インテルCore iシリーズでは非常に高性能な結果が得られる。 一方、AMDRyzenでは微妙な結果になる。

RyzenはSIMDではなくGPGPUを使う前提で、SIMD周りをバッサリ切り捨て、その余力を通常の演算性能を上げることに使っているためである。

どちらもプログラムの書き方が全く異なるため一概に「どちらが速い」とは言いにくい。プログラムがSSEに対応しているならIntel、GPGPUに対応しているならAMDの方が高速ということになる。ちなみにSSEGPGPUに両対応している場合は一般的にGPUの方が速い。

歴史

  • 1999年 2月: インテルがSSE搭載のPentium IIIプロセッサを発表。
    • 2000年 3月: インテルがSSE搭載のCeleronプロセッサを発表。
  • 2000年 11月: インテルがSSE2搭載のPentium 4プロセッサを発表。
    • 2002年 5月: インテルがSSE2搭載のCeleronプロセッサを発表。
    • 2003年 3月: インテルがSSE2搭載のPentium Mプロセッサを発表。
    • 2004年 1月: インテルがSSE2搭載のCeleron Mプロセッサを発表。
  • 2004年 2月: インテルがSSE3搭載のPentium 4プロセッサを発表。
    • 2004年 6月: インテルがSSE3搭載のCeleron Dプロセッサを発表。
    • 2006年 1月: インテルがSSE3搭載のIntel Core プロセッサを発表。
  • 2006年 6月: インテルがSSSE3搭載のXeon 5100プロセッサを発表。
  • 2007年 8月: AMDがSSE5を発表。
  • 2007年 11月: インテルがSSE4.1搭載のIntel Core 2プロセッサを発表。
  • 2007年 11月: AMDがSSEa搭載のPhenomを発表。
  • 2008年 11月: インテルがSSE4.2搭載の第一世代Intel Core iプロセッサを発表。
  • 2011年 1月: インテルがAVX搭載の第二世代Intel Core iプロセッサを発表。
  • 2011年 10月: AMDがFMA搭載のAMD FXプロセッサを発表。
  • 2013年 6月: インテルがAVX2搭載の第四世代Intel Core iプロセッサを発表。
  • 2016年 6月: インテルがAVX-512搭載のIntel Xeon Phiコプロセッサを発表。

関連項目