Wie bekomme ich die Laufzeit eines Programms in Haskell?

8

Wie kann ich die Laufzeit eines Programms durch Systemzeitfunktionen in Haskell ermitteln? Ich möchte die Ausführungszeit eines ganzen Programms und / oder einer einzelnen Funktion messen.

    
4castle 11.05.2011, 18:06
quelle

4 Antworten

11

Angenommen, Sie möchten nicht nur die Gesamtlaufzeit Ihres Programms messen, so:

%Vor%

Dann können Sie in Haskell eine Berechnung auf verschiedene Arten durchführen:

Wenn Sie eine statistisch fundierte Messung wünschen, sollten Sie

beachten

Schließlich müssen Sie in allen Fällen über eine faule Bewertung nachdenken: Möchten Sie die Kosten für die vollständige Auswertung der von Ihnen erzeugten Daten oder nur für den äußersten Konstruktor messen?

    
Don Stewart 11.05.2011, 18:13
quelle
19

1) Wenn Sie etwas benchmarken möchten, verwenden Sie das Kriterium -Paket.

2) Wenn du eine Funktion zeitlich bestimmen willst und positiv bist, hast du für Faulheit nach Bedarf gesteuert, dann benutze Data.Time.getCurrentTime von der time Paket.:

%Vor%

Eine bessere Verpackung des obigen Musters finden Sie im Paket timeit .

3) Wenn Sie tatsächlich die Laufzeit eines Programms wünschen, das gerade in Haskell geschrieben ist, dann benutzen Sie Ihr System time . Für die meisten POSIX-Systeme (Mac, Linux) einfach ausführen:

%Vor%

Und es meldet Benutzer-, Wand- und Systemzeit.

    
Thomas M. DuBuisson 11.05.2011 18:13
quelle
3

Ich bin mir nicht sicher, wie genau es ist, aber die Verwendung von :set +s in ghci zeigt die Zeit und den Platz für nachfolgende Berechnungen an.

    
Dan Burton 11.05.2011 19:22
quelle
3

:set +s ist wirklich ordentlich, wenn Sie ghci verwenden, sonst können Sie Criterion.Measurement verwenden, siehe meine Antwort auf eine andere Frage mit Beispiel .

    
Zane XY 23.03.2014 07:02
quelle