sync (sm5 - asm)

Barrera de memoria o sincronización de grupos de subprocesos.

sync[_uglobal|_ugroup][_g][_t]

 

Comentarios

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 cualquier memoria de 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 del sombreador actual.

_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 todos los UMV como coherente 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 orden de programa se hacen visibles para todos los subprocesos del grupo de subprocesos antes de que este subproceso acceda a la memoria de u# posterior.

Esto se aplica a toda la memoria UAV enlazada en la fase del sombreador actual.

_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 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 cualquier 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 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 cualquier subproceso pueda continuar.

_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 de "sync" del sombreador de proceso.

  • 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 el compilador HLSL no tenga como destino las variantes con _ugroup, según la explicación anterior de la sección _ugroup anterior.

La lista de variantes de sincronización de sombreador de píxeles incluye solo sync_uglobal.

Las barreras de memoria impiden que los compiladores o hardware reordenen las instrucciones afectadas a través de la barrera.

Se pueden contraer varias lecturas de la misma dirección mediante una invocación de 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 las operaciones atómicas y/o de carga/almacén deben sincronizarse entre 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 UMV si, en caso de descarte, las escrituras se emiten después del descarte. No se permite que los valores devueltos de los UAV contribuyan 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 es 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 las UMV 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
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

 

Ensamblado del modelo de sombreador 5 (DirectX HLSL)