x86系ではSSE2までをサポートするDirectXMath
ややこしい話だが、x86/x64用として動作するDirectXにも、似たような数学処理ライブラリがあった。これは「Direct3D Extension」(D3DX)に含まれており、俗に「D3DX Math」などと呼ばれていた。D3DX MathとXNA Mathは似たような機能を持つが、D3DX Mathはx86/x64に最適化されているという違いがある。
Windows 8に搭載されるDirectX 11.1からは、D3DX Mathは廃止され、XNA MathをベースにしたDirectXMathに移行する。DirectXMathはx86/x64の場合、「SSE2」を標準としている。SSE2はPentium 4から搭載されたSIMD演算で、インテルはその後も「SSE3」や「SSSE3」「SSE4」「AVX」といった強化を順次行なっている。
しかしWindows 8の起動要件ではPentium 4世代のCPUでも動作する必要があることを考えると、SSE2が最低条件となる。またAMDの同世代のCPUでは、必ずしもインテルとSIMD系の強化が同期しているわけではないし、「SSE4a」のような独自実装も存在する。SSE2あたりが最低条件というのは妥当な考えだろう。
JPEG表示がSIMD対応で高速化?
SIMD演算をWindows 8内で積極的に使ったケースとしては、「Windows Imaging Component」(WIC)による画像データの圧縮/展開がある。WICはグラフィックサブシステム「Windows Presentation Foundation」(WPF)の画像処理を分離させたもので、Windows XP向けにも配布されているモジュールだ。これを使うことで、アプリケーションは静止画のエンコード/デコードが簡単にでき、複数のファイル形式に対応したルーチンを個別に用意しないですむようになる。
Windows 8では、画像のエンコード/デコードにSIMD演算が積極的に使われるようになった。例えば、JPEGのような圧縮画像ファイルのデコードなどだ。こうした理由でWindows 8では、JPEG画像の表示が高速化しているという。多数の画像を次々と表示していくテストアプリケーションによる測定では、表示時間が40%ほど短縮され、1.7倍程度に高速化されているという。こうした高速化の恩恵は、アプリケーションがWICを利用することで得られる。先にWICに対応しておけば、アプリケーションに手を入れなくてもWindows 8では表示が高速化されることになる。
開発ツールでも対応は必要
SIMD演算への対応が必要なのは、Windows本体だけではない。アプリケーション開発に利用するコンパイラなど、開発ツールの対応も必要になる。Windows自体もマイクロソフトのコンパイラで作られるため、Windows 8でSIMDを積極的に利用するには、SIMDに対応したコンパイラなどが必要になるからだ。
プログラミング経験のある人なら、「SIMD演算程度なら、インラインアセンブラ※2を使ったり、アセンブラで書いたルーチンを呼び出せばいい。新規命令に開発ツールが対応しなくても、アプリケーションは作れる」と思うかもしれない。しかしマイクロソフトの「Visual C/C++」では、64bit版からインラインアセンブラ命令がなくなり、従来そのままのやり方は通用しなくなった。理由はセキュリティーのため。アセンブラではなんでも自由に記述できてしまうため、セキュリティホールになりやすいからだ。
※2 Cなどのプログラムプログラムにアセンブラ命令を埋め込む機能。
Windowsの主力開発ツール「Visual Studio 2010」はすでに、Sandy Bridgeから搭載された「AVX」命令にも対応しており、オプションを付けることでAVX命令を含んだプログラムを生成できる。AVXにはSSE2を置き換えることを想定した同等の命令が用意されているため、DirectXMathを使うプログラムでも、AVXを使うよう指示するオプションを使うことで、AVXを含むプログラムが生成される。
ただしこうしたやり方で作ったプログラムは、当然だがAVXに対応するSandy Bridge以降のCPUでしか動作できない。そのためプログラムは起動時に、CPUのSIMD対応レベルなどを調べて必要なプログラムを作り分けるといった、かなり面倒な処理が必要だ。SIMD対応アプリがあまり増えないのはこうした理由のためだろう。前述のJPEGデコードのような明確なアドバンテージがなければ、多少遅くてもSIMD演算など使わない方が楽、ということもあるからだ。
DirectXMathはプログラム開発の手間を減らしてくれ、アプリケーションでは、CPUアーキテクチャーなどをほとんど気にしなくて済む。また、(Windowsストアアプリに限られるが)Windows RTでも動作できるアプリケーションもそのまま作れるといったメリットもある。Windowsストアアプリでは積極的に使われるようになるかもしれず、そうなればユーザーにとっても処理速度の向上といった恩恵をもたらすだろう。
この連載の記事
-
第34回
PC
Windows 8の狙いは、UIの変化よりもAPIの変化が本質 -
第33回
PC
Windows 8が動作しなくなった? 新しくなった修復機能 -
第32回
PC
Windows 8でIMEに求められる新しい要素とはなにか? -
第31回
PC
Windows 8の無線LANをコマンドラインで細かく制御 -
第30回
PC
Windows 8をマウスで使いやすくするレジストリの小技 -
第29回
PC
周辺機器・アプリがWindows 8/RTで動くか確認する方法 -
第28回
PC
Windows 8のキーボードショートカットを全公開 -
第27回
PC
Windows 8が使いにくい? マウスを変えると印象も変わる -
第26回
PC
実はNFCに対応しているWindows 8 ただしアプリは不足 -
第25回
PC
実は扱いがまったく異なるWindows 8でのタッチパネル -
第24回
PC
Surfaceから見えるWindows RTの実像と、将来PCへの影響 - この連載の一覧へ