DirectCompute
DirectCompute(読み:だいれくとこんぴゅーと)とは、Windows上でGPGPUを手軽に扱うためのAPIである。大雑把にいえばGPGPUで動かすプログラムをHLSLで記述できるというものである。
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をまとめると以下のような感じである。
従来のシェーダーとの違い
従来型のバーテックスシェーダーやピクセルシェーダーから大きく変わったのは以下の4点である。
- 64ビット浮動小数点数演算が追加
- データ構造という概念が追加
- 共有メモリという概念が追加
- 排他制御命令と同期制御命令が追加
最大の変更は「共有メモリ」という概念が登場した点である。
従来であればシェーダーユニットは完全に孤立したものであり演算開始から演算終了まで外界とは一切の連絡を取らないという仕様であった。これはその手段を奪うことで余計なことを考えず高速化が実現できるという設計思想である。
一方、コンピュートシェーダーでは共有メモリを介してシェーダーユニット間でデータのやり取りができるようになった。つまりシェーダーユニットをいわゆるスレッドのように扱えるようになったのである。マルチスレッドといえば排他制御と同期制御なのでそれ用の命令も追加された。大雑把にいえば「ハードウェアスレッド」の誕生である。
コンパイル
事前コンパイル
- fxc.exe
実行時コンパイル
- D3DX11CompileFromFile関数
使い方
そのうち書く。