18 votes

Latence des instructions de l'unité centrale sur les processeurs x86 et x64

Je cherche un tableau ou quelque chose de similaire qui pourrait m'aider à calculer l'efficacité d'un code assembleur.

Je sais que le déplacement de bits prend 1 horloge CPU, mais je cherche vraiment à savoir combien prend l'addition (la soustraction devrait prendre la même chose), la multiplication et comment calculer vraisemblablement le temps de division si je connais les valeurs à diviser.

J'ai vraiment besoin d'informations sur les valeurs entières, mais les temps d'exécution des flottants sont également les bienvenus.

16voto

jarno Points 111

En général, l'exécution de chacune de ces opérations prend également un seul cycle d'horloge si les arguments se trouvent dans des registres aux différents stades du pipeline.

Qu'entendez-vous par latence ? Combien de cycles une opération passe-t-elle dans l'UAL ?

Ce tableau pourrait vous être utile : http://www.agner.org/optimize/instruction_tables.pdf

Étant donné que les processeurs modernes sont super scalaires et peuvent s'exécuter dans le désordre, le nombre total d'instructions par cycle est souvent supérieur à 1. Les arguments de la macro-commande sont les plus importants, mais l'opération compte également, car les divisions prennent plus de temps que les XOR (latence <1 cycle).

De nombreuses instructions x86 peuvent prendre plusieurs cycles pour compléter certaines étapes si elles sont complexes (commandes REP ou pire MWAIT par exemple).

7voto

bruceatk Points 4226

Calculer l'efficacité d'un code assembleur n'est pas la meilleure façon de procéder à l'heure des pipelines super scalaires à exécution aléatoire. Elle variera selon le type de processeur. Elle variera en fonction des instructions avant et après (vous pouvez ajouter et l'exécuter plus rapidement parfois !). Certaines opérations (la division notamment) peuvent avoir des temps d'exécution variables, même sur des puces plus anciennes et plus prévisibles. En fait, le chronométrage d'un grand nombre d'itérations est la seule façon de procéder.

4voto

sivabudh Points 101

Vous pouvez trouver des informations sur les processeurs Intel à l'adresse suivante manuels des développeurs de logiciels intel . Par exemple, le temps de latence est de 1 cycle pour une addition de nombres entiers et de 3 cycles pour une multiplication de nombres entiers.

Je ne sais pas ce qu'il en est de la multiplication, mais je m'attends à ce que l'addition prenne toujours un cycle.

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