sincronizzazione (sm5 - asm)
Barriera di sincronizzazione o memoria del gruppo di thread.
sync[_uglobal|_ugroup][_g][_t] |
---|
Commenti
La sincronizzazione include opzioni _uglobal, _ugroup, _g e _t.
Nel pixel shader è consentito solo sync_uglobal .
Nell'shader di calcolo è necessario specificare _uglobal o _ugroup*) e/o _g. _t è facoltativo.
_uglobal
Recinzione di memoria U# globale (UAV).
Tutte le letture/scritture di memoria u# precedenti da questo thread nell'ordine di programma vengono rese visibili a tutti i thread sull'intera GPU prima di qualsiasi accesso di memoria u# successivo da questo thread. L'intera parte GPU della definizione viene sostituita da un ambito minore di globale in un caso, descritto di seguito.
Ciò si applica a tutte le memoria UAV associate alla fase dello shader corrente.
_uglobal è disponibile nello shader di calcolo o nel pixel shader.
Per qualsiasi UAV associato che non è stato dichiarato dallo shader come coerente a livello globale, la recinzione di memoria u# _uglobal ha visibilità solo all'interno del thread-group dello shader di calcolo corrente per tale UAV, come se sia _ugroup anziché _uglobal. Questo problema si applica solo allo shader di calcolo, poiché lo shader pixel deve dichiarare tutti gli UAV come coerenti a livello globale.
_ugroup
Recinto di memoria UAV (Thread group scope u#).
Tutte le letture o le scritture di memoria u# precedenti da questo thread nell'ordine di programma vengono rese visibili a tutti i thread del gruppo di thread prima di qualsiasi accesso di memoria u# successivo da questo thread.
Ciò si applica a tutte le memoria UAV associate alla fase dello shader corrente.
_ugroup è disponibile solo nell'shader di calcolo.
Se _ugroup viene esposto, per alcune implementazioni. Il vantaggio di specificare _ugroup anziché _uglobal è che l'operazione di sincronizzazione può completare più rapidamente.
Altre implementazioni non distingueno _ugroup da _uglobal, quindi entrambe le operazioni sono equivalenti e si comportano come _uglobal. Le applicazioni possono specificare la loro finalità richiedendo l'ambito di sincronizzazione più stretto necessario.
Anche se un determinato UAV viene dichiarato come coerente a livello globale, un'operazione di sincronizzazione _ugroup funzionerà in modo più efficiente su tale UAV se una barriera globale non è necessaria.
_g
recinzione g# (memoria condivisa del gruppo di thread).
Tutte le letture o le scritture di memoria g# precedenti da questo thread nell'ordine di programma vengono rese visibili a tutti i thread del gruppo di thread prima di qualsiasi accesso alla memoria g# successiva da questo thread.
Ciò si applica a tutta la memoria condivisa g# del gruppo di thread corrente.
_g è disponibile solo nell'shader di calcolo.
_t
Sincronizzazione del gruppo di thread. Tutti i thread all'interno di un singolo gruppo di thread (quelli che possono condividere l'accesso a un set comune di spazio di registrazione condiviso) verranno eseguiti fino al punto in cui raggiungono questa istruzione prima che qualsiasi thread possa continuare.
_t non può essere inserito nel controllo flusso dinamico, (rami che possono variare all'interno di un gruppo di thread), ma possono essere presenti nel controllo flusso uniforme, in cui tutti i thread del gruppo selezionano lo stesso percorso.
_t è disponibile solo nell'shader di calcolo.
Di seguito è riportato un elenco di varianti di compute shader 'sync'.
- sync_g
- sync_ugroup*
- sync_uglobal
- sync_g_t
- sync_ugroup_t*
- sync_uglobal_t
- sync_ugroup_g*
- sync_uglobal_g
- sync_ugroup_g_t*
- sync_uglobal_g_t
*Le varianti con _ugroup potrebbero non essere destinate al compilatore HLSL, per la discussione precedente nella sezione _ugroup precedente.
L'elenco delle varianti di sincronizzazione pixel shader include solo sync_uglobal.
Le recinzioni di memoria impediscono che le istruzioni interessate vengano riordinate dai compilatori o dall'hardware attraverso la recinzione.
È possibile comprimere più letture dallo stesso indirizzo tramite una chiamata shader che non sono separate da barriere di memoria o scritture nell'indirizzo. Lo stesso vale per le operazioni di scrittura. Gli accessi separati da una barriera non possono essere uniti o spostati attraverso la barriera.
Le recinzioni di memoria non sono necessarie per le operazioni atomiche a un determinato indirizzo da thread diversi per funzionare correttamente. Le recinzioni sono necessarie quando le operazioni atomiche e/o di carico/archiviazione devono essere sincronizzate rispetto all'una all'altra quando appaiono in singoli thread dal punto di vista di altri thread.
Nel pixel shader ignorare le istruzioni implicano una sync_uglobal recinzione, in tali istruzioni non è possibile riordinare attraverso l'eliminazione. sync_uglobal in pixel helper (che vengono eseguiti solo per supportare derivati) o i pixel eliminati possono o non avere alcun effetto. Non è consentito che il helper o i pixel eliminati vengano scritti in UAV se, nel caso di eliminazione, le scritture vengono rilasciate dopo l'eliminazione. I valori restituiti dagli UAV non possono contribuire ai calcoli derivati. Pertanto, indipendentemente dal fatto che sync_u sia onorato per i pixel helper o quando viene rilasciato dopo che un'eliminazione è moot.
cs_4_0 e cs_4_1 supportano questa istruzione.
Questa istruzione si applica alle fasi dello shader seguenti:
Vertice | Scafo | Dominio | Geometria | Pixel | Calcolo |
---|---|---|---|---|---|
X | X |
Poiché le UAV sono disponibili in tutte le fasi dello shader per Direct3D 11.1, la variante sync_uglobal di questa istruzione si applica a tutte le fasi shader per il runtime Direct3D 11.1, disponibile a partire da Windows 8.
Vertice | Scafo | Dominio | Geometria | Pixel | Calcolo |
---|---|---|---|---|---|
X | X | X | X | X | X |
Modello di shader minimo
Questa istruzione è supportata nei modelli shader seguenti:
Modello di shader | Supportato |
---|---|
Modello shader 5 | sì |
Modello shader 4.1 | no |
Modello shader 4 | no |
Modello shader 3 (DirectX HLSL) | no |
Modello shader 2 (DirectX HLSL) | no |
Modello shader 1 (DirectX HLSL) | no |
Argomenti correlati