Démontrer C # Code aux instructions de la machine
-
13-11-2019 - |
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)?
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();
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.