Question

J'essaie d'expérimenter des performances du compilateur.J'ai un très petit morceau de code, juste quelques multiplications et ajouts de points flottants.Le code est exécuté dans une boucle plusieurs millions de fois.J'essaie de compiler le code en C ++, C #, Java, Perl, Python ... et ensuite, j'exécute le résultat tout en mesurant le temps d'exécution.

Je suis assez insatisfait de la performance C #.Mon code C # est d'environ 60% plus lent que l'équivalent C ++ ou Java.Je suis sûr, il doit y avoir un bug dans mon expérience.Je voudrais désassembler le binaire résultant pour apprendre pourquoi.

Y a-t-il une telle option avec le code MSL?Le résultat du compilateur C # JIT peut-il être examiné sur le niveau d'instruction de la machine (instructions x86, pas les instructions de MSL)?

mise à jour

Le code (u, v, g * est double; les étapes sont entier)

stopwatch.Start();
for (int i = 0; i < steps; i++)
{
    double uu = g11 * u + g12 * v;
    v = g21 * u + g22 * v;
    u = uu;
}
stopwatch.Stop();

Était-ce utile?

La solution

déboguer votre code dans Visual Studio (mais compiler en mode de libération), mettre un point d'arrêt dans la boucle et ouvrir la fenêtre de démontage (débogage -> Windows -> démontage) lorsque l'exécution s'arrête au point d'arrêt.

Autres conseils

NGEN votre programme et démonter leRésultats.

Peut-être que vous pourriez être NGEN (compiler au code natif) le binaire premier, pour éviter la compilation JIT.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top