2015-06-03 5 views
8

Es ist möglich, SIMD-basierte Vektorbibliothek in Haskell mit https://hackage.haskell.org/package/ghc-prim-0.4.0.0/docs/GHC-Prim.html#g:28 schreiben, aber wird es Sinn machen? Ich bin auf einige Artikel gestoßen, die der automatischen SIMD-Optimierung in Haskell gewidmet sind, aber was ist der aktuelle Stand (2014)? Z.B. wird https://hackage.haskell.org/package/vector SIMD verwenden oder ist es besser, die optimierte Bibliothek manuell zu schreiben, indem Low-Level-SIMD-Primitive verwendet werden?Führt Haskell SIMD-Optimierungen automatisch durch?

+1

Es gibt einen Zweig: https://github.com/haskell/vector/tree/simd, aber es wurde in ein paar Jahren nicht gearbeitet. – cchalmers

+1

Keine dieser SIMD-Operationen scheint von 'Data.Vector' im Quellcode verwendet zu werden. –

+2

Zugehörig: http://stackoverflow.com/questions/1452309/generate-vector-code-from-haskell?rq=1 – Daenyth

Antwort

6

Es gibt absolut keine automatische Vektorisierung wrt SIMD in Ghc im Moment. keine

die aktuellen simd primops werden eine GHC panic auslösen, wenn sie mit dem nativen code gen verwendet werden, obwohl sie mit dem -fllvm backend funktionieren werden.

Den Simd-Primops fehlt es entscheidend an einem guten Datenmodell für die Datenmischung, das aktuelle Datenmodell wird eine ziemlich umfangreiche Überarbeitung benötigen, um simd shuffles richtig zu unterstützen.

das llvm Backend MAY bestimmte Auto Vektorisierung Optimierungen auf Code zu tun, aber ich würde die automatische Vektorisierung als Bonus statt einer Grundannahme, wie Code optimiert wird im Allgemeinen behandeln, erfordert es einige sorgfältige Revision zu überprüfen!

8

Erstens: Ich hatte keine Ahnung, dass GHC Primoren für SIMD hatte. Schöner Fund! dieser

Wie auch immer, abgesehen davon, ist mein Verständnis:

  • Das GHC nativen codegen Backend wird nie SIMD-Befehle emittiert alle von selbst aus.
  • Das optionale LLVM-Backend kann SIMD produzieren, weiß ich nicht. Aber das ist nicht die Standard-Kompilierungsroute. Mein Verständnis ist es immer noch eher experimentell.
  • Angesichts der Existenz der Primops, die Sie erwähnen, könnte die Vector-Bibliothek möglicherweise SIMD-Code generieren. Ich vermute, dass es nicht ist, aber der einzige Weg, um wirklich sicher zu wissen, ist die Autor (en) zu fragen oder einfach den Quellcode grep ...
  • Wenn Sie etwas bestimmtes wollen, scheint es völlig in Ordnung zu sein, es selbst zu programmieren . Ich habe keine Ahnung, wie viel Arbeit es wäre ...