Seite 1 von 1

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

Verfasst: Dienstag 9. Februar 2016, 21:34
von noisefloor
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

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

Verfasst: Mittwoch 10. Februar 2016, 00:11
von Dav1d
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.

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

Verfasst: Mittwoch 10. Februar 2016, 08:06
von Sirius3
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.

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

Verfasst: Mittwoch 10. Februar 2016, 12:51
von snafu
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.

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

Verfasst: Mittwoch 10. Februar 2016, 20:43
von noisefloor
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

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

Verfasst: Mittwoch 10. Februar 2016, 20:53
von Dav1d
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.

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

Verfasst: Mittwoch 10. Februar 2016, 21:54
von 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.

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

Verfasst: Donnerstag 11. Februar 2016, 06:36
von noisefloor
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

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

Verfasst: Donnerstag 11. Februar 2016, 07:36
von DasIch
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.