Categories
Programming Python

Comparaison des performances de Python 2.7 et 3.3 avec Ackermann

$ time python ackermann.py 3 12
32765
 
real    2m33.121s
user    2m32.518s
sys     0m0.088s

$ time python ackermann.py 3 12
32765

real    2m57.908s
user    2m57.316s
sys     0m0.068s

$ time python3.3 ackermann.py 3 12
32765

real    4m6.365s
user    3m18.204s
sys     0m47.452s

Tests effectués avec, dans l’ordre, Python 2.7.3, 2.7.4 et 3.3.1 sur cet algorithme. Nous voyons que malgré le fait que Python 3.* s’améliore (voir ce billet), Python 2.7 est toujours bien plus rapide. Ce test n’utilise pas d’itérateurs ou objets/structures complexes. Il s’agit simplement de l’implémentation naïve de la fonction d’Ackermann. Nous avions déjà fait quelques comparaisons entre différents langages.

Categories
Computer Programming Python

Quelques benchmarks avec Ackermann

Un billet qui va peut-être intéresser quelqu’un et répondre à une question que je me pose.

$ gcc -Wall ./ackermann.c -o ackermann-c
$ go build -o ackermann-go ./ackermann.go
$ ocamlc ./ackermann.ml -o ackermann-ocaml
$ ghc ./ackermann.hs -o ackermann-haskell
$ python -c "import ackermann-python"

$ time ./ackermann-c 3 12
32765

real    0m4.345s
user    0m4.320s
sys     0m0.012s

$ time ./ackermann-go 3 12
32765

real    0m4.453s
user    0m4.436s
sys     0m0.000s

$ time ./ackermann-ocaml 3 12
32765

real    0m13.094s
user    0m13.053s
sys     0m0.000s

$ time ./ackermann-haskell 3 12
32765

real    1m11.108s
user    1m10.616s
sys     0m0.268s

$ time python ackermann-python.pyc 3 12
32765

real    2m33.121s
user    2m32.518s
sys     0m0.088s

Voici les codes respectifs: ackermann.c, ackermann.go, ackermann.ml, ackermann.hs et ackermann.py. Évidemment, j’ai fais les tests avec la version correspondant à la définition de la fonction (version naïve). Je peux même lancer tous les tests en même temps grâce aux 8 coeurs de l’i7. Ça ne change pas beaucoup les résultats!

Je pense que vous avez compris qu’elle est ma question. J’ai fais plusieurs tests et l’écart entre la version OCaml et Haskell est toujours aussi important (y compris en utilisant ocamlrun ./ackermann-ocaml). Les résultats avec les implémentations C, Go et Python ne sont pas vraiment une surprise.

Il y a tout de même presque une minute de différence entre les versions OCaml et Haskell. J’aimerai bien savoir ce que fait le compilateur OCaml afin d’avoir de si bons résultats (qui ne devrait pas être comparé à du C en fait).

Categories
Mathématiques

Ackermann

A(4, 2) = ?

Indice:

74f758d95e3ee157e0a51d8cb4dc03b31f26ed07
Temps de calcul: 7.39097595215e-05 secondes.

Si vous avez la réponse postez votre algorithme avec celle-ci.