HeadlinesBriefing favicon HeadlinesBriefing.com

La Fléau de l'Émulation x86 sur ARM

Hacker News •
×

Bienvenue au premier article de caractéristique sur notre site. Nous allons aborder un problème en cours avec l'émulation x86 qui affecte toutes les applications que nous émettons. Cela se résume à un seul terme transversal qui a des répercussions étendues ; émuler le modèle de mémoire Total Store Ordering x86 (x86-TSO). Les problèmes liés à l'émulation de ce modèle de mémoire sur le modèle de mémoire à ordre faible défini par ARM sont multifacettes et couvrent plusieurs problèmes. Nous allons passer en revue tous les problèmes que nous pouvons rencontrer et les façons dont nous résolvons (ou dans certains cas ne pouvons pas résoudre) dans cet article.

Il s'agit quoi exactement de x86-TSO ? Un modèle de mémoire est un ensemble de règles sur la manière dont les accès mémoire dans un système se comportent les uns par rapport aux autres. Les règles dictent comment les lectures et les écritures interagissent dans un environnement monothread ou multithread. Les deux modèles qui nous intéressent aujourd'hui sont le modèle ARM de cohérence relâchée (ou faible), et la variante x86 du modèle de cohérence Total Store Ordering. Ces deux modèles sont fondamentalement les deux extrémités du spectre ; où ARM est le plus relâché, permettant des optimisations matérielles importantes ; et x86 est le plus strict, imposant un modèle de cohérence très fort.

Étant donné que TSO est très strict, le programmeur peut supposer qu' lorsqu'un accès mémoire d'écriture se produit, il sera visible de manière cohérente pour tous les autres processeurs. Le modèle de mémoire faible que possède ARM n'est pas non plus très intuitif. Par défaut, les lectures et écritures mémoire régulières ne sont pas strictement cohérentes entre les processeurs, permettant au processeur de fonctionner de manière plus efficace. ARM a introduit les instructions mémoire load-acquire et store-release pour résoudre les questions de cohérence, mappées sur memory_order_acquire et memory_order_release dans C++ std::atomic.

FAQ : Pourquoi l'émulation de x86-TSO sur ARM est-elle difficile ?

x86-TSO impose un modèle de cohérence strict où les écritures sont immédiatement visibles pour tous les processeurs, tandis que le modèle de mémoire faible d'ARM permet des optimisations matérielles importantes en ne garantissant pas la visibilité immédiate, nécessitant des stratégies d'émulation complexes pour combler le fossé.

FAQ : Pourquoi l'émulation de x86-TSO sur ARM est-elle difficile ?

x86-TSO impose un modèle de cohérence strict où les écritures sont immédiatement visibles pour tous les processeurs, tandis que le modèle de mémoire faible d'ARM permet des optimisations matérielles importantes en ne garantissant pas la visibilité immédiate, nécessitant des stratégies d'émulation complexes pour combler le fossé.