「SSE」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| (2人の利用者による、間の2版が非表示) | |||
| 1行目: | 1行目: | ||
'''ストリーミングSIMD拡張命令'''(英語:Streaming SIMD Extensions、通称:SSE)とは、[[インテル]] | '''ストリーミングSIMD拡張命令'''(英語:Streaming SIMD Extensions、通称:SSE)とは、[[インテル]]が[[Pentium III]]向けに開発した[[CPU]]の[[SIMD拡張命令セット]]、およびその拡張版の総称です。 | ||
== 概要 == | == 概要 == | ||
[[Pentium II]]と激闘を繰り広げた[[AMD]]の[[K6-2]]に実装された[[3DNow!]]に対抗すべく[[Pentium III]]に実装された[[SIMD]] | [[Pentium II]]と激闘を繰り広げた[[AMD]]の[[K6-2]]に実装された[[3DNow!]]に対抗すべく[[Pentium III]]に実装された[[SIMD]]命令群です。大雑把にいえばSSEは[[MMX]]を拡張したものであり、MMXでは[[整数演算]]だけだったものが、SSEでは[[浮動小数点演算]]にも対応しました。また、SSEでは新たに8本の128ビット[[レジスタ]]も追加されています。 | ||
== プログラミング == | == プログラミング == | ||
[[MMX | [[MMX]]や[[3DNow!]]、SSEが出た当初はまともな[[コンパイラ]]がなかったため、[[プログラマー]]は[[アセンブラ]]を用いてこれらに対応する[[プログラム]]を組んでいました。[[C言語]]や[[C++]]で大枠を書いて、[[インラインアセンブラ]]で部分的に高速化を試みるという書き方が主流でした。 | ||
後に機能強化された[[SSE2]]や[[SSE3]]、[[SSSE3]](Supplemental/補足的なSSE3)、[[SSE4]] | 後に機能強化された[[SSE2]]や[[SSE3]]、[[SSSE3]](Supplemental/補足的なSSE3)、[[SSE4]]などが登場していますが、この世代になると[[C言語]]などの[[コンパイラ]]も優秀になり[[アセンブラ]]で書くことはほとんどなくなりました。 | ||
== 実情 == | == 実情 == | ||
[[Windows]]で[[Visual C++]]が主流だった時代の[[ソフトウェア]]は99.9999%が「SSE非対応」どころか「[[i386]]」をターゲットに[[コンパイル]] | [[Windows]]で[[Visual C++]]が主流だった時代の[[ソフトウェア]]は99.9999%が「SSE非対応」どころか「[[i386]]」をターゲットに[[コンパイル]]されていました。これらはSSEどころか[[i486]]や[[Pentium]]の機能も使われていません。[[ソフトウェア]]は「[[最低動作環境]]」となる[[PC]]のスペックを下げることで「多くの人に使ってもらおう」という[[最小公倍数]]的な考え方であったためです。 | ||
[[MMX]]が登場した当初はその話題性から「MMX対応版」「MMX非対応版」といった二種類の実行ファイルを用意した[[ゲーム]] | [[MMX]]が登場した当初はその話題性から「MMX対応版」「MMX非対応版」といった二種類の実行ファイルを用意した[[ゲーム]]などもありましたが、[[3DNow!]]やSSEの時代になるとその話題性も薄れベンチマークソフトくらいしか対応ソフトがなくなりました。 | ||
また、ベンチマークソフトみたいに何秒間も負荷100%で砂時計カーソルを表示するような処理でもない限り大して速くはならないという事実が[[プログラマー]] | また、ベンチマークソフトみたいに何秒間も負荷100%で砂時計カーソルを表示するような処理でもない限り大して速くはならないという事実が[[プログラマー]]たちに知れ渡り「開発コストに見合わない」という認識が広まったことで対応ソフトはどんどん減っていきました。 | ||
=== JITコンパイル === | === JITコンパイル === | ||
SSEがまともに使われだしたのは[[Java]]などの[[JITコンパイラ]] | SSEがまともに使われだしたのは[[Java]]などの[[JITコンパイラ]]の技術が発達し「SSEの有無」を実行環境で判別してコンパイルするようになってからです。 | ||
ただ[[Java]]でSSEを使うような[[プログラム]] | ただ[[Java]]でSSEを使うような[[プログラム]]を書くかと言われると、まず書きません。 | ||
やっぱりベンチマークソフトくらいしか使われていません。 | |||
=== オープンソース界隈 === | === オープンソース界隈 === | ||
[[ソースコード]]を落としてきて実行環境でコンパイルするスタイルの[[オープンソース]] | [[ソースコード]]を落としてきて実行環境でコンパイルするスタイルの[[オープンソース]]界隈ではなんぼか使われていました。一昔前は「[[apache]]や[[mysql]]の性能を向上させる方法!」などとして[[ググる]]とよく出てきていました。 | ||
ただ[[オープンソース]]界隈も[[CentOS]]や[[Ubuntu]]が主流になり、「[[configure; make; make install]] | ただ[[オープンソース]]界隈も[[CentOS]]や[[Ubuntu]]が主流になり、「[[configure; make; make install]]」が廃れ、パッケージからソフトウェアを入れるのが主流になったことでやっぱりベンチマークソフトくらいしか使われていません。 | ||
== ベンチマーク == | == ベンチマーク == | ||
=== 2019年時点 === | === 2019年時点 === | ||
SIMD関連のベンチマークでは[[インテル]]の[[Core i]]シリーズでは非常に高性能な結果が得られます。 | |||
[[インテル]]の[[Core i]] | |||
[[Ryzen]]はSIMDではなく[[GPGPU]] | 一方、[[AMD]]の[[Ryzen]]では微妙な結果になります。[[Ryzen]]はSIMDではなく[[GPGPU]]を使う前提で、SIMD周りをバッサリ切り捨て、その余力を通常の演算性能を上げることに使っているためです。 | ||
どちらも[[プログラム]] | どちらも[[プログラム]]の書き方が全く異なるため一概に「どちらが速い」とは言いにくいの実情です。プログラムがSSEに対応しているならIntel、GPGPUに対応しているならAMDの方が高速ということになります。ちなみに[[SSE]]と[[GPGPU]]に両対応している場合は一般的に[[GPU]]の方が速い傾向にあります。 | ||
== 歴史 == | == 歴史 == | ||
| 56行目: | 54行目: | ||
*2008年 11月: インテルが[[SSE4.2]]搭載の第一世代[[Intel Core i]]プロセッサを発表。 | *2008年 11月: インテルが[[SSE4.2]]搭載の第一世代[[Intel Core i]]プロセッサを発表。 | ||
*2011年 1月: インテルが[[AVX]]搭載の第二世代[[Intel Core i]]プロセッサを発表。 | *2011年 1月: インテルが[[AVX]]搭載の第二世代[[Intel Core i]]プロセッサを発表。 | ||
*2011年 10月: AMDが[[ | *2011年 10月: AMDが[[FMA]]搭載の[[AMD FX]]プロセッサを発表。 | ||
*2013年 6月: インテルが[[AVX2]]搭載の第四世代[[Intel Core i]]プロセッサを発表。 | *2013年 6月: インテルが[[AVX2]]搭載の第四世代[[Intel Core i]]プロセッサを発表。 | ||
*2016年 6月: インテルが[[AVX-512]]搭載の[[Intel Xeon Phi]]コプロセッサを発表。 | *2016年 6月: インテルが[[AVX-512]]搭載の[[Intel Xeon Phi]]コプロセッサを発表。 | ||
| 66行目: | 64行目: | ||
* [[ベクトルプロセッサー]] | * [[ベクトルプロセッサー]] | ||
* [[Intel Image Processing Library]] | * [[Intel Image Processing Library]] | ||
[[category: CPU]] | |||
[[category: SIMD]] | |||
2025年7月11日 (金) 02:10時点における最新版
ストリーミングSIMD拡張命令(英語:Streaming SIMD Extensions、通称:SSE)とは、インテルがPentium III向けに開発したCPUのSIMD拡張命令セット、およびその拡張版の総称です。
概要[編集 | ソースを編集]
Pentium IIと激闘を繰り広げたAMDのK6-2に実装された3DNow!に対抗すべくPentium IIIに実装されたSIMD命令群です。大雑把にいえばSSEはMMXを拡張したものであり、MMXでは整数演算だけだったものが、SSEでは浮動小数点演算にも対応しました。また、SSEでは新たに8本の128ビットレジスタも追加されています。
プログラミング[編集 | ソースを編集]
MMXや3DNow!、SSEが出た当初はまともなコンパイラがなかったため、プログラマーはアセンブラを用いてこれらに対応するプログラムを組んでいました。C言語やC++で大枠を書いて、インラインアセンブラで部分的に高速化を試みるという書き方が主流でした。
後に機能強化されたSSE2やSSE3、SSSE3(Supplemental/補足的なSSE3)、SSE4などが登場していますが、この世代になるとC言語などのコンパイラも優秀になりアセンブラで書くことはほとんどなくなりました。
実情[編集 | ソースを編集]
WindowsでVisual C++が主流だった時代のソフトウェアは99.9999%が「SSE非対応」どころか「i386」をターゲットにコンパイルされていました。これらはSSEどころかi486やPentiumの機能も使われていません。ソフトウェアは「最低動作環境」となるPCのスペックを下げることで「多くの人に使ってもらおう」という最小公倍数的な考え方であったためです。
MMXが登場した当初はその話題性から「MMX対応版」「MMX非対応版」といった二種類の実行ファイルを用意したゲームなどもありましたが、3DNow!やSSEの時代になるとその話題性も薄れベンチマークソフトくらいしか対応ソフトがなくなりました。
また、ベンチマークソフトみたいに何秒間も負荷100%で砂時計カーソルを表示するような処理でもない限り大して速くはならないという事実がプログラマーたちに知れ渡り「開発コストに見合わない」という認識が広まったことで対応ソフトはどんどん減っていきました。
JITコンパイル[編集 | ソースを編集]
SSEがまともに使われだしたのはJavaなどのJITコンパイラの技術が発達し「SSEの有無」を実行環境で判別してコンパイルするようになってからです。
ただJavaでSSEを使うようなプログラムを書くかと言われると、まず書きません。
やっぱりベンチマークソフトくらいしか使われていません。
オープンソース界隈[編集 | ソースを編集]
ソースコードを落としてきて実行環境でコンパイルするスタイルのオープンソース界隈ではなんぼか使われていました。一昔前は「apacheやmysqlの性能を向上させる方法!」などとしてググるとよく出てきていました。
ただオープンソース界隈もCentOSやUbuntuが主流になり、「configure; make; make install」が廃れ、パッケージからソフトウェアを入れるのが主流になったことでやっぱりベンチマークソフトくらいしか使われていません。
ベンチマーク[編集 | ソースを編集]
2019年時点[編集 | ソースを編集]
SIMD関連のベンチマークではインテルのCore iシリーズでは非常に高性能な結果が得られます。
一方、AMDのRyzenでは微妙な結果になります。RyzenはSIMDではなくGPGPUを使う前提で、SIMD周りをバッサリ切り捨て、その余力を通常の演算性能を上げることに使っているためです。
どちらもプログラムの書き方が全く異なるため一概に「どちらが速い」とは言いにくいの実情です。プログラムがSSEに対応しているならIntel、GPGPUに対応しているならAMDの方が高速ということになります。ちなみにSSEとGPGPUに両対応している場合は一般的にGPUの方が速い傾向にあります。
歴史[編集 | ソースを編集]
- 1999年 2月: インテルがSSE搭載のPentium IIIプロセッサを発表。
- 2000年 3月: インテルがSSE搭載のCeleronプロセッサを発表。
- 2000年 11月: インテルがSSE2搭載のPentium 4プロセッサを発表。
- 2004年 2月: インテルがSSE3搭載のPentium 4プロセッサを発表。
- 2004年 6月: インテルがSSE3搭載のCeleron Dプロセッサを発表。
- 2006年 1月: インテルがSSE3搭載のIntel Core プロセッサを発表。
- 2006年 6月: インテルがSSSE3搭載のXeon 5100プロセッサを発表。
- 2006年 7月: インテルがSSSE3搭載のIntel Core 2プロセッサを発表。
- 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コプロセッサを発表。