2014-03-07 12 views
18

Gibt es eine Möglichkeit, Haskell zum Ausführen auf dem Xeon Phi Coprozessor zu kompilieren?Ausführen von Haskell auf Xeon-Phi

Einige Forscher bei Intel haben auf dem Haskell Research Compiler kürzlich berichtet (die nicht öffentlich zugänglich sind, die im wesentlichen nicht reproduzierbaren macht ihre Ergebnisse) und die gemessene Haskell Gap (die zeigen, dass C in einigen Fällen übertrifft Haskell Leistung). Sie beschreiben eine Kompilierungsroute über eine Zwischensprache mit dem Namen Pillar (ähnlich C--) und kompilieren sie nach C, damit sie icc verwenden können, um Objektcode zu erstellen, der auf einem Phi ausführbar ist.

GHC unterstützt die Kompilierung zu LLVM oder generiert nativen Code direkt (NCG). Soweit ich weiß, gibt es weder ein NCG, das auf Phi abzielt, noch ein LLVM-Backend für Phi. Mit Zugriff auf icc scheint eine Route über C möglich, aber ich bin mir nicht sicher, wie realistisch es derzeit ist (ich denke, C-Code-Generator in GHC wird nicht mehr unterstützt, das gleiche gilt für LLVM IR-to -C Backend, korrigiere mich, wenn ich falsch liege).

So drei Routen in den Sinn kommen:

  1. Compile GHC in nicht registrierten Modus und mit -fvia-c dann mit icc

  2. Verwenden ältere GHC Version kompilieren C-Code zu generieren und dann Verwenden Sie ICC

  3. Verwenden Sie ältere LLVM Version über GHC LLVM gehen dann C von LLVM erzeugen und verwenden Sie dann icc

Welche Route praktikabelste ist (warum/warum nicht)? Gibt es andere Möglichkeiten (ich habe die Pillar Route verworfen, da die Tools wie pillar2c (noch?) Nicht öffentlich verfügbar sind).

Eine verwandte Frage ist über x86-Kompatibilität der Phi - es scheint wie SSE/AVX Anweisungen werden nicht unterstützt und einige Objektcode würde nicht ausgeführt werden, wenn mit z. gcc oder clang.

aktualisieren:

Nachdem an der LLVM Konferenz zu einigen Intel Leute im Chat, scheint es unwahrscheinlich, dass sie ihre Phi LLVM Backend veröffentlichen. Die nächste Generation von Xeon Phi wird jedoch AVX512 unterstützen.

Antwort

1

Wenn Sie Ihren Haskell über C kompilieren, ist das Ergebnis nicht darauf beschränkt, schneller als C zu sein, da Sie den C-Code direkt geschrieben haben könnten? Ihre Frage stellt fest, dass das Projekt, das Sie reproduzieren möchten, über eine andere Sprache kompiliert wurde.

Also ich bin mir nicht sicher, ob die verfügbaren Werkzeuge ausreichend fortgeschritten sind, um das zu tun, was Sie tun wollen, tut mir leid.

+4

Assembler, der aus idiomatischen C-Programmen erzeugt wird, ist potentiell weniger gut optimiert als einer, der aus Haskell (sogar über C) erzeugt wurde, aufgrund einiger Optimierungen, die aufgrund einiger Eigenschaften von funktionalen Sprachen möglich sind (z. B. Reinheit); das Projekt, das ich erwähnte, benutzt verschiedene Zwischensprachen, aber geht immer noch über C und ICC; Schreiben von C scheint für die Performance-Portabilität nicht durchführbar zu sein: Architekturen sind sehr vielfältig und entwickeln sich schnell, so dass man ein C-Programm auf jeder Architektur neu schreiben und neu abstimmen müsste, was (im Idealfall) ein hochentwickelter Compiler sein sollte machen – jev