【发布时间】:2010-11-15 17:04:43
【问题描述】:
一方面,在 Haskell 中,Vector a 似乎是用作数字数组的首选类型。甚至还有一个(不完整的)Vector Tutorial。
另一方面,Control.Parallel.Strategies 主要是根据Traversable 定义的。向量库不提供这些实例。
Traversable t 的最小完整定义也应该定义Foldable 和
traverse :: Applicative f => (a -> f b) -> t a -> f (t b)
sequenceA :: Applicative f => t (f a) -> f (t a)
我看不出如何为Data.Vector.Unboxed.Vector 定义sequenceA。那么,用未装箱的向量编写并行代码的最佳方法是什么?定义一些新的临时策略,如 evalVector 或显式使用 par 和 pseq 或使用纯 Data.Array 而不是向量?
附:普通的Arrays 可以毫无问题地并行化:https://gist.github.com/701888
【问题讨论】:
-
有点急于 DPH 展示一些成果,是吗?
-
嗯,有点。我想尝试在 Haskell 中编写数字代码,但还不明白我应该使用什么。
-
我认为您的 parVector 版本行不通:
rseq不会评估任何元素(它唯一的 WHNF),V.concat是不必要的 O(n) 操作 -我们试图强制计算元素,不需要构造一个新的向量。 -
vLen - half也应该是vLen - 1,但这也不完全正确,因为它对我来说是段错误。 -
我将它作为包 vector-strategies 上传,因为它对广大观众来说似乎足够有用,但 Roman 不愿意添加到 Vector build-deps(可以理解)。
标签: haskell vector parallel-processing