Der „CPS“ -Ansatz hat die Leistung in SML / NJ stark beeinträchtigt. Argumentation erwünscht


11

In einem Kommentar zu Learning F #: Welche Bücher mit anderen Programmiersprachen können in F # übersetzt werden, um funktionale Konzepte zu lernen? Makarius erklärte:

Beachten Sie, dass der "CPS" -Ansatz die Leistung in SML / NJ erheblich beeinträchtigt hat. Das physikalische Bewertungsmodell verstößt gegen zu viele Annahmen, die in die Hardware integriert sind. Wenn Sie große symbolische Anwendungen von SML wie Isabelle / HOL verwenden, wird SML / NJ mit CPS ca. 100-mal langsamer als Poly / ML mit seinem herkömmlichen Stack.

Kann jemand die Gründe dafür erklären? (Vorzugsweise mit einigen Beispielen) Gibt es hier eine Impedanzfehlanpassung?


1
Ich verstehe, dass Hardware eine Stack-Disziplin voraussetzt, und daher ist der CPS-Ansatz ein Leistungsverlust, wenn diese Annahme nicht eingehalten wird. Aber das ist nur meine uninformierte Meinung.
Andrej Bauer

Antworten:


9

In erster Näherung gibt es einen Unterschied in der "Lokalität" des Speicherzugriffs, wenn ein Programm nur im CPS-Stil auf dem Heap vorwärts läuft, anstatt das traditionelle Vergrößern und Verkleinern des Stapels. Beachten Sie auch, dass CPS immer GC benötigt, um Ihre scheinbar lokalen Daten auf dem Heap wiederherzustellen. Diese Beobachtungen allein wären vor 10 oder 20 Jahren ausreichend gewesen, als die Hardware viel einfacher war als heute.

Ich bin selbst weder ein Hardware- noch ein Compiler-Guru. Als zweite Annäherung sind hier einige konkrete Gründe für die ca. Faktor 100 in Isabelle / HOL gesehen:

  • Grundlegender Leistungsverlust nach der "ersten Annäherung" oben.

  • SML / NJ-Heap-Management und GC haben schwerwiegende Probleme bei der Skalierung über mehrere zehn MB hinaus. Isabelle verwendet jetzt routinemäßig 100-1000 MB, manchmal mehrere GB.

  • Die SML / NJ-Kompilierung ist sehr langsam - dies kann völlig unabhängig sein (beachten Sie, dass Isabelle / HOL die Laufzeitkompilierung und den laufenden Code abwechselt).

  • In SML / NJ fehlt natives Multithreading - nicht völlig unabhängig, da CPS als "Rollen Sie Ihre eigenen Threads im Benutzerbereich ohne separate Stapel" angekündigt wurde.

Die Korrelation von Heap und Threads wird auch in dem Artikel von Morriset / Tolmach PPOPP 1993 "Procs and Locks: Eine tragbare Multiprocessing-Plattform für Standard-ML von New Jersey" ( CiteSeerX ) erörtert. Hinweis: PDF bei CiteSeerX ist rückwärts, Seiten von 10- 1 statt 1-10.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.