Je recherche un tableau ou quelque chose de similaire qui pourrait m'aider à calculer l'efficacité du code d'assemblage.
Comme je sais, le décalage de bits prend 1 horloge CPU, mais je regarde vraiment 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 des valeurs qui divisent.
J'ai vraiment besoin d'informations sur les valeurs entières, mais les temps d'exécution flottants sont également les bienvenus.
Réponses:
En général, chacune de ces opérations prend également un seul cycle d'horloge à exécuter si les arguments sont dans des registres aux différentes étapes du pipeline.
Qu'entendez-vous par latence? Combien de cycles une opération passe-t-elle dans l'ALU?
Vous pourriez trouver ce tableau 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, vous pouvez souvent obtenir un nombre total d'instructions par cycle supérieur à 1. Les arguments de la macro-commande sont les plus importants, mais l'opération est également importante car les divisions prennent plus de temps que XOR (<1 latence du cycle).
De nombreuses instructions x86 peuvent prendre plusieurs cycles pour terminer certaines étapes si elles sont complexes (commandes REP ou pire MWAIT par exemple).
la source
div
etidiv
) est encore pire: elle est microcodée, et la latence est beaucoup plus élevée queadd
oushr
, et n'est même pas entièrement canalisée sur n'importe quel CPU. Tout cela provient directement des tableaux d'instructions d'Agner Fog, c'est donc une bonne chose que vous ayez lié cela.Le calcul de l'efficacité du code d'assemblage n'est pas la meilleure façon de procéder de nos jours avec les pipelines Super Scalar d'exécution hors service. Cela variera selon le type de processeur. Cela variera selon les instructions avant et après (vous pouvez ajouter du code supplémentaire et le faire exécuter plus rapidement parfois!). Certaines opérations (division notamment) peuvent avoir une plage de temps d'exécution même sur des puces plus anciennes et plus prévisibles. En fait, le chronométrage de nombreuses itérations est la seule façon de procéder.
la source
Vous pouvez trouver des informations sur Intel CPU dans les manuels des développeurs de logiciels Intel . Par exemple, la latence est de 1 cycle pour une addition entière et de 3 cycles pour une multiplication entière.
Je ne connais pas la multiplication, mais je m'attends à ce que l'addition prenne toujours un cycle.
la source