sync (sm5 - asm)
Barrera de memoria o sincronización de grupos de subprocesos.
| sync[_uglobal|_ugroup][_g][_t] |
|---|
Observaciones
La sincronización tiene opciones _uglobal, _ugroup, _g y _t.
En el sombreador de píxeles, solo se permite sync_uglobal .
En el sombreador de proceso, se deben especificar (_uglobal o _ugroup*) o _g. _t es opcional además.
_uglobal
Barrera de memoria de u# global (UAV).
Todas las lecturas y escrituras de memoria anteriores de u# realizadas por este subproceso en orden de programa se hacen visibles para todos los subprocesos de toda la GPU antes de que este subproceso acceda a la memoria u# posterior. Toda la parte de GPU de la definición se reemplaza por un ámbito menos que global en un caso, que se describe a continuación.
Esto se aplica a toda la memoria UAV enlazada en la fase actual del sombreador.
_uglobal está disponible en el sombreador de proceso o en el sombreador de píxeles.
Para cualquier UAV enlazado que no haya sido declarado por el sombreador como Globalmente coherente, la barrera de memoria de _uglobal u# solo tiene visibilidad dentro del grupo de subprocesos del sombreador de proceso actual para ese UAV, como si fuera _ugroup en lugar de _uglobal. Este problema solo se aplica al sombreador de proceso, ya que el sombreador de píxeles debe declarar todas las UAV como coherentes globalmente.
_ugroup
Barrera de memoria del ámbito del grupo de subprocesos u# (UAV).
Todas las lecturas o escrituras anteriores de la memoria u# realizadas por este subproceso en el orden del programa se hacen visibles para todos los subprocesos del grupo de subprocesos antes de que este subproceso acceda a memoria u# posterior.
Esto se aplica a toda la memoria UAV enlazada en la fase actual del sombreador.
_ugroup solo está disponible en el sombreador de proceso.
Si _ugroup se expone, para algunas implementaciones. La ventaja de especificar _ugroup en lugar de _uglobal es que la operación de sincronización se puede completar más rápidamente.
Otras implementaciones no distinguen _ugroup de _uglobal, por lo que ambas operaciones son equivalentes y se comportan como _uglobal. Las aplicaciones pueden especificar su intención solicitando el ámbito más estrecho de sincronización necesario.
Incluso si un UAV determinado se declara como globalmente coherente, una operación de sincronización de _ugroup funcionará de forma más eficaz en ese UAV si no se requiere una barrera global.
_g
Barrera de g# (memoria compartida del grupo de subprocesos).
Todas las lecturas o escrituras anteriores de la memoria g# realizadas por este subproceso en orden de programa se hacen visibles para todos los subprocesos del grupo de subprocesos antes de que este subproceso acceda a la memoria g# posterior.
Esto se aplica a toda la memoria compartida de g# del grupo de subprocesos actual.
_g solo está disponible en el sombreador de proceso.
_t
Sincronización de grupos de subprocesos. Todos los subprocesos de un único grupo de subprocesos (aquellos que pueden compartir el acceso a un conjunto común de espacio de registro compartido) se ejecutarán hasta el punto en el que lleguen a esta instrucción antes de que pueda continuar cualquier subproceso.
_t no se puede colocar en el control de flujo dinámico (ramas que pueden variar dentro de un grupo de subprocesos), pero pueden estar presentes en el control de flujo uniforme, donde todos los subprocesos del grupo eligen la misma ruta de acceso.
_t solo está disponible en el sombreador de proceso.
A continuación se muestra una lista de variantes del sombreador de proceso "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
*Es posible que las variantes con _ugroup no estén dirigidas por el compilador HLSL, según la explicación anterior de la sección _ugroup anterior.
La lista de variantes de sincronización del sombreador de píxeles incluye solo sync_uglobal.
Las barreras de memoria impiden que los compiladores o hardware reordenan las instrucciones afectadas a través de la barrera.
Se pueden contraer varias lecturas de la misma dirección mediante una invocación del sombreador que no están separadas por barreras de memoria o escrituras en la dirección. Lo mismo se aplica a las escrituras. Los accesos separados por una barrera no se pueden combinar ni mover a través de la barrera.
Las barreras de memoria no son necesarias para que las operaciones atómicas a una dirección determinada por diferentes subprocesos funcionen correctamente. Las barreras son necesarias cuando es necesario sincronizar las operaciones atómicas o de carga o almacén con respecto a las demás, ya que aparecen en subprocesos individuales desde el punto de vista de otros subprocesos.
En el sombreador de píxeles, las instrucciones de descarte implican una barrera de sync_uglobal, en que las instrucciones no se pueden reordenar en el descarte. sync_uglobal en píxeles auxiliares (que solo se ejecutan para admitir derivados) o píxeles descartados pueden o no tener ningún efecto. No se permite que el asistente o los píxeles descartados escriban en UAV si, en el caso de descarte, las escrituras se emiten después del descarte. Los valores devueltos de los UAV no pueden contribuir a cálculos derivados. Por lo tanto, si se respeta o no sync_u para píxeles auxiliares o cuando se emite después de un descarte se moot.
cs_4_0 y cs_4_1 admiten esta instrucción.
Esta instrucción se aplica a las siguientes fases del sombreador:
| Vértice | Casco | Domain | Geometría | Píxel | Proceso |
|---|---|---|---|---|---|
| X | x |
Dado que los UAV están disponibles en todas las fases del sombreador para Direct3D 11.1, la variante sync_uglobal de esta instrucción se aplica a todas las fases del sombreador para el entorno de ejecución de Direct3D 11.1, que está disponible a partir de Windows 8.
| Vértice | Casco | Domain | Geometría | Píxel | Proceso |
|---|---|---|---|---|---|
| X | X | x | X | x | X |
Modelo de sombreador mínimo
Esta instrucción se admite en los siguientes modelos de sombreador:
| Modelo de sombreador | Compatible |
|---|---|
| Modelo de sombreador 5 | sí |
| Modelo de sombreador 4.1 | No |
| Modelo de sombreador 4 | No |
| Modelo de sombreador 3 (DirectX HLSL) | No |
| Modelo de sombreador 2 (DirectX HLSL) | No |
| Modelo de sombreador 1 (DirectX HLSL) | No |
Temas relacionados