Warum sollte ein Programm in runghc oder mit Profiling schneller sein?

9

Ich habe das folgende Programm, das eine große Eingabe (eine Liste von Erweiterung / Mime-Mapping, eine Liste von Dateien) und Ausgabeergebnisse Zeile für Zeile (der MIME-Typ für jede Datei).

%Vor%

Das Programm war ziemlich langsam, also fing ich an, es zu profilieren, und ich bekam ein seltsames Ergebnis.

Wenn mit

kompiliert %Vor%

Das Programm ist sehr langsam. Das -fprof-auto scheint jedoch alles zu beschleunigen. Zusammengestellt mit

%Vor%

macht es blitzschnell -prof allein hat keine Wirkung.

Seltsamerweise ist es auch sehr schnell, wenn es mit runghc coding.hs ausgeführt wird.

Ich habe keine Ahnung in welche Richtung ich von dort gehen soll. Versteht jemand, was hier passiert?

EDIT: Ich sollte erwähnen, dass mein ghc 7.10.1 ist.

    
madjar 09.05.2015, 15:05
quelle

1 Antwort

2

Um eine vollständige Antwort auf die Frage zu geben:

Wie Reid Barton bereits erwähnt hat, scheint das Problem die berüchtigte State Hack-Optimierung zu sein, die mimeMap in die wiederholte IO-Aktion einfügt und sie viel öfter als nötig ausführt. -fno-state-hack deaktiviert diese Optimierung und behebt das Problem. Eine andere Möglichkeit, das Problem zu lösen, ist eine strenge Evaluierung von '' mimeMap '' zu erzwingen.

%Vor%

Es scheint jedoch auch eine Regression in GHC 7.10 zu geben, in der -fno-state-hack dies tut löst das Problem nicht. Das erklärt, warum es das nicht für mich repariert hat.

Vielen Dank für Ihre Antworten.

    
madjar 13.05.2015, 07:06
quelle

Tags und Links