Jedna ręka, w języku Haskell Vector a
, wydaje się być preferowanym typem używanym jako tablica liczb. Istnieje nawet (niekompletne) Vector Tutorial.Jak napisać kod równoległy za pomocą wektorów Haskella?
Z drugiej strony, Control.Parallel.Strategies
są zdefiniowane głównie pod względem Traversable
. Biblioteka wektorowa nie zapewnia tych wystąpień.
Minimalna pełna definicja Traversable t
powinien również określić Foldable
i
traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
sequenceA :: Applicative f => t (f a) -> f (t a)
nie widzę jak sequenceA
można zdefiniować dla Data.Vector.Unboxed.Vector
. Jakie jest najlepsze podejście do pisania kodu równoległego z nieskrytymi wektorami? Zdefiniowanie niektórych nowych strategii ad hoc, takich jak evalVector
lub jawnie lub przy użyciu zwykłego Data.Array
zamiast wektorów?
P.S. Plain Array
s są parallelizable bez problemów: https://gist.github.com/701888
Trochę się obawiasz, że DPH da ci trochę owoców, prawda? –
Cóż, trochę. Chciałbym spróbować napisać kod liczbowy w Haskell i nie rozumiem jeszcze, co powinienem na to użyć. – sastanin
Nie sądzę, aby twoja wersja parVector działała: 'rseq' nie oceni żadnego z elementów (jego jedynego WHNF), a' V.concat' jest niepotrzebną operacją O (n) - próbujemy wymuszają obliczenia elementów, nie ma potrzeby konstruowania nowego wektora. –