このページの本文へ

前へ 1 2 次へ

塩田紳二のWindows 8 IN-N-OUT 第21回

SIMD演算対応でWindows 8アプリの処理速度があがる?

2012年10月05日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

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ストアアプリでは積極的に使われるようになるかもしれず、そうなればユーザーにとっても処理速度の向上といった恩恵をもたらすだろう。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン