Als Beginner und aus Interesse habe ich mal das Programm auf
http://smallshire.org.uk/sufficientlysm ... ttributes/
in C Code übersetzt. Hier meine Implementierung:
http://pastebin.com/UYEpGQuu
Für Baumtiefe = 24 benötigt die Python-Variante unter PyPy bei mir 8 Sekunden, ein mit MinGW (mit -O3) kompiliertes Programm 10 Sekunden.
Da hat mich zunächst stutzig gemacht.
Dann habe ich das Programm mit Tiny C Compiler kompiliert und komme auf eine Sekunde.
Wie kann das sein, dass das mit MinGW kompilierte Programm das zehnfache an Zeit benötigt ?
MinGW Schrott ?
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: MinGW Schrott ?
Hast du es schon ohne -O3 compiliert, bzw -O0?Wie kann das sein, dass das mit MinGW kompilierte Programm das zehnfache an Zeit benötigt ?
Optimierungen sind nicht immer das Gelbe vom Ei.
Auch hier sieht man, was unterschiedliche Implementierungen für das Resultat bedeuten:
http://www.proggen.org/doku.php?id=project:wordcount
Da die Compiler alle leicht unterschiedlich arbeiten, kann es sein, dass du den worst-case Code geschrieben hast, den man für gcc schreiben konnte

Probiere es doch auch mal mit dem Visual Studio C Compiler.
Leider kann ich mir deinen Code nicht anschauen, da die Firewall hier das verbietet.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: MinGW Schrott ?
Hab den Fehler gefunden, das falsche Build Target ausgewählt
Asche über mein Haupt.
P.S.: So schlecht kann meine Implementierung nicht sein, läuft immerhin 8x so schnell wie PyPy

Asche über mein Haupt.
P.S.: So schlecht kann meine Implementierung nicht sein, läuft immerhin 8x so schnell wie PyPy

- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: MinGW Schrott ?
Man möge doch Bitte Äpfel nicht mit Birnen vergleichen.PyPy
Python wird immer Langsamer sein als C-Code mit vergleichbarer Funktionalität, da es eine Interpreter-Sprache ist.
Bevor irgendwas passieren kann, muss es erst in Maschinencode gewandelt werden, dass kostet Zeit. Diese Zeit wird für C/C++ nur einmal aufgewendet, beim Compilieren, danach muss nur noch ausgeführt werden.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: MinGW Schrott ?
PyPy und C vergleichen ist in diesem Fall sinnvoll, da es ja darum ging, zu überprüfen ob für das Compilat richtige Einstellungen gewählt wurden.
Wenn man Python mit besserer oder beinahe C-Geschwindigkeit haben möchte, möge man entsprechende Libs wie Scipy/Numpy verwenden oder in Cython/Fortran coden.
Wenn man Python mit besserer oder beinahe C-Geschwindigkeit haben möchte, möge man entsprechende Libs wie Scipy/Numpy verwenden oder in Cython/Fortran coden.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: MinGW Schrott ?
Python bietet ein anderes Konzept. Baut der Entwickler auf diese Eigenschaften auf, muss die C-Portierung diese Eigenschaften erhalten und eine entsprechende Umgebung bieten. Der Aufwand für diese zusätzliche Umgebung wird immer bedeuten, dass C schneller unterwegs ist. Die Umgebung in der C läuft ist die native Maschine.sebix hat geschrieben:Wenn man Python mit besserer oder beinahe C-Geschwindigkeit haben möchte,
Zum Thema Fortran sei auf das Fortran-Tutorial verwiesen. Man beachte die Jahreszahl...sebix hat geschrieben:möge man entsprechende Libs wie Scipy/Numpy verwenden oder in Cython/Fortran coden.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.