【发布时间】:2023-03-18 06:13:02
【问题描述】:
我需要什么? [无序列表]
- 非常容易并行化
- 支持地图、过滤器等
- 能够高效地执行基于数组的计算,例如 A=B+C,有点像 matlab 数组。
- SIMD 代码的生成。我想这在不久的将来是不可能的,但是嘿,我可以问:)
- 至少应该支持矩阵,更高维度的优先级较低。
- 能够获取指向它的指针并从 C 指针创建一个。
- 来自其他库的支持。 IE,绑定到流行的 C 数学包,i/o 到磁盘或图像(如果数组是 2D)
我看到了什么?
- haskell 平台中的数组包。这是有福的,可以并行
- 数据.向量。有循环融合,但没有在平台上,所以它的成熟度对我来说是未知的。
- repa 包,由 DPH 团队提供,但不能很好地与任何稳定的 ghc今天一起使用。
- 对阵列实现的支持水平有很多变化。例如,there doesn't seem 是一种将 2D 矢量转储到图像文件的简单方法。 IOW,haskell 社区显然还没有解决数组实现。
所以请帮我选择。
EDIT A=B+C 指的是元素加法,而不是列表连接
【问题讨论】:
-
等等,您的要求不是要求有序列表吗?除非
+是union,否则我看不出A=B+C在无序列表上的意义。 -
@Dan 我想你误会了。对高效
A=B+C的请求指的是数字加法,而不是串联。所以在 Data.Vector 中是zipWith (+). -
@TomMD
zipWith通过将第一个列表的元素 1 与第二个列表的元素 1 配对来工作。换句话说,列表中元素的顺序很重要。当列表无序时,这意味着元素的顺序无关紧要,这就是为什么我说A=B+C在这种情况下是无稽之谈。 (如果有“第一个”元素,它是任意的,因为列表的顺序没有任何意义) -
@dan 哦,我明白了!您认为他希望数组没有排序。他只提到了“无序列表”,因为他希望向量库的哪些属性没有特定的顺序或偏好。
标签: arrays haskell multicore vectorization