DirectCompute

提供: MonoBook
ナビゲーションに移動 検索に移動

DirectCompute(読み:だいれくとこんぴゅーと)とは、Windows上でGPGPUを手軽に扱うためのAPIである。

大雑把にいえばGPGPUで動かすプログラムHLSLで記述できるというものである。C言語がベースのCUDAやOpenCLなどと異なり、HLSLなのでグラフィックス関係でシェーダーを触っていた人に優しい。

Direct3Dのコマンドリストに混ぜ込むことができるので、コンピュートシェーダーで計算した結果をレンダリングシェーダーで描画なんてことがシンプルに記述できる。

Windows10に追加されたDirectX RaytracingもほぼDirectComputeの拡張のようなものとなっている。

対応[編集 | ソースを編集]

DirectComputeは2008年にWindows7およびDirectX11で登場したものである。シェーダーモデルで言えばSM4.1とSM5.0である。なおSM4.1では倍精度浮動小数点数が使えないという制限がある。

Windows7は空前の大ヒットで爆発的に普及した。 ただインテルNVIDIAといったGPUメーカーのDirectX11対応の動きが非常に遅くDirectX11対応のGPUが延々と普及しなかった。DirectX11対応はAMDは2009年と早かったが、NVIDIAは2010年、インテルに至っては2012年まで対応を見送るという状況が続いていた。 各社のDirectX11に対応したGPUをまとめると以下のような感じである。

そのためマイクロソフトDirectX10にもDirectComputeを追加するという対応をとることとなった。

従来のシェーダーとの違い[編集 | ソースを編集]

従来型のバーテックスシェーダーピクセルシェーダーから大きく変わったのは以下の4点である。

  • 64ビット浮動小数点数演算が追加
  • データ構造という概念が追加
  • 共有メモリという概念が追加
  • 排他制御命令と同期制御命令が追加

最大の変更は「共有メモリ」という概念が登場した点である。

従来であればシェーダーユニットは完全に孤立したものであり演算開始から演算終了まで外界とは一切の連絡を取らないという仕様であった。これはその手段を奪うことで余計なことを考えず高速化が実現できるという設計思想である。

一方、コンピュートシェーダーでは共有メモリを介してシェーダーユニット間でデータのやり取りができるようになった。つまりシェーダーユニットをいわゆるスレッドのように扱えるようになったのである。マルチスレッドといえば排他制御同期制御なのでそれ用の命令も追加された。大雑把にいえば「ハードウェアスレッド」の誕生である。

コンパイル[編集 | ソースを編集]

事前コンパイル

  • fxc.exe

実行時コンパイル

  • D3DX11CompileFromFile関数

使い方[編集 | ソースを編集]

そのうち書く。

関連項目[編集 | ソースを編集]