Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre éclairé
    incompréhension performance while ou de timeit
    bonjour,

    alors voilà j'ai un petit problème où timeit ne semble pas se mettre d'accord avec lui même,

    d'un coté en session interactive :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> timeit.timeit("while i<10**5: i+=1", setup="i=0", number=1)
    0.010640200000011646
    >>> timeit.timeit("while i<10**6: i+=1", setup="i=0", number=1)
    0.08264850000000479
    >>> timeit.timeit("while i<10**7: i+=1", setup="i=0", number=1)
    0.9207111000000054
    >>> timeit.timeit("while i<10**8: i+=1", setup="i=0", number=1)
    8.68150079999998
    bon, si j'avais voulu être très précis j'aurais fait le test quelques dizaines de fois mais ce n'est même pas la peine.

    en ligne de commande
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (venv_temp) D:\>python -m timeit -s "i=0" "while i<10**5: i+=1"
    5000000 loops, best of 5: 47.7 nsec per loop
     
    (venv_temp) D:\>python -m timeit -s "i=0" "while i<10**6: i+=1"
    5000000 loops, best of 5: 66.4 nsec per loop
     
    (venv_temp) D:\>python -m timeit -s "i=0" "while i<10**7: i+=1"
    1 loop, best of 5: 847 msec per loop
     
    (venv_temp) D:\>python -m timeit -s "i=0" "while i<10**8: i+=1"
    1 loop, best of 5: 6.98 sec per loop


    les 2 tests ont été fait sur le même env (Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32)

    Si quelqu'un à une idée de pourquoi c'est à peu près proportionnel d'un coté et de l'autre pas du tout ?

  2. #2
    Membre expérimenté
    Je ne comprends pas tout mais si cela peut t'aider :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    timeit.timeit("while i<10**5: i+=1", setup="i=0", number=1)
    Out[3]: 0.004092907998710871
     
    timeit.timeit("while i<10**6: i+=1", setup="i=0", number=1)
    Out[4]: 0.03908805999890319
     
    timeit.timeit("while i<10**7: i+=1", setup="i=0", number=1)
    Out[5]: 0.3894089220011665
     
    timeit.timeit("while i<10**8: i+=1", setup="i=0", number=1)
    Out[6]: 3.755811883998831


    et :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**5: i+=1"
    10000000 loops, best of 3: 0.0252 usec per loop
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**6: i+=1"
    10000000 loops, best of 3: 0.0287 usec per loop
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**7: i+=1"
    10 loops, best of 3: 38.4 msec per loop
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**8: i+=1"
    10 loops, best of 3: 374 msec per loop


    Dans le premier cas, timeit est importé au préalable. Peut-être que dans le second, il est importé à chaque fois ?
    Pas d'aide par mp.

  3. #3
    Membre éclairé
    Je n'ai vraiment aucune idée du pourquoi du comment,
    ce qui est incompréhensible c'est cet écart qu'il peu y avoir chez moi entre 10**7 et 10**8
    Il semble également mes performances se dégradent assez vite pètent littéralement un câble en ligne de commande mais reste cohérentes en session interactive là où les vôtres évoluent de manières proportionnelles.

    pouvez vous pousser le test un peu plus loin avec votre machine, peu être que vous aurez les mêmes effets que moi quelques puissances après.
    si vous faites le test sur une distribution classique et non anaconda que ce passe t'il ?

    ps: en testant sur mon antique laptop (Celeron 900, recyclé en serveur à tout faire) et j'ai exactement la même chose
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    user@linux-server:~/MDL$ ./venv_bot/bin/python -m timeit -s "i=0" "while i<10**6: i+=1"
    2000000 loops, best of 5: 98.1 nsec per loop
    user@linux-server:~/MDL$ ./venv_bot/bin/python -m timeit -s "i=0" "while i<10**7: i+=1"
    1 loop, best of 5: 846 msec per loop
    user@linux-server:~/MDL$ ./venv_bot/bin/python -m timeit -s "i=0" "while i<10**8: i+=1"
    1 loop, best of 5: 8.47 sec per loop

  4. #4
    Membre expérimenté
    J'ai continué mais là c'est long (les 10 loops) :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    marco5@marco5-All-Series:~$ python3 -m timeit -s "i=0" "while i<10**9: i+=1"
    10 loops, best of 3: 3.73 sec per loop
    Je suis sous linux Ubuntu, pas d'anaconda.
    En console, je suis sous spyder.
    Pas d'aide par mp.

  5. #5
    Membre éclairé
    je pense avoir compris le problème en fin de compte, c'est vraiment une erreur bête
    Le setup n'est pas réinitialisé à chaque fois (c'est logique en même temps), et quand il y a beaucoup de loops 2000000 à 10^6 contre 1 seule à 10^7 le test est biaisé.


###raw>template_hook.ano_emploi###