Microsoft DirectComputeは、MicrosoftのWindows Vista、Windows 7以降のバージョン上のグラフィックス処理装置上の汎用コンピューティングで コンピューティングカーネルを実行することをサポートするアプリケーションプログラミングインターフェイス(API)です。DirectComputeはMicrosoft DirectX APIコレクションの一部であり、最初はDirectX 11 APIとともにリリースされましたが、 DirectX 10またはDirectX 11を使用するグラフィックス処理装置で実行されます。[ 1 ] DirectComputeアーキテクチャは、 Khronos GroupのOpenCL、OpenGLのコンピューティングシェーダ、 NVIDIAのCUDAなど、競合他社とさまざまなコンピューティングインターフェイスを共有しています。
DirectCompute APIは、強化されたマルチスレッド機能を提供し、新興の高度なコンピューティングリソースを活用します。[ 2 ]このAPIは、非グラフィカルアプリケーションがGPUリソースにアクセスして使用できるように設計されています。[ 3 ]
コンピューティングパイプライン
計算パイプラインは、計算シェーダーのディスパッチと実行に使用されるグラフィックスパイプラインの一種です。計算パイプラインは、コピーコマンドと計算コマンドのみの記録に制限された計算コマンドリストを介して実行されます。計算シェーダーは汎用アルゴリズムと計算に使用され、GPU上の並列プロセッサを介して実行されます。計算パイプラインによって実行されるこの並列実行モデルは、ディスパッチ、スレッドグループ、およびスレッドで構成されています。ディスパッチはスレッドグループの3次元コンテナであり、スレッドグループはスレッドの3次元コンテナです。[ 4 ]スレッドグループはGPU上で波状に実行されます。[ 5 ]
このパイプラインにより、プログラムコード全体を再構築することなく、ワークロードをGPUに簡単に送信できるようになります。[ 6 ]
典型的な計算パイプラインには、入力として読み取り専用のシェーダーリソースビュー、追加のリソース定数用の定数バッファビュー、そして出力用の順序なしアクセスビューが含まれます。パフォーマンスを向上させるためには、これらのリソースの状態を設定することが重要です。[ 7 ]
サンプルコード
コンピューティング パイプラインの初期化には、ルート署名の作成、コンピューティング シェーダーの読み取り、パイプライン状態オブジェクトの作成が含まれます。
// ルート署名を設定するCD3DX12_VERSIONED_ROOT_SIGNATURE_DESCルート署名の説明{1 、ルートパラメータ、0 、ヌルポインタ};// ルート署名をシリアル化するMicrosoft :: WRL :: ComPtr < ID3DBlob > root_signature_blob { nullptr };Microsoft :: WRL :: ComPtr < ID3DBlob > error_blob { nullptr };D3DX12SerializeVersionedRootSignature (&ルート署名の説明、D3D_ROOT_SIGNATURE_VERSION_1_1 、root_signature_blob . GetAddressOf ()、error_blob . GetAddressOf ());// ルート署名を作成するMicrosoft :: WRL :: ComPtr < ID3D12RootSignature >ルート署名{ nullptr };デバイス-> CreateRootSignature (0 、root_signature_blob -> GetBufferPointer ()、root_signature_blob -> GetBufferSize ()、IID_PPV_ARGS ( root_signature . GetAddressOf ()));// コンピュートシェーダを読み込むWindows :: WRL :: ComPtr < ID3DBlob > compute_shader { nullptr };D3DReadFileToBlob ( L "C:/path/to/compute/shader" , compute_shader . GetAddressOf ());// 計算パイプライン状態オブジェクト (PSO) を作成する構造体パイプライン状態ストリーム{CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATUREルート署名;CD3DX12_PIPELINE_STATE_STREAM_CSコンピュートシェーダー;}パイプライン状態ストリーム;// ルート署名とコンピュートシェーダーを PSO に設定するpipeline_state_stream.root_signature = root_signature.Get ( ) ;pipeline_state_stream.compute_shader = CD3DX12_SHADER_BYTECODE { compute_shader.Get ( ) } ;D3D12_PIPELINE_STATE_STREAM_DESCパイプライン状態ストリームの説明 {sizeof ( PipelineStateStream )、およびpipeline_state_stream};// パイプライン状態を作成するデバイス-> CreatePipelineState (&パイプライン状態ストリームの説明、IID_PPV_ARGS ( pipeline_state_stream . GetAddressOf ()));コンピューティング パイプラインの初期化後、フレームごとにパイプラインの状態を設定し、コンピューティング ルート署名を設定し、ディスパッチを実行する必要があります。
command_list -> SetPipelineState ( pipeline_state );command_list -> SetComputeRootSignature ( root_signature );command_list -> Dispatch ( groups_x 、groups_y 、groups_z );参照
さらに読む
参考文献
- ^ "DirectCompute" . developer.nvidia.com . NVIDIA . 2010年9月28日. 2015年3月22日閲覧。
- ^ James, Dave; Chiapetta, Marco. 「Directxの進化」(PDF) . Maximum PC . 19 (8): 52– 59. ISSN 1522-4279 . 2024年8月7日閲覧– MasterFILE Complete経由。
- ^ Mohr, Neil. 「Beyond Graphics with Gpgpus: Maximum PC」 . Maximum PC : 46–51 . ISSN 1522-4279 – MasterFILE Completeより。
- ^ Young, Eric (2010-09-20). 「DirectCompute - 最適化とベストプラクティス」(PDF) . 2024年2月14日閲覧。
- ^ Lively, David; Gruen, Holger (2017年3月3日). 「D3D12とVulkanにおけるWaveプログラミング」(PDF) . gpuopen . 2024年2月15日閲覧。
- ^ Graham-Smith, Darien (2021年9月). 「GPUコンピューティングの復活」 . PCPro (323): 44– 47. ISSN 1355-4603 . 2024年6月10日閲覧– MasterFILE Complete経由.
- ^ Kramer, Lou (2022年7月22日). 「コンピュートシェーダー」(PDF) . gpuopen . 2024年3月11日閲覧。