• # Les benchs c'est stupide...

    Posté par (site web personnel) . En réponse à la dépêche Gambas 3 est sorti le 31 décembre 2011. Évalué à 4.

    ... mais on aime ça! :)

    Je me suis amusé avec le premier benchmark, dont voici le code original :

    #!/usr/bin/python
    n = 500000
    x = 0.2
    def t(x):
     mu = 10.0
     pu = 0.0
     pol = [0] * 100
     r = range(0,100)
     for i in range(0,n):
     for j in r:
     pol[j] = mu = (mu + 2.0) / 2.0
     su = 0.0
     for j in r:
     su = x * su + pol[j]
     pu = pu + su
     return pu
    for i in range(0,10):
     print t(x)
    
    

    J'ai fait de très mineures modifications histoire que ça soit plus pythonique :

    #!/usr/bin/python
    n = 500000
    x = 0.2
    def t(x):
     mu = 10.0
     pu = 0.0
     pol = [0] * 100
     r = range(0, 100)
     for i in xrange(0, n): #Ici xrange pour pas allouer une grosse liste pour rien
     for j in r:
     pol[j] = mu = (mu + 2.0) / 2.0
     su = 0.0
     
     for val in pol: #ici j'itère sur la liste histoire de ne pas passer inutilement par un indice
     su = x * su + val
     pu += su # += pour faire bô
     return pu
    for i in range(0, 10):
     print t(x)
    
    

    Je passe sur ma machine de 231.824s à 209.599s, soit presque 10% de gain. Gambas reste donc bien plus rapide, ce qui montre bien que le typage statique permet des optimisations intéressantes, même avec un simple interpréteur.

    Puis j'ai rajouté ceci après le shebang:

    try:
     import psyco
     psyco.full()
    except ImportError:
     print 'No "psyco" module'
    
    

    Et (après avoir installé Psyco !) le code s'exécute en 84.306s, soit presque 3 fois plus rapidement. Évidemment Psyco c'est que x86 et plus trop maintenu, mais ça donne une idée de ce qu'on va avoir avec PyPy qui est annoncé comme 5 fois plus rapide que CPython.

    L'équipe de Gambas relèvera-t-elle le défi en implémentant du JIT (le suspens est à son comble) ?? :)

    J'en profite au passage pour féliciter ladite équipe pour son travail.