DirectCompute
Microsoft DirectCompute is an application programming interface (API) that supports running compute kernels on general-purpose computing on graphics processing units on Microsoft's Windows Vista, Windows 7 and later versions. DirectCompute is part of the Microsoft DirectX collection of APIs, and was initially released with the DirectX 11 API but runs on graphics processing units that use either DirectX 10 or DirectX 11.[1] The DirectCompute architecture shares a range of computational interfaces with its competitors: OpenCL from Khronos Group, compute shaders in OpenGL, and CUDA from NVIDIA.
The DirectCompute API brings enhanced multi-threading capabilities to leverage the emerging advanced compute resources.[2] The API is designed for non-graphical applications to access and use GPU resources.[3]
Compute Pipeline
The Compute pipeline is a type of graphics pipeline used for dispatching and executing compute shaders. Compute pipelines are run through compute command lists, which are restricted to recording only copy and compute commands. Compute shaders are used for general-purpose algorithms and computations, and are run through parallel processors on the GPU. This parallel execution model done by the compute pipeline is organized into a dispatch, thread groups, and threads. The dispatch is a 3-dimensional container of thread groups, and a thread group is a 3-dimensional container of threads.[4] Thread groups are ran on the GPU in waves.[5]
This pipeline allows for workloads to be easily sent to the GPU without the need for restructuring all of a program's code.[6]
A typical compute pipeline contains a read-only shader resource view as an input, constant buffer views for additional resource constants, and an unordered access view for an output. It is important to set the resource states of these resources in order to improve performance.[7]
Example code
The initialization of the compute pipeline involves creating the root signature, reading the compute shader, and creating the pipeline state object.
// Set the root signature CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC root_signature_desc{ 1, root_parameters, 0, nullptr }; // Serialize the root signature Microsoft::WRL::ComPtr<ID3DBlob> root_signature_blob{nullptr}; Microsoft::WRL::ComPtr<ID3DBlob> error_blob{nullptr}; D3DX12SerializeVersionedRootSignature( &root_signature_desc, D3D_ROOT_SIGNATURE_VERSION_1_1, root_signature_blob.GetAddressOf(), error_blob.GetAddressOf() ); // Create the root signature Microsoft::WRL::ComPtr<ID3D12RootSignature> root_signature{nullptr}; device->CreateRootSignature( 0, root_signature_blob->GetBufferPointer(), root_signature_blob->GetBufferSize(), IID_PPV_ARGS(root_signature.GetAddressOf()) ); // Read the compute shader Windows::WRL::ComPtr<ID3DBlob> compute_shader{nullptr}; D3DReadFileToBlob(L"C:/path/to/compute/shader", compute_shader.GetAddressOf()); // Create the compute pipeline state object (PSO) struct PipelineStateStream { CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE root_signature; CD3DX12_PIPELINE_STATE_STREAM_CS compute_shader; } pipeline_state_stream; // Setting the root signature and the compute shader to the 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 pipeline_state_stream_desc{ sizeof(PipelineStateStream), &pipeline_state_stream }; // Create pipeline state device->CreatePipelineState( &pipeline_state_stream_desc, IID_PPV_ARGS(pipeline_state_stream.GetAddressOf()) );
After the initialization of the compute pipeline, every frame, the pipeline state must be set, the compute root signature must be set, and the dispatch is run.
command_list->SetPipelineState(pipeline_state); command_list->SetComputeRootSignature(root_signature); command_list->Dispatch(groups_x, groups_y, groups_z);
See also
- OpenCL
- CUDA
- C++ AMP
- Graphics Processing Unit
Further reading
- Compute Shaders in D3D12
References
- ^ "DirectCompute". developer.nvidia.com. NVIDIA. 28 September 2010. Retrieved 22 March 2015.
- ^ James, Dave; Chiapetta, Marco. "The Directx Evolution" (PDF). Maximum PC. 19 (8): 52–59. ISSN 1522-4279. Retrieved 2024-08-07 – via MasterFILE Complete.
- ^ Mohr, Neil. "Beyond Graphics with Gpgpus: Maximum PC". Maximum PC: 46–51. ISSN 1522-4279 – via MasterFILE Complete.
- ^ Young, Eric (2010-09-20). "DirectCompute - Optimizations and Best Practices" (PDF). Retrieved 2024-02-14.
- ^ Lively, David; Gruen, Holger (2017-03-03). "Wave Programming in D3D12 and Vulkan" (PDF). gpuopen. Retrieved 2024-02-15.
- ^ Graham-Smith, Darien (September 2021). "The Return of GPU Computing". PCPro (323): 44–47. ISSN 1355-4603. Retrieved 2024-06-10 – via MasterFILE Complete.
- ^ Kramer, Lou (2022-07-22). "Compute Shaders" (PDF). gpuopen. Retrieved 2024-03-11.
External links
- Compute Shader Overview
- DirectCompute Lecture Series
- Advanced DirectX 11: DirectCompute by Example
- GTC On-Demand
- v
- t
- e
- APIs
- Architecture
- Booting process
- Games
tools
- App Installer
- Command Prompt
- Control Panel
- Device Manager
- Disk Cleanup
- Drive Optimizer
- Driver Verifier
- DirectX Diagnostic Tool
- Event Viewer
- IExpress
- Management Console
- Netsh
- Performance Monitor
- Recovery Console
- Resource Monitor
- Settings
- Sysprep
- System Configuration
- System File Checker
- System Information
- System Policy Editor
- System Restore
- Task Manager
- Windows Error Reporting
- Windows Ink
- Windows Installer
- PowerShell
- Windows Update
- WinRE
- WMI
- 3D Viewer
- Calculator
- Calendar
- Camera
- Character Map
- Clipchamp
- Clock
- Cortana
- Edge
- Fax and Scan
- Feedback Hub
- Get Help
- Magnifier
- Maps
- Messaging
- Media Player
- 2022
- Movies & TV
- Mobility Center
- Money
- Narrator
- Notepad
- OneDrive
- OneNote
- Paint
- Paint 3D
- People
- Phone Link
- Photos
- Quick Assist
- Remote Desktop Connection
- Snipping Tool
- Speech Recognition
- Skype
- Sports
- Start
- Sticky Notes
- Store
- Tips
- Voice Recorder
- Weather
- WordPad
- Xbox
- Active Directory
- Domains
- DNS
- Group Policy
- Roaming user profiles
- Folder redirection
- Distributed Transaction Coordinator
- MSMQ
- Windows Media Services
- Active DRM Services
- IIS
- WSUS
- SharePoint
- Network Access Protection
- PWS
- DFS Replication
- Print Services for UNIX
- Remote Desktop Services
- Remote Differential Compression
- Remote Installation Services
- Windows Deployment Services
- System Resource Manager
- Hyper-V
- Server Core
- Boot Manager
- Console
- CSRSS
- Desktop Window Manager
- Portable Executable
- Enhanced Write Filter
- Graphics Device Interface
- Hardware Abstraction Layer
- I/O request packet
- Imaging Format
- Kernel Transaction Manager
- Library files
- Logical Disk Manager
- LSASS
- MinWin
- NTLDR
- Ntoskrnl.exe
- Object Manager
- Open XML Paper Specification
- Registry
- Resource Protection
- Security Account Manager
- Server Message Block
- Shadow Copy
- SMSS
- System Idle Process
- USER
- WHEA
- Winlogon
- WinUSB
- Solitaire Collection
- Surf
Microsoft Store
- DVD Player
- File Manager
- Hover!
- Mahjong
- Minesweeper
Category
List
![]() | This article related to Microsoft is a stub. You can help Wikipedia by expanding it. |
- v
- t
- e