fence

fence

Ensamblador RISC-V Referencia

lyszt.net cubre fence y otras instrucciones RISC-V con más detalle.

Descripción

Las instrucciones FENCE se utilizan para ordenar las E/S de dispositivos y los accesos a memoria tal como los observan otros harts RISC-V y dispositivos externos o coprocesadores. Cualquier combinación de entrada de dispositivo (I), salida de dispositivo (O), lecturas de memoria (R) y escrituras de memoria (W) puede ordenarse con respecto a cualquier combinación de las mismas. De manera informal, ningún otro hart RISC-V ni dispositivo externo puede observar ninguna operación del conjunto successor posterior a un FENCE antes que cualquier operación del conjunto predecessor anterior al FENCE. memorymodel proporciona una descripción precisa del modelo de consistencia de memoria de RISC-V.

Las instrucciones FENCE también ordenan las lecturas y escrituras de memoria realizadas por el hart tal como las observan las lecturas y escrituras de memoria realizadas por un dispositivo externo. Sin embargo, las instrucciones FENCE no ordenan las observaciones de eventos realizadas por un dispositivo externo utilizando cualquier otro mecanismo de señalización.

ℹ
Un dispositivo podría observar un acceso a una ubicación de memoria a través de algún mecanismo de comunicación externo, por ejemplo, un registro de control mapeado en memoria que genera una señal de interrupción hacia un controlador de interrupciones. Esta comunicación está fuera del alcance del mecanismo de ordenación FENCE y, por lo tanto, las instrucciones FENCE no pueden ofrecer ninguna garantía sobre cuándo un cambio en la señal de interrupción es visible para el controlador de interrupciones. Dispositivos específicos podrían proporcionar garantías de ordenación adicionales para reducir la sobrecarga de software, pero esas están fuera del alcance del modelo de memoria de RISC-V.

La EEI definirá qué operaciones de E/S son posibles y, en particular, qué direcciones de memoria, cuando se accede a ellas mediante instrucciones de carga y almacenamiento, se tratarán y ordenarán como operaciones de entrada de dispositivo y salida de dispositivo respectivamente, en lugar de lecturas y escrituras de memoria. Por ejemplo, los dispositivos de E/S mapeados en memoria normalmente se accederán con cargas y almacenamientos no almacenados en caché que se ordenan utilizando los bits I y O en lugar de los bits R y W. Las extensiones del conjunto de instrucciones también podrían describir nuevas instrucciones de E/S que también se ordenarán utilizando los bits I y O en una instrucción FENCE.

Codificación del modo Fence

El campo de modo FENCE fm define la semántica de la instrucción FENCE. Un FENCE (con fm=0000) ordena todas las operaciones de memoria de su conjunto predecesor antes que todas las operaciones de memoria de su conjunto sucesor.

Una instrucción FENCE.TSO se codifica como una instrucción FENCE con fm=1000, predecessor=RW y successor=RW. FENCE.TSO ordena todas las operaciones de carga de su conjunto predecesor antes que todas las operaciones de memoria de su conjunto sucesor, y todas las operaciones de almacenamiento de su conjunto predecesor antes que todas las operaciones de almacenamiento de su conjunto sucesor. Esto deja las operaciones de almacenamiento non-AMO del conjunto predecesor de FENCE.TSO's sin ordenar con respecto a las cargas non-AMO de su conjunto sucesor.

ℹ
Debido a que FENCE RW,RW impone un superconjunto de las ordenaciones que impone FENCE.TSO, es correcto ignorar el campo fm e implementar FENCE.TSO como FENCE RW,RW.

Los campos no utilizados en las instrucciones FENCE --rs1 and rd-- están reservados para fences de grano más fino en futuras extensiones. Para compatibilidad futura, las implementaciones base deberán ignorar estos campos#, y el software estándar deberá poner a cero estos campos. Asimismo, muchos ajustes de fm y de conjuntos predecesor/sucesor también están reservados para uso futuro. Las implementaciones base deberán tratar todas esas configuraciones reservadas como instrucciones FENCE (con fm=0000), y el software estándar deberá utilizar únicamente configuraciones no reservadas.

ℹ
Elegimos un modelo de memoria relajado para permitir un alto rendimiento a partir de implementaciones de máquina simples y de probables futuras extensiones de coprocesador o acelerador. Separamos la ordenación de E/S de la ordenación de R/W de memoria para evitar la serialización innecesaria dentro de un hart controlador de dispositivo y también para admitir rutas alternativas no de memoria para controlar coprocesadores o dispositivos de E/S añadidos. Las implementaciones simples pueden además ignorar los campos predecessor and successor y ejecutar siempre un FENCE conservador sobre todas las operaciones.