Quand x86 LFENCE, SFENCE et MFENCE instructions nécessaires?

Ok, j'ai lu la suite Qs de DONC en ce qui concerne CPU x86 clôtures (LFENCE, SFENCE et MFENCE):

et:

et je dois être honnête, je ne suis pas encore complètement sûr lorsqu'une clôture est nécessaire. Je suis en train d'essayer de comprendre à partir de la perspective de la suppression entièrement soufflé serrures et d'essayer de les utiliser plus fine granular de verrouillage via les clôtures, afin de minimiser les délais de latence.

Tout d'abord voici deux questions que je ne comprends pas:

Parfois, lorsque vous faites un magasin un CPU d'écrire son tampon de stockage au lieu de la cache L1. Je n'ai cependant pas de comprendre les conditions dans lesquelles un CPU fait cela?

CPU2 peut vouloir charger une valeur qui a été écrit dans CPU1 du tampon de stockage. Si je comprends bien, le problème est CPU2 ne peut pas voir la nouvelle valeur dans CPU1 du tampon de stockage. Pourquoi ne peut pas le protocole MESI il suffit d'inclure le rinçage stocker des tampons dans le cadre de son protocole??

Plus généralement, quelqu'un pourrait veuillez tenter de décrire l'ensemble du scénario et de contribuer à expliquer quand LFENCE/MFENCE et SFENCE instructions sont nécessaires?

NB l'Un des problèmes de lecture autour de ce sujet est le nombre d'articles écrits "en général" pour plusieurs architectures des processeurs, quand je suis seulement intéressé par l'Intel x86-64 de l'architecture, en particulier.

  • "Pourquoi ne peut pas le protocole MESI il suffit d'inclure le rinçage stocker des tampons dans le cadre de son protocole??" Si le magasin tampons avait stricts de la commande à l'égard de l'instruction stream, ils ne servirait à rien. Sans une telle commande, quand pensez-vous éliminer? Essentiellement, votre suggestion est "pourquoi ne pas nous ralentir à la vitesse de base plutôt que d'obliger les gens à identifier les choses qui doivent subir cette peine?"
  • Sur x86, vous avez à peu près de n'utiliser que de l'escrime si vous utilisez le type de mémoire autre que write-back mis en cache, ou si vous utilisez des non-temporelle des instructions. Voir aussi cette réponse, et la section du manuel qui y sont référencés.
  • Sans aucune synchronisation explicite, CPU2 peut voir l'ancienne valeur, même si le magasin est déjà mis en CPU1 du tampon de stockage, il n'y a rien de mal à cela. Une seule fois CPU1 rend le magasin visible, CPU2 "doit" voir.
  • Il y a un poste sur le Intel forums qui parle de l'utilisation de MFENCE: software.intel.com/en-us/forums/...
InformationsquelleAutor user997112 | 2014-12-22