哪个haskell数组实现使用?AKA各有利弊

rpg*_*rpg 12 arrays haskell multicore vectorization

我需要什么?[无序列表]

  • 非常简单的并行化
  • 支持地图,过滤等
  • 执行基于数组计算能力有效地,如A = B + C,有点像MATLAB阵列.
  • 生成SIMD代码.我想这在不久的将来是不可能的任何事情,但嘿,我可以问:)
  • 对矩阵的支持应该至少存在,更高的维度现在是较低的优先级.
  • 能够获得指向它的指针并从C指针创建一个指针.
  • 其他图书馆的支持.IE,绑定到流行的C数学包,i/o到磁盘或图像,如果数组是2D

我看到了什么?

  • haskell-platform中的数组包.这是幸运的,可以并行
  • Data.Vector.有循环融合,但不是在平台上,所以它的成熟度对我来说是未知的.
  • 维修包,由DPH团队提供,但今天对任何稳定的ghc都不能很好地运作.
  • 阵列实现的支持级别有很多变化.例如,似乎没有一种简单的方法将2D矢量转储到图像文件.IOW,haskell社区显然还没有确定阵列实现.

所以,请帮我选择.

编辑 A = B + C指的是元素加法,而不是列表串联

Tho*_*son 8

正确的是,社区尚未确定良好的阵列实施.我认为提交Vector API并删除Data.Array是一个很好的Haskell Prime提交.

矢量很成熟!它有:

  • 非常简单的并行化
  • 支持地图,过滤
  • 有效地执行基于数组的计算,例如A = B + C(但我与matlab的工作方式不一致)
  • 矢量创建从指针通过Vector.Storable

它不是:

  • 得到其他图书馆的足够支持.IE,绑定到流行的C数学包
  • 支持矩阵,但你可以有向量的向量.如果你构建一些基于矢量的矩阵运算,那么也许你可以上传到hackage作为矢量矩阵.
  • 生成SIMD代码.

注意:您可以将字节串转换为任意的向量,因此如果您将图像作为字节串,则通过Vector.Storable,您可以使用图像作为向量执行所需的操作.