Một mặt, trong Haskell Vector a
có vẻ là loại ưa thích để sử dụng làm một dãy số. Thậm chí còn có một (không đầy đủ) Vector Tutorial.Làm thế nào để viết mã song song với vectơ Haskell?
Mặt khác, Control.Parallel.Strategies
được xác định chủ yếu theo số Traversable
. Thư viện Vector không cung cấp các trường hợp này.
Định nghĩa hoàn thành tối thiểu của Traversable t
cũng nên xác định Foldable
và
traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
sequenceA :: Applicative f => t (f a) -> f (t a)
Tôi không thấy như thế nào sequenceA
thể được định nghĩa cho Data.Vector.Unboxed.Vector
. Vì vậy, cách tiếp cận tốt nhất để viết mã song song với vectơ không hộp là gì? Xác định một số chiến lược quảng cáo mới như evalVector
hoặc sử dụng par
và pseq
một cách rõ ràng hoặc sử dụng đồng bằng Data.Array
thay vì vectơ?
P.S. Đồng bằng Array
s là song song mà không có vấn đề: https://gist.github.com/701888
Có một chút lo lắng cho DPH thể hiện một số trái cây, đúng không? –
Vâng, sắp xếp. Tôi muốn thử viết mã số trong Haskell, và không hiểu những gì tôi nên sử dụng cho điều đó. – sastanin
Tôi không nghĩ rằng phiên bản parVector của bạn sẽ hoạt động: 'rseq' sẽ không đánh giá bất kỳ phần tử nào (WHNF duy nhất của nó) và' V.concat' là một hoạt động O (n) không cần thiết - chúng tôi đang cố gắng buộc tính toán của các phần tử, không cần phải xây dựng một vectơ mới. –