Test viteza Go fata de Python

Categorii: Programare

26-Mar-2015 23:27 - 537 vizionari

Un mic test, inspirat de un articol de pe Internet.

De un miliard de ori se fac niste calcule, care sunt afisate in final.
In plus am pus o conditie ca, atunci cand valoarea calculata ajunge mai mica decat o valoare anume, sa fie reinitializata.

Astfel am pacalit compilatorul sa genereze cod care calculeaza de un miliard de ori ceva.
Daca variabila nu este folosita, tot codul asociat cu ea este eliminat, dar afisand valoarea la final, determin compilatorul sa nu elimine bucla de un miliard.

Daca variabila ajunge la valoarea zero, presupun (optimizare in timpul executiei facuta de procesor) ca toate calculele sunt sarite (la inmultire) si executia este mult simplificata.
Nu sunt sigur daca exista o optimizare la executia programului la nivel de instructiuni, cand variabila atinge o valoare predictibila (0, 1, infinit, etc), dar ca sa evit rezultatul zero, am reinitializat variabila.

Se pare ca Pypy are viteza comparabila cu Go.

Si se mai pare ca unele procesoare fac optimizari in timpul executiei si inmultirea cu numele apropiate de zero este mai dificila (ia timp mai mult) fata de restul operatiilor de inmultire.

 

Rezultatul este urmatorul:

benchmark-test-go-py-un-miliard

Pythonul in varianta Pypy este de 2 ori mai lent decat Go si sunt foarte impresionat.
Pythonul in varianta standard (cpython) este o suta de ori mai lent decat Go.
Interesant mai este rezultatul calculului, care este identic la Go si la Pypy, iar python 2.6 standard calculeaza ceva usor diferit.
Am afisat la final valoarea lui i (1 miliard) ca dovada ca bucla a fost efectuata 100%.

 

Codul in Python este incredibil de simplu:

un-miliard-python

 

Codul in Go este un pic mai complex, dar mai elegant:

un-miliard-go

 

Testul este prea simplu ca sa fie relevant si este si inconsistent.

Daca am eliminat testul de zero, am obtinut alte valori: Go in 16 sec, Pypy in 18.49 sec si Python 2.6 in 335.93 sec.
Pypy are o viteza este comparabila cu Go la inmultirea de valori reale si probabil si-o mentine si in restul activitatilor.
Se pare ca acum Python standard este de 20 de ori mai lent decat Go:

benchmark-test-go-py-un-miliard-2



Ultimele pagini: RSS

Alte adrese de Internet

Categorii

Istoric



Contorizari incepand cu 9 iunie 2014:
Flag Counter

Atentie: Continutul acestui server reprezinta ideile mele si acestea pot fi gresite.