Panoramica di Compute Shader

Uno shader di calcolo è una fase dello shader programmabile che espande Microsoft Direct3D 11 oltre la programmazione grafica. La tecnologia compute shader è nota anche come tecnologia DirectCompute.

Analogamente ad altri shader programmabili (vertice e shader geometry), un shader di calcolo è progettato e implementato con HLSL , ma questa è solo la posizione in cui termina la somiglianza. Un compute shader offre un calcolo generico ad alta velocità e sfrutta il numero elevato di processori paralleli nell'unità di elaborazione grafica (GPU). Il compute shader offre funzionalità di condivisione della memoria e sincronizzazione thread per consentire metodi di programmazione paralleli più efficaci. Si chiama il metodo ID3D11DeviceContext::D ispatch o ID3D11DeviceContext::D ispatchIndirect per eseguire comandi in uno shader di calcolo. Un shader di calcolo può essere eseguito in molti thread in parallelo.

Uso di Compute Shader in Hardware Direct3D 10.x

Un shader di calcolo in Microsoft Direct3D 10 è noto anche come DirectCompute 4.x.

Se si usa l'API Direct3D 11 e i driver aggiornati, il livello di funzionalità 10 e 10.1 Direct3D hardware può supportare facoltativamente una forma limitata di DirectCompute che usa i profili di cs_4_0 e di cs_4_1. Quando si usa DirectCompute in questo hardware, tenere presenti le limitazioni seguenti:

  • Il numero massimo di thread è limitato a D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP (768) per gruppo.
  • La dimensione X e Y di numthreads è limitata a D3D11_CS_4_X_THREAD_GROUP_MAX_X (768) e D3D11_CS_4_X_THREAD_GROUP_MAX_Y (768).
  • La dimensione Z di numthreads è limitata a 1.
  • La dimensione Z della spedizione è limitata a D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION (1).
  • È possibile associare una sola visualizzazione di accesso non ordinata al shader (D3D11_CS_4_X_UAV_REGISTER_COUNT è 1).
  • Solo RWStructuredBuffers e RWByteAddressBuffers sono disponibili come viste di accesso non ordinate.
  • Un thread può accedere solo alla propria area in memoria condivisi da gruppi per la scrittura, anche se può leggere da qualsiasi posizione.
  • SV_GroupIndex o SV_GroupThreadID devono essere usati durante l'accesso alla memoria con condivisione dei gruppi per la scrittura.
  • La memoria con condivisione dei gruppi è limitata a 16 KB per gruppo.
  • Un singolo thread è limitato a un'area di 256 byte di memoria di gruppi condivisi per la scrittura.
  • Non sono disponibili istruzioni atomiche.
  • Non sono disponibili valori di precisione doppia.

Uso di Compute Shader in Hardware Direct3D 11.x

Un shader di calcolo in Direct3D 11 è noto anche come DirectCompute 5.0.

Quando si usa DirectCompute con profili cs_5_0, tenere presenti gli elementi seguenti:

  • Il numero massimo di thread è limitato a D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP (1024) per gruppo.
  • La dimensione X e Y di numthreads è limitata a D3D11_CS_THREAD_GROUP_MAX_X (1024) e D3D11_CS_THREAD_GROUP_MAX_Y (1024).
  • La dimensione Z di numthreads è limitata a D3D11_CS_THREAD_GROUP_MAX_Z (64).
  • La dimensione massima di invio è limitata a D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).
  • Il numero massimo di visualizzazioni di accesso non ordinate che possono essere associate a uno shader è D3D11_PS_CS_UAV_REGISTER_COUNT (8).
  • Supporta le visualizzazioni RWStructuredBuffers, RWByteAddressBuffers e le viste di accesso non ordinate (RWTexture1D, RWTexture2D, RWTexture3D e così via).
  • Sono disponibili istruzioni atomiche.
  • Il supporto a precisione doppia potrebbe essere disponibile. Per informazioni su come determinare se la precisione doppia è disponibile, vedere D3D11_FEATURE_DOUBLES.

Contenuto della sezione

Argomento Descrizione
Nuovi tipi di risorse
Sono stati aggiunti diversi nuovi tipi di risorse in Direct3D 11.
Accesso alle risorse
Esistono diversi modi per accedere alle risorse.
Funzioni atomica
Per accedere a un nuovo tipo di risorsa o memoria condivisa, usare una funzione intrinseca interlocked. Le funzioni interlocked sono garantite per funzionare in modo atomico. È quindi garantito che si verifichino nell'ordine programmato. Questa sezione elenca le funzioni atomice.

Pipeline grafica

Procedura: Creare uno shader di calcolo