fence

fence

Assembleur RISC-V Référence

lyszt.net couvre fence et d'autres instructions RISC-V plus en détail.

Description

Les instructions FENCE servent à ordonner les accès d'E/S aux dispositifs et les accès mémoire tels qu'ils sont vus par les autres harts RISC-V et les dispositifs externes ou coprocesseurs. Toute combinaison d'entrée de dispositif (I), de sortie de dispositif (O), de lectures mémoire (R) et d'écritures mémoire (W) peut être ordonnée par rapport à toute combinaison des mêmes opérations. De façon informelle, aucun autre hart RISC-V ni dispositif externe ne peut observer une opération de l'ensemble successor suivant un FENCE avant une opération de l'ensemble predecessor précédant le FENCE. memorymodel fournit une description précise du modèle de cohérence mémoire RISC-V.

Les instructions FENCE ordonnent également les lectures et écritures mémoire effectuées par le hart telles qu'observées par les lectures et écritures mémoire effectuées par un dispositif externe. Cependant, les instructions FENCE n'ordonnent pas les observations d'événements effectuées par un dispositif externe au moyen de tout autre mécanisme de signalisation.

ℹ
Un dispositif peut observer un accès à un emplacement mémoire via un mécanisme de communication externe, par exemple un registre de contrôle mappé en mémoire qui pilote un signal d'interruption vers un contrôleur d'interruptions. Cette communication est hors du champ d'application du mécanisme d'ordonnancement FENCE et les instructions FENCE ne peuvent donc fournir aucune garantie sur le moment où un changement du signal d'interruption est visible par le contrôleur d'interruptions. Des dispositifs spécifiques peuvent fournir des garanties d'ordonnancement supplémentaires pour réduire la surcharge logicielle, mais celles-ci sont hors du champ d'application du modèle mémoire RISC-V.

L'EEI définira quelles opérations d'E/S sont possibles et, en particulier, quelles adresses mémoire, lorsqu'elles sont accédées par des instructions de chargement et de stockage, seront traitées et ordonnées comme des opérations d'entrée de dispositif et de sortie de dispositif respectivement plutôt que comme des lectures et écritures mémoire. Par exemple, les dispositifs d'E/S mappés en mémoire seront généralement accédés avec des chargements et des stockages non mis en cache qui sont ordonnés à l'aide des bits I et O plutôt que des bits R et W. Des extensions du jeu d'instructions peuvent également décrire de nouvelles instructions d'E/S qui seront également ordonnées à l'aide des bits I et O dans une instruction FENCE.

Encodage du mode Fence

Le champ de mode FENCE fm définit la sémantique de l'instruction FENCE. Un FENCE (avec fm=0000) ordonne toutes les opérations mémoire de son ensemble prédécesseur avant toutes les opérations mémoire de son ensemble successeur.

Une instruction FENCE.TSO est encodée comme une instruction FENCE avec fm=1000, predecessor=RW et successor=RW. FENCE.TSO ordonne toutes les opérations de chargement de son ensemble prédécesseur avant toutes les opérations mémoire de son ensemble successeur, et toutes les opérations de stockage de son ensemble prédécesseur avant toutes les opérations de stockage de son ensemble successeur. Cela laisse les opérations de stockage non-AMO de l'ensemble prédécesseur de FENCE.TSO non ordonnées par rapport aux chargements non-AMO de son ensemble successeur.

ℹ
Étant donné que FENCE RW,RW impose un sur-ensemble des ordonnancements que FENCE.TSO impose, il est correct d'ignorer le champ fm et d'implémenter FENCE.TSO comme FENCE RW,RW.

Les champs inutilisés dans les instructions FENCE--rs1 and rd--sont réservés pour des fences à grain plus fin dans de futures extensions. Pour la compatibilité ascendante, les implémentations de base doivent ignorer ces champs#, et les logiciels standard doivent mettre ces champs à zéro. De même, de nombreux paramètres de fm et d'ensembles prédécesseur/successeur sont également réservés pour un usage futur. Les implémentations de base doivent traiter toutes ces configurations réservées comme des instructions FENCE (avec fm=0000), et les logiciels standard ne doivent utiliser que des configurations non réservées.

ℹ
Nous avons choisi un modèle mémoire relâché pour permettre de hautes performances à partir d'implémentations matérielles simples et à partir d'extensions probables de coprocesseurs ou d'accélérateurs. Nous séparons l'ordonnancement des E/S de l'ordonnancement R/W mémoire afin d'éviter une sérialisation inutile au sein d'un hart de pilote de dispositif et aussi pour prendre en charge d'autres chemins non mémoire pour contrôler des coprocesseurs ou dispositifs d'E/S ajoutés. Les implémentations simples peuvent en outre ignorer les champs predecessor and successor et toujours exécuter un FENCE conservateur sur toutes les opérations.