Begrenzte Berechnung in Haskell

8

Gibt es einen Weg in Haskell (mit GHC, wenn es darauf ankommt, für Code, der unter Linux und Windows laufen muss), beschränkte Berechnungen durchzuführen? Das heißt, "berechne das Ergebnis dieser Funktion, wenn es machbar ist, aber wenn der Versuch mehr als X CPU-Zyklen, Y-Stapelspeicher oder Z-Stapelspeicherplatz verwendet hat und immer noch nicht beendet ist, halte an und gebe einen Hinweis darauf zurück war es nicht möglich, die Berechnung abzuschließen "?

    
rwallace 27.05.2012, 06:54
quelle

3 Antworten

8
%Vor%

Ссылка

    
Louis Wasserman 27.05.2012, 07:06
quelle
6

Hier ist eine hackische Lösung, die Sie ausprobieren könnten: Erzeugen Sie Ihre Berechnung mit forkIO , und lassen Sie den übergeordneten Thread (oder einen Überwachungsthread, der Zugriff auf den ThreadId des gegabelten Threads hat) regelmäßig abfragen jede Menge, die Sie wollen, und werfen Sie eine asynchrone Ausnahme auf den Computing-Thread wie nötig (interessanterweise, genau so funktioniert timeout .)

Die nächste Frage wäre, ob es einen Weg gibt, herauszufinden, wie groß der Heap derzeit in Haskell ist. Gesamtspeicherverbrauch und Zyklen können Sie herausfinden, indem Sie Shell-Befehle erzeugen oder das Betriebssystem auf andere Weise abfragen (ich würde nicht wissen, wie man das unter Windows macht).

Es ist keine perfekte Lösung, aber es ist eine einfache Lösung, die Sie in ein paar Minuten implementieren und testen können.

    
Aleksandar Dimitrov 27.05.2012 09:30
quelle
6

Auf einer Pro-Prozess-Ebene können Sie die RTS-Optionen von GHC verwenden zur Steuerung der maximalen Stapel- und Heap-Größen.

    
Daniel Wagner 27.05.2012 14:46
quelle

Tags und Links