math.factorial - 2.7 vs. 3.4 vs. pypy 2.2.1

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

warum ist denn die folgende Python-Zeile:

Code: Alles auswählen

a = math.factorial(math.factorial(9))
In Python 3.4 signifikant schneller als unter Python 2.7. und dieses ist signifikant schneller als pypy 2.2.1?

Zeiten:
Python 3.4: ca. 2,5s
Python 2.7: ca. 50s
pypy 2.2.1: ca. 120s

Mehrfach ausprobiert, Ergebnis ist immer ungefähr gleich. Bei den Differenzen kommt es ja nicht auf 1 oder 2 Sekunden an.
Alles unter Ubuntu 14.04., alle Pythons aus den offiziellen Paketquellen.

Besonders das pypy so lahm ist wundert mich - sonst, wenn ich es mal wegen "ich brauche mehr Geschwindigkeit" genutzt habe, war es bei gleichem Code schneller als P2.7 und 3.4

Gruß, noisefloor
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Wegen PyPy: chat.freenode.net/#pypy dort freuen sie sich immer solche Sachen und sind recht schnell im 'Bug' beheben und schneller werden als Python.
the more they change the more they stay the same
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

da es sich hier um Rechnungen mit GROSZEN Zahlen handelt, werden sowieso mehr oder weniger hochoptimierte Algorithmen verwendet. Wahrscheinlich wurde bei Python3 für den Spezialfall Fakultät noch einmal optimiert. Ein JIT hat da keinen Vorteil, eher im Gegenteil, weil man dort versucht ist, so wenig Spezielfälle zu behandeln wie möglich.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Der in `math.factorial()` verwendete Algorithmus wurde in 2010 durch einen verbesserten Algorithmus ersetzt. Der zugehörige Commit findet sich hier. Offiziell ist diese Verbesserung dann mit dem Release von Python 3.2 erschienen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@snafu: thx!

Jetzt wäre noch interessant, warum pypy so viel langsamer ist - aber mein Hauptanliegen, P2.7 vs. P3.4 ist damit klar :-)

Gruß, noisefloor
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

noisefloor hat geschrieben:Jetzt wäre noch interessant, warum pypy so viel langsamer ist - aber mein Hauptanliegen, P2.7 vs. P3.4 ist damit klar :-)
IRC, die PyPy-Devs freuen sich immer über sowas und sind schnell dabei das zu fixxen.
the more they change the more they stay the same
BlackJack

@noisefloor: Bevor Du auf IRC fragst, solltest Du aber vielleicht mal ein *aktuelles* PyPy installieren. Im Oktober letztes Jahr was 4.0.0 aktuell. Und das braucht auf meinem Rechner auch nur 2,5 Sekunden.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,


eigentlich wollte ich auch gar nicht da im IRC fragen ;-)

Aber danke für den Hinweis. Hatte nämlich noch nie nachgeschaut, wie als das pypy aus den 'universe' Quellen von Trusty ist.


Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

noisefloor hat geschrieben:Aber danke für den Hinweis. Hatte nämlich noch nie nachgeschaut, wie als das pypy aus den 'universe' Quellen von Trusty ist.
Einfache Grundregel: Alles was du mit apt-get installieren kannst ist zu alt, es sei den du weisst dass das Gegenteil der Fall ist. Das gilt prinzipiell für alle Pakete und für Pakete die für Entwickler interessant sind ganz besonders.
Antworten