2010-11-02 42 views
1

Y at-il quelque part sur le web où je peux avoir une idée de ce que les différentes syntaxes de langage de programmation prennent en termes de cycles de processeur (Core i7 et Core 2)? À l'université j'ai appris le langage d'assemblage ARM et nous avons pu cartographier le nombre de cycles effectués pour faire un opérateur de soustraction etc. Je me demandais simplement s'il était possible de le faire avec un langage de niveau supérieur sur Core i7 ou Core 2?Nombre de cycles effectués pour C++ ou ANSI C?

+4

Une manière plus précise serait de lire l'assembly généré par votre compilateur. Ensuite, il vous reste le problème de prédire la performance d'un morceau de code sur un processeur moderne en panne. –

+1

Pourquoi voudriez-vous faire cela? Nous pouvons peut-être vous aider à résoudre un problème que vous tentez de résoudre. –

+0

Existe-t-il un moyen pour VS2010 de voir l'assemblage produit? – Tom

Répondre

8

Non, c'est complètement dépendant du compilateur que vous utilisez, et quels paramètres d'optimisation que vous utilisez, etc.

Vous pouvez utilisez votre compilateur et vos paramètres favoris pour générer le code d'assemblage, et à partir du code d'assemblage, vous pouvez effectuer ce type de prédictions. Cependant, n'oubliez pas que sur les architectures modernes, des choses comme la latence de la mémoire et le changement de nom du registre ont des effets importants sur la vitesse, et ces effets ne sont pas évidents même à partir de l'inspection du code d'assemblage.

+0

Et bonne chance avec l'architecture 64 bits, x86 est de petites frites par rapport à ce cauchemar. –

+0

La plupart du temps, le code lent est dû à des instructions CPU lentes (par exemple des divisions entières ou des opérations à virgule flottante transcendantes), des échecs de cache et des erreurs de branchement. Vous pouvez en déduire toutes ces données et obtenir l'idée générale de la performance en regardant le code. – user434507

+0

@user: Oui, mais vous n'obtiendrez rien comme un "feature x == y cycles" –

2

En général, dans les langages de niveau supérieur, les instructions individuelles ne sont pas mappées correctement sur des séquences spécifiques d'instructions de code machine. Le compilateur optimisera typiquement les choses, ce qui impliquera diverses transformations, arrangements, et même éliminations, d'instructions. Par conséquent, il n'est généralement pas utile de citer des métriques comme "une expression for prend 20 cycles".