DirectCompute

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

Microsoft DirectCompute (マイクロソフト・ダイレクトコンピュート) は、Windows Vista(SP2 Platform Update)、Windows 7、およびWindows 8.x OS上で"General-Purpose computing on Graphics Processing Unit"(GPGPU) をサポートするApplication Programming Interface(API、アプリケーション・プログラミング・インターフェイス)の1つである。 DirectComputeはWindows用マルチメディアAPIの集まりであるMicrosoft DirectX 11の一部として、当初はDirectX 11(Direct3D 11)フル対応GPU向けにリリースされる予定だったが、その後DirectX 10.xとDirectX 11に対応するGPU上で実行できるように仕様変更された(cs_5_0の他に、ダウンレベルのcs_4_0、cs_4_1のサポートが追加された)[1][2][3]。DirectComputeのアーキテクチャは、クロノス・グループ(Khronos Group)のOpen Computing Language (OpenCL) やNVIDIAのCompute Unified Device Architecture (CUDA) といった競合間も含めて、コンピュータのインターフェイスを共有する。

コンピュートシェーダー[編集]

アプリケーションでDirectComputeを使用する場合、Direct3D 11 APIを通してGPUデバイスを利用することになる。 プログラムの記述にはHLSLと呼ばれるシェーダー言語を使用するが、これはDirect3Dの頂点シェーダーやピクセルシェーダーといったグラフィックスパイプライン記述用に使われている言語でもある。GPGPU用のシェーダープログラムはコンピュートシェーダーと呼ばれる。 HLSLのコンピュートシェーダーはCUDAやOpenCLのカーネル関数(並列実行単位)の記述に非常によく似ている。 Direct3Dの競合APIであるOpenGLでは、バージョン4.3でDirect3D同様のコンピュートシェーダーを導入した(OpenGLではコンピュートシェーダーの記述にGLSLを使用する)。 コンピュートシェーダーがCUDAやOpenCLと比較して優れている点として、Direct3D(OpenGL)リアルタイムグラフィックスパイプラインとの連携がしやすい(シミュレーションの実行と可視化に向いている)、Direct3D/HLSL(OpenGL/GLSL)をすでに利用している場合は修得が容易である、などが挙げられる。

ダウンレベルハードウェアでの実行[編集]

前述のようにDirectX 10.x世代のGPUであってもDirectX 11 APIを使ってDirectComputeを実行することができるが、DirectX 11フル対応のGPUと比較して実行可能条件にいくつかの制約があるため、使用する際は注意が必要となる[1]

C++ AMP[編集]

DirectComputeおよびコンピュートシェーダーはDirect3D APIを直接操作する必要があるため、OpenMPを利用した一般的なCPU向けのC++並列プログラミングなどと比較してハードルが高い。マイクロソフトはDirectComputeをバックエンドとし、より抽象化された純粋C++プログラミングに近いGPU並列プログラミングモデルを提供するAPIおよび言語拡張として、C++ AMPを提供している。

C++ AMPのライブラリおよびC++ AMPに対応したVisual C++コンパイラが付属しているのはVisual Studio 2012以降だが、Visual Studio 2013ではコンピュートシェーダー以外のシェーダーステージとの相互運用やテクスチャフィルタリング(サンプラー)の機能が強化されている[4]

脚注[編集]

  1. ^ ASCII.jp:GPGPUをWindowsでサポートする「DirectCompute」 (2/2)|あなたの知らないWindows
  2. ^ 「CUDAとは?」 - NVIDIA社 (2011年1月3日確認)
  3. ^ Nigel Dessau, senior VP and CMO at AMD, about DirectCompute - AMD社 (英語、2011年1月3日DirectComputeの記述は確認できず)
  4. ^ グラフィックス (C++ AMP)

関連項目[編集]

外部リンク[編集]