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?
Odpowiedz
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ć!
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 ...
- 1. Chess Optimizations
- 2. Przepustowość SIMD
- 3. Czy typy wektorów OpenCL używają SIMD
- 4. C++ SSE SIMD framework
- 5. SIMD kontra architektury wektorowe
- 6. Języki programowania SIMD
- 7. SIMD (AVX) porównaj
- 8. SIMD o następującym kodzie:
- 9. Wersje SIMD instrukcji SHLD/SHRD
- 10. Stałe pływaki z kartą SIMD
- 11. Operacje na wektorze drzewa (SIMD)
- 12. ARM NEON SIMD wersja 2
- 13. Tablica przeglądowa za pomocą SIMD
- 14. Czy należy używać rozszerzeń SIMD lub wektorowych lub czegoś innego?
- 15. Czy odwzorowanie macierzy 3x3 jest możliwe za pomocą instrukcji SIMD?
- 16. Czy jest jeszcze jakiś rozwój SIMD w Mono?
- 17. Czy Haskell ma foldlM?
- 18. Czy Haskell ma zmienne?
- 19. Czy można zakodować Haskell?
- 20. W Haskell, jak automatycznie wyprowadzić taką niestandardową klasę?
- 21. Czy Elm mieć równowartość Haskell w „Czytaj”
- 22. Dodawanie tablicy SIMD dla dowolnych długości tablic
- 23. SIMD (SSE) instrukcja do podziału w GCC
- 24. kompresji tablicy Rzadki pomocą SIMD (AVX2)
- 25. SSE (SIMD): pomnóż wektor przez skalarną
- 26. Biblioteki matematyczne SIMD dla SSE i AVX
- 27. newbie dla SIMD: proste filtrowanie obrazu
- 28. Czy IDisposable.Dispose() jest wywoływana automatycznie?
- 29. Czy firmastreamstream automatycznie zamyka pliki?
- 30. Czy HttpWebResponse .NET automatycznie dekompresuje odpowiedzi GZiped i Deflated automatycznie?
Istnieje oddział: https://github.com/haskell/vector/tree/simd, ale nie został opracowany za kilka lat. – cchalmers
Żadna z tych operacji SIMD nie wydaje się być używana przez 'Data.Vector' w kodzie źródłowym. –
Powiązane: http://stackoverflow.com/questions/1452309/generate-vector-code-from-haskell?rq=1 – Daenyth