1 votes

Sémantique de latence des registres de lecture sur ASM x86

Per A. Fog's tableaux d'instructions un Ivy Bridge a une latence de 3 cycles sur une instruction MOV.

Ainsi, ce qui suit prendra 3 cycles pour déplacer RAX dans l'adresse de RCX :

  mov               [rcx], rax

Ma question est la suivante : cela implique-t-il que RAX, qui est en train d'être lu, ne peut pas être modifié pendant les 2 prochaines horloges ? Plus précisément, ce qui suit entraînerait-il un retard d'exécution ?

  mov               [rcx], rax
  inc               rax

1voto

Ana cleto Points 11

En bref, oui. Cela provoquera un blocage du processeur pendant qu'il attendra que cette instruction soit terminée et que les données soient disponibles avant de pouvoir exécuter l'instruction suivante. Il n'y a aucun moyen de prédire facilement quelles données vont arriver et donc que inc ne peut tout simplement pas s'exécuter avant que l'instruction mov est complet.

Ce n'est pas forcément un gros problème, car le processeur peut être capable de programmer des instructions qui ne dépendent pas du résultat de cette opération. mov afin de maintenir le fonctionnement du noyau.

C'est ce qu'on appelle Exécution hors ordre et il peut contribuer à atténuer le coût des blocages du processeur lors de l'attente de longues instructions comme celles-ci.


Une précision supplémentaire...

J'aurais dû mieux lire votre exemple, je ne crois pas que la mov [rcx], rax provoquera un blocage de l'instruction inc rax mais provoquera tout ce qui dépend de l'instruction rcx pour gagner du temps.

La page dont vous avez donné le lien énumère les débits réciproques grâce auxquels une autre instruction de ce type peut être émise. Plus précisément, je suppose que pendant ce laps de temps. cualquier une instruction avec des dépendances similaires pourrait être émise.

Je suppose donc que le registre RAX est soit renommé lorsque l'instruction est envoyée pour exécution ou est encodée dans les u-ops de l'instruction. L'instruction suivante peut travailler sur ce registre tant qu'elle n'est pas dépendante des résultats d'une opération précédente stockée. sur ce registre.

Donc, dans l'exemple de vos questions, ce que je crois devrait Il se trouve que le CPU a effectivement deux instructions dont la seule dépendance est la valeur actuelle du registre RAX et la valeur de celui-ci n'est modifiée que par la seconde instruction. La première instruction doit être distribuée et l'exécution quasi immédiate peut commencer sur la seconde ( inc ) instruction.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X