Je cherche un tableau ou quelque chose de similaire qui pourrait m'aider à calculer l'efficacité du code d'assemblage.
Comme je le sais, le décalage de bits prend 1 horloge de la CPU, mais je cherche vraiment le montant de 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 se divisent.
J'ai vraiment besoin d'informations sur les valeurs entières, mais les temps d'exécution variables sont également les bienvenus.
En général, chacune de ces opérations nécessite également un cycle d'horloge unique 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 exécuter dans le désordre, vous pouvez souvent obtenir le nombre total d'instructions par cycle supérieur à 1. Les arguments de la commande macro sont les plus importants, mais l'opération est également importante, car les divisions prennent plus longtemps que XOR (<1 cycle de latence).
De nombreuses instructions x86 peuvent prendre plusieurs cycles pour compléter certaines étapes si elles sont complexes (commandes REP ou pire MWAIT par exemple).
Calculer l'efficacité du code d'assemblage n'est pas la meilleure façon de procéder de nos jours dans les pipelines Super Scalar d'exécution hors séquence. Cela varie selon le type de processeur. Cela varie sur les instructions à la fois avant et après (vous pouvez ajouter du code supplémentaire et le faire fonctionner parfois plus vite!). Certaines opérations (notamment la division) peuvent avoir une plage de temps d'exécution même sur des puces plus anciennes et plus prévisibles. En fait, la seule façon de procéder consiste à programmer de nombreuses itérations.
Vous pouvez trouver des informations sur les processeurs intel à l'adresse manuels du développeur de logiciels intel . Par exemple, la latence est de 1 cycle pour une addition d’entier et de 3 cycles pour une multiplication d’entier.
Je ne connais pas la multiplication, mais je m'attends à ce que l'addition prenne toujours un cycle.