python:benchmark

====== Différences ====== Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
python:benchmark [2015/03/06 15:37]
nliautaud
python:benchmark [2015/03/06 18:57] (Version actuelle)
nliautaud
Ligne 1: Ligne 1:
 ======Benchmark====== ======Benchmark======
  
-Bien que ne semblant avoir indépendemment que peu d'effets, l'application de l'ensemble de ces astuces dans un programme peut avoir un effet drastique sur son temps d'exécution.+Les benchmarks concernent [[https://​docs.python.org/​3|Python 3]] et les timings sont généralement calculés via ''​[[https://​docs.python.org/​3/​library/​timeit.html|timeit]]''​, en x64 sous Windows
  
-====Appel ​de fonction====+Le but n'est pas d'​invalider un élément du langage, puisqu'​évidemment chaque chose comparée a sa raison d'​être,​ et peut potentiellement se révéler plus adapté dans un contexte différent. Ce genre de comparaison est purement théorique, et permet d'​étendre sa compréhention du langage et de ses nombreuses spécificités.
  
-Appel dans une boucle : +Et finalement, bien que minimes pris indépendemment,​ la prise en compte conjointe de ces faces à faces peut avoir un effet notable sur les temps d'​exécution. Sans oublier bien sûr que //​l'​optimisation prématurée est la racine de tous les maux//.
-<Code python>​ +
-def doit(): +
-    something() +
-     +
-rng = range(x) +
-for i in rng: +
-    doit() +
-</Code>+
  
-Boucle dans la fonction : 
-<Code python> 
-def doit(x): 
-    rng = range(x) 
-    for i in rng: 
-        something() ​ 
-        ​ 
-doit(x) 
-</​Code>​ 
  
-===Bench=== +**a faire :*tri de tableaux/​listes et dictionnaires,​ concaténation et vitesse des opérateurs mathématiques et de comparaison.
- +
-1.000.000 de tours : +
- +
-  - Appel dans une boucle : 1.341 +
-  - Boucle dans la fonction : 1.164 +
- +
-<​barchart>​0|50x20|100|Dans:​100,​Hors:​70</​barchart>​ +
- +
-===Conclusion=== +
- +
-L'​appel à une fonction prends du temps, il est donc bien plus rapide de mettre la boucle à l'​intérieur de la fonction. +
- +
- +
-=====Opérateurs===== +
- +
-====Division et multiplication==== +
- +
-Division : +
-<Code python>​ +
-rng = range(x) +
-for i in rng: +
-    123456.789 / 4 +
-</​Code>​ +
- +
-Multiplication : +
-<Code python>​ +
-rng = range(x) +
-for i in rng: +
-    123456.789 ​0.25 +
-</​Code>​ +
- +
-Le résultat de ces calculs est le même. +
- +
-===Bench=== +
- +
-Calcul effectué 1.000.000 de fois : +
- +
-  - Division : 0.121 +
-  - Multiplication : 0.047 +
- +
-<​barchart>​0|50x20|12.1|Division:​12.1,​Multiplication:​4.7</​barchart>​ +
- +
-===Conclusion=== +
- +
-La multiplication est de deux à quatre fois plus rapide que la division. +
- +
-====Incrémentation et addition==== +
- +
-Addition : +
-<Code python>​ +
-rng = range(x) +
-for i in rng: +
-    i = i + 1 +
-</​Code>​ +
- +
-Incrémentation : +
-<Code python>​ +
-rng = range(x) +
-for i in rng: +
-    i += 1 +
-</​Code>​ +
- +
-===Bench=== +
- +
-Calcul effectué 1.000.000 de fois : +
- +
-  - Addition : 0.140 +
-  - Incrémentation : 0.117 +
- +
-<​barchart>​0|50x20|14|Addition:​14,​Incrémentation:​11.7</​barchart>​ +
- +
-===Conclusion=== +
- +
-L'​incrémentation est légèrement plus rapide que l'​addition. +
- +
-=====Classes==== +
- +
-====Accès aux méthodes==== +
- +
-Point dans la boucle : +
-<Code python>​ +
-arr = [] +
-rng = range(x) +
-for i in rng: +
-    arr.append(something()) +
-</​Code>​ +
- +
-Point hors de la boucle : +
-<Code python>​ +
-arr = [] +
-append = arr.append +
-rng = range(x) +
-for i in rng: +
-    append(something()) +
-</​Code>​ +
- +
-===Bench=== +
- +
-Calcul effectué 1.000.000 de fois : +
- +
-  - Point dans la boucle : 1.307 +
-  - Point hors de la boucle : 1.157 +
- +
-<​barchart>​0|50x20|1.3|Dans:​1.3,​Hors:​1.1</​barchart>​ +
- +
-===Conclusion=== +
- +
-La référence à une méthode de classe (syntaxe du point), au lieu d'​être recalculée à chaque tour de boucle, peut être une fois pour toutes stockée dans une variable, accélérant notablement les calculs. +
- +
-=====WIP===== +
-En cours d'​écriture. +
- +
-A venir : benchmark code, parcourt et tri de tableaux/​listes et dictionnaires,​ concaténation et vitesse des opérateurs mathématiques et de comparaison.+