Seite 2 von 2

Re: Python beschleunigen: Pyrex, weave, C++, Cython -- und n

Verfasst: Montag 9. Mai 2011, 20:25
von numerix
Tyrax hat geschrieben:Wegen Psyco: Ich habe mir mal die mutmaßliche Homepage http://psyco.sourceforge.net angesehen, auf der auf das Nachfolgeprojekt PyPy hingewiesen wird. Ich habe mir dazu einige Seiten angesehen und hatte den Eindruck, dass PyPy keine Nachteile gegenüber Psyco hat. Liege ich da richtig?
Ein "Nachteil" könnte die schlechtere Performance sein - das hängt jedoch stark vom Einzelfall ab. Im konkreten Fall - Verwendung von random.gauss() - tun sich die beiden so gut wie nichts. Die Laufzeit halbiert sich in etwa im Vergleich zum normalen CPython. Die schnellste Laufzeit liefert auf meinem Rechner pypy-1.3 (verglichen mit pypy-1.4, pypy-1.5 und psyco).

Re: Python beschleunigen: Pyrex, weave, C++, Cython -- und n

Verfasst: Dienstag 10. Mai 2011, 08:36
von b.esser-wisser
Evtl kannst du das noch beschleunigen, in dem du den float-Vergleich 'richtig' machst ('abs(x-y) < EPSILON', mit einem passenden EPSILON).
Folgendes braucht hier ~3min, die originale Funktion ist nach ~20min noch nicht fertig.

Code: Alles auswählen

def dummy_funktion(a, b, c, d):
    gauss = random.gauss
    eps = 1.0e-8
    while True:
        x = gauss(a, b)
        y = gauss(c, d)
        if abs(x-y) < eps:
            break
    return x

Re: Python beschleunigen: Pyrex, weave, C++, Cython -- und n

Verfasst: Dienstag 10. Mai 2011, 12:49
von Tyrax
Danke für den Hinweis, aber dass die ursprünglich von mir gepostete Funktion kein sinnvolles Problem beschreibt, wurde schon mehrfach angemerkt. Dein epsilon ist gerade die 'Kontaktdistanz' die ich in meinem vorletzten Beitrag erwähnt hatte. Der von Dir vorgeschlagene dummy_Funktion ist imho schneller, weil sie einfach etwas anderes simuliert.

Naja, ich werde mir in Zukunft alle Mühe geben, etwas weniger sinnlose Minimalbeispiele zu basteln.

Re: Python beschleunigen: Pyrex, weave, C++, Cython -- und n

Verfasst: Dienstag 10. Mai 2011, 15:38
von JonasR
b.esser-wisser hat geschrieben:Folgendes braucht hier ~3min, die originale Funktion ist nach ~20min noch nicht fertig.
Solltest die Aussage nochmal überdenken :P Es ist doch gar nicht gesagt dass beide Aufrufe die gleiche Anzahl an Durchläufen brauchten.
Wenn ich jetzt etwas an der Funktion umschreibe und sie zufällig nach einem Durchlauf fertig ist ist es nicht unbedingt die performanteste.

Re: Python beschleunigen: Pyrex, weave, C++, Cython -- und n

Verfasst: Dienstag 10. Mai 2011, 16:28
von b.esser-wisser
@JonasR: ich hab random schon vor jedem Test gleich ge-seed()-et

Re: Python beschleunigen: Pyrex, weave, C++, Cython -- und n

Verfasst: Dienstag 10. Mai 2011, 17:19
von Tyrax
@b.esser-wisser: Wie ich schon geschrieben habe: Der Grund dafür, dass Deine Funktion schneller ist, liegt einfach darin, dass Du einen anderen Prozess simulierst. Du kannst ja mal die Schleifendurchläufe in beiden mitzählen und das prüfen.

An der Stelle bringt auch ein identischer Seed nix.