Mais dans ce genre de bench TOUT rentre en compte, de la moindre valeur de retour, à la version du compilateur et des options de compile. Ca vaut deja que dalle ces benchs en temps normal mais là...
Le code ci dessus, et on va s'y tenir, en C ca donne ca:
Super le bench... Tu as tellement peu d'instructions dans un microbench que n'importe quelle modif peut vraiment tout changer.
Bon maintenant si tu compares une exécution du code donné par bad sheep en C (cf plus haut) et en Java (cf poste précédant), gcc 4.3.2 en -01 et un OpenJDK 1.6.0_0-b14 sur un C2D P9400, :
$ time java -server -cp Dev/workspace/Test/bin/ TestRec
real 0m7.983s
user 0m7.882s
sys 0m0.029s
$ time ./O1
real 0m7.206s
user 0m7.156s
sys 0m0.008s
Si tu veux la sortie assembleur d'Hotspot je te la file. C'est la même chose que gcc modulo quelques optims sur la gestion des boucles.
Plus tu réponds plus tu montre que tu ne comprend absolument pas ce que tu fais et que tu n'as aucune rigueur. Tu peux continuer à cracher sur les mecs de mozilla ou d'eclipse, mais moi à ta place je me retiendrais...
[^] # Re: Ça passe très bien :)
Posté par ckyl . En réponse à la dépêche Jython supporte maintenant Python 2.5. Évalué à 9.
Mais dans ce genre de bench TOUT rentre en compte, de la moindre valeur de retour, à la version du compilateur et des options de compile. Ca vaut deja que dalle ces benchs en temps normal mais là...
Le code ci dessus, et on va s'y tenir, en C ca donne ca:
void rec(int val) {
if (val == 0)
return;
rec(val - 1);
}
int main(void) {
for (int i = 0; i < 655536; i++) {
rec(5000);
}
return 0;
}
une fois compilé en -O1 par gcc ca donne ca:
000000000040047c :
40047c: 48 83 ec 08 sub 0ドルx8,%rsp
400480: 85 ff test %edi,%edi
400482: 74 08 je 40048c <rec+0x10>
400484: 83 ef 01 sub 0ドルx1,%edi
400487: e8 f0 ff ff ff callq 40047c
40048c: 48 83 c4 08 add 0ドルx8,%rsp
400490: c3 retq
0000000000400491 :
400491: 53 push %rbx
400492: bb 00 00 00 00 mov 0ドルx0,%ebx
400497: bf 88 13 00 00 mov 0ドルx1388,%edi
40049c: e8 db ff ff ff callq 40047c
4004a1: 83 c3 01 add 0ドルx1,%ebx
4004a4: 81 fb b0 00 0a 00 cmp 0ドルxa00b0,%ebx
4004aa: 75 eb jne 400497 <main+0x6>
4004ac: b8 00 00 00 00 mov 0ドルx0,%eax
4004b1: 5b pop %rbx
4004b2: c3 retq
Tu passes en -O2, et la magie du data flow analysis:
0000000000400480 :
400480: f3 c3 repz retq
400482: 66 66 66 66 66 2e 0f nopw %cs:0x0(%rax,%rax,1)
400489: 1f 84 00 00 00 00 00
0000000000400490 :
400490: 31 c0 xor %eax,%eax
400492: c3 retq
Super le bench... Tu as tellement peu d'instructions dans un microbench que n'importe quelle modif peut vraiment tout changer.
Bon maintenant si tu compares une exécution du code donné par bad sheep en C (cf plus haut) et en Java (cf poste précédant), gcc 4.3.2 en -01 et un OpenJDK 1.6.0_0-b14 sur un C2D P9400, :
$ time java -server -cp Dev/workspace/Test/bin/ TestRec
real 0m7.983s
user 0m7.882s
sys 0m0.029s
$ time ./O1
real 0m7.206s
user 0m7.156s
sys 0m0.008s
Si tu veux la sortie assembleur d'Hotspot je te la file. C'est la même chose que gcc modulo quelques optims sur la gestion des boucles.
Plus tu réponds plus tu montre que tu ne comprend absolument pas ce que tu fais et que tu n'as aucune rigueur. Tu peux continuer à cracher sur les mecs de mozilla ou d'eclipse, mais moi à ta place je me retiendrais...