「DirectCompute」の版間の差分

ページの作成:「'''DirectCompute'''(読み:だいれくとこんぴゅーと)とは、Windows上でGPGPUを手軽に扱うためのAPIである。大雑把にいえば[…」
 
編集の要約なし
 
1行目: 1行目:
'''DirectCompute'''(読み:だいれくとこんぴゅーと)とは、[[Windows]]上で[[GPGPU]]を手軽に扱うための[[API]]である。大雑把にいえば[[GPGPU]]で動かす[[プログラム]]を[[HLSL]]で記述できるというものである。
'''DirectCompute'''(読み:だいれくとこんぴゅーと)とは、[[Windows]]上で[[GPGPU]]を手軽に扱うための[[API]]である。
 
大雑把にいえば[[GPGPU]]で動かす[[プログラム]]を[[HLSL]]で記述できるというものである。C言語がベースのCUDAやOpenCLなどと異なり、HLSLなのでグラフィックス関係でシェーダーを触っていた人に優しい。
 
Direct3Dのコマンドリストに混ぜ込むことができるので、コンピュートシェーダーで計算した結果をレンダリングシェーダーで描画なんてことがシンプルに記述できる。


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


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


9行目: 13行目:
ただ[[インテル]]や[[NVIDIA]]といったGPUメーカーの[[DirectX11]]対応の動きが非常に遅くDirectX11対応の[[GPU]]が延々と普及しなかった。[[DirectX11]]対応は[[AMD]]は2009年と早かったが、[[NVIDIA]]は2010年、[[インテル]]に至っては2012年まで対応を見送るという状況が続いていた。
ただ[[インテル]]や[[NVIDIA]]といったGPUメーカーの[[DirectX11]]対応の動きが非常に遅くDirectX11対応の[[GPU]]が延々と普及しなかった。[[DirectX11]]対応は[[AMD]]は2009年と早かったが、[[NVIDIA]]は2010年、[[インテル]]に至っては2012年まで対応を見送るという状況が続いていた。
各社のDirectX11に対応したGPUをまとめると以下のような感じである。
各社のDirectX11に対応したGPUをまとめると以下のような感じである。
* [[Radeon HD 5000系]]以上
 
* [[GeForce 400系]]以上
*[[Radeon HD 5000系]]以上
* [[Intel HD Graphics 4000系]]以上([[Ivy Bridge]]以降)
*[[GeForce 400系]]以上
*[[Intel HD Graphics 4000系]]以上([[Ivy Bridge]]以降)


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


== 従来のシェーダーとの違い ==
==従来のシェーダーとの違い==
従来型の[[バーテックスシェーダー]]や[[ピクセルシェーダー]]から大きく変わったのは以下の4点である。
従来型の[[バーテックスシェーダー]]や[[ピクセルシェーダー]]から大きく変わったのは以下の4点である。
* 64ビット浮動小数点数演算が追加
 
* データ構造という概念が追加
*64ビット浮動小数点数演算が追加
* 共有メモリという概念が追加
*データ構造という概念が追加
* 排他制御命令と同期制御命令が追加
*共有メモリという概念が追加
*排他制御命令と同期制御命令が追加


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


== コンパイル ==
==コンパイル==
事前コンパイル
事前コンパイル
* fxc.exe
 
*fxc.exe


実行時コンパイル
実行時コンパイル
* D3DX11CompileFromFile関数


== 使い方 ==
*D3DX11CompileFromFile関数
 
==使い方==
そのうち書く。
そのうち書く。


== 関連項目 ==
==関連項目==
* [[CUDA]]
 
* [[OpenCL]]
*[[CUDA]]
* [[DirectCompute]]
*[[OpenCL]]
* [[RenderScript]]
*[[DirectCompute]]
* [[Metal]]
*[[RenderScript]]
*[[Metal]]


[[category: GPGPU]]
[[category: GPGPU]]