Mozilla Flux

Mozilla関係の情報に特化したブログです。

Firefox 49からCPUのSSE2命令サポートが必須化

2016年9月13日(米国時間)にリリース予定のFirefox 49以降、SSE2命令をサポートしたCPU上でのみ動作するよう変更が加えられる(Bug 1271755)。これはWindowsに限らず、デスクトップ版Firefoxすべてに共通する措置だ。サポートされていないマシンには、Firefoxをインストールできなくなる(Bug 1271759)ほか、アップデートも提供されなくなる

といっても、実際に影響を受けるユーザーはごくわずかだろう。Intelが開発したストリーミングSIMD拡張命令(Streaming SIMD Extensions:SSE)の第二世代がSSE2であり、Pentium 4で初めて実装され、AMDもOpteron/Athlon 64/Turion 64でこれをサポートしている。なのでIntel製CPUを積んだ2002年製以降のマシンか、AMD製CPUを積んだ2005年製以降のマシンであれば、ほぼ確実にSSE2命令に対応しているはずだ。ちなみに、Googleは2014年5月にリリースしたChrome 35で既にSSE2命令を必須化している(Issue 348761)。*1

今回の措置の発端は、Windows版Firefoxのビルド環境をVisual Studio 2015に更新したことだった。Firefox Nightly 48で当初Visual Studio 2015 Update 1(Bug 1186060)へ、次いでUpdate 2(Bug 1259782)へと切り替えたのだが、意図せずSSE命令を含むプログラムが生成される不具合が生じたため、Microsoftに修正を依頼するか、SSE命令のサポートをシステム要件とするかで議論になった。注意してもらいたいのは、ここでの議論の対象はSSE2ではなくSSEだ。現行のFirefox 46を含めて第一世代SSEすら必須になっていなかったので、まずはSSE命令のサポートが話題に上ったのだ。

Microsoftに対しては連絡がとられたらしく、Visual Studio 2015 Update 3で不具合が修正される見通しであることが後に判明したものの、Mozillaの開発者たちは、古い環境のサポートを切るデメリットよりも、SSE2命令を用いた最適化によって得られるメリットのほうが大きいと判断した。2016年の現在から振り返れば、SSEとSSE2の間に線を引く意味も乏しかったのだろう。結果、Windows版Firefox 49はVisual Studio 2015 Update 2でビルドされ、SSE2最適化が施されることになった(Bug 1271794)。他方、準備期間が必要なのでFirefox 48はビルド環境の更新を見送り、Visual Studio 2013が用いられる(Bug 1270664)。

気になるのはSSE2最適化の効果のほどだが、現在でもIonMonkey/OdinMonkeyというJavaScript/asm.jsコンパイラがSSE2命令を使えるときは使っていることからすると、大きな違いは出ないとみられる。重いWebアプリならば多少は効果を実感できるかもしれない。

*1:なお、Windows向け64bit版FirefoxはもともとSSE2命令が必須化されているため影響を受けない。