2015-06-03 9 views
8

Można napisać bibliotekę wektorową opartą na SIMD w Haskell, używając https://hackage.haskell.org/package/ghc-prim-0.4.0.0/docs/GHC-Prim.html#g:28, ale czy to ma sens? Natknąłem się na kilka artykułów poświęconych automatycznej optymalizacji SIMD w Haskell, ale jaki jest obecny status (2014)? Na przykład. będzie korzystać z SIMD lub lepiej napisać zoptymalizowaną bibliotekę ręcznie za pomocą prymitywów SIMD niskiego poziomu?Czy Haskell perfom SIMD optimizations automatycznie?

+1

Istnieje oddział: https://github.com/haskell/vector/tree/simd, ale nie został opracowany za kilka lat. – cchalmers

+1

Żadna z tych operacji SIMD nie wydaje się być używana przez 'Data.Vector' w kodzie źródłowym. –

+2

Powiązane: http://stackoverflow.com/questions/1452309/generate-vector-code-from-haskell?rq=1 – Daenyth

Odpowiedz

6

Nie ma absolutnie żadnego wektoryzacji auto SIMT w ghc w tej chwili. none

Obecne primery simd wywołają panikę GHC, gdy będą używane z genem natywnego kodu, choć będą działać z backendem -fllvm.

W przypadku tych simd primops, które zasadniczo nie mają dobrego modelu danych do tasowania danych, obecny model danych będzie wymagał znacznych poprawek, aby poprawnie obsługiwać tasowania.

backend llvm MAJ zrobić pewne optymalizacje auto Wektoryzacja na kodzie, ale chciałbym generalnie traktują auto wektoryzacji jako bonus, a nie założenia rdzeniowego w jaki kod zostanie zoptymalizowana, to wymaga trochę ostrożny audyt, aby potwierdzić!

8

Po pierwsze: nie miałem pojęcia, że ​​GHC ma nawet prymki na SIMD. Ładne znalezisko!

każdym razie, że na bok, moje rozumienie jest takie:

  • GHC rodzimy Codegen backend nie wyda instrukcji SIMD wszystko sama.
  • Opcjonalny backend LLVM może wyprodukować SIMD, nie wiem. Ale to nie jest domyślna trasa kompilacji; moje zrozumienie jest wciąż dość eksperymentalne.
  • Biorąc pod uwagę istnienie wspomnianych primops, biblioteka Vector mogłaby prawdopodobnie generować kod SIMD. Podejrzewam, że tak nie jest, ale jedyny sposób, by naprawdę wiedzieć na pewno, to poprosić autora (autorów) lub po prostu grep kodu źródłowego ...
  • Jeśli chcesz czegoś konkretnego, wydaje się, że całkiem rozsądnie jest samemu go zakodować . Nie mam pojęcia, jak dużo pracy byłoby to ...