2010-01-23 3 views
2

Certes, j'ai une question un peu bête. Fondamentalement, je me demande si il existe certains mécanismes spéciaux fournis par les processeurs Intel efficacement exécuter une série d'instructions factices, c'est-à-dire, NOP? Par exemple, je pourrais imaginer que pourrait être une sorte de mécanisme de pré-extraction qui identifie NOPS, les rejette et essaie d'aller chercher des instructions utiles à la place. Ou sont ces NOPS envoyés à l'unité d'exécution des instructions normales, ce qui signifie que je peux approximativement traiter 5 PON chaque cycle (dans l'hypothèse où il y a des 5 unités d'exécution)Dummy opérations de traitement du processeur Intel

Merci, Reinhard

Répondre

1

No. Ils sont décodés et exécutés comme des instructions normales; il existe un support matériel pour supprimer la fausse dépendance qui serait autrement introduite sur le registre EAX pour le NOP à un seul octet, 0x90 (qui est vraiment xchg eax, eax), mais c'est tout. Référence: Intel(R) 64 and IA-32 Architectures Optimization Reference Manual - section 3.5.1.8, «Utilisation des NOP».

2

Les rejeter serait une très mauvaise idée: ils sont souvent utilisés pour l'attente occupée. Si vous supprimez NOP s, vous faites en sorte que votre boucle d'attente soit beaucoup plus serrée qu'elle ne devrait l'être et risque d'entraîner des pertes de communication considérables.

Si vous estimez que NOP s sont inefficaces, vous pouvez essayer HLT qui économise de l'énergie. Ou vous pouvez même envoyer le processeur dans un état de veille. Cependant, ceux-ci n'ont de sens que si vous voulez "ne rien faire" pendant une période de temps considérable et ils ont généralement besoin de privilèges suvervisor.

0

Il y a très peu besoin d'optimiser les séquences de no-ops sur l'architecture x86 car il a des encodages non-op de longueurs variables. Au lieu de nombreux no-ops à un octet, on peut simplement utiliser un seul no-op multi-octets. Un peu plus de travail pour le décodeur, mais les unités d'exécution réelles ne voient qu'une seule instruction à exécuter.

+0

Merci pour les réponses. Est-ce que cela fait une différence d'un point de vue performance à l'aide d'une instruction multiword versus une instruction multi-single-NOP? Ou est-ce juste intéressant du point de vue de la taille du code? – reinhard

+0

Il est difficile de dire exactement quels sont les effets de performance pour les NOP multi-octets. Je ne sais pas s'ils peuvent tous passer par le simple chemin du décodeur (vous pouvez probablement le chercher quelque part). Si elles nécessitent le chemin de décodeur complexe, et qu'il est déjà saturé, il peut être préférable d'utiliser deux NOP plus petits. –

+0

En fait, avec un support NOP long vous pouvez faire un seul NOP de n'importe quelle taille de 1 à 15 octets. Si vous avez besoin de sauter un plus grand espace, alors JMP au lieu de NOP. – slacker

Questions connexes