DIM1 Repa 阵列与向量的性能对比

Performance of DIM1 Repa Array vs Vector

我编写了一个程序来使用 Repa 处理大量数据样本。性能是该程序的关键。大部分操作需要在多维数组上并行 maps/folds,而 Repa 非常适合这个。但是,我的程序中仍有一部分仅使用一维数组并且不需要并行性(即并行性开销会损害性能)。其中一些操作需要 takefold 等带有自定义累加器的函数,Repa 不支持。所以我通过遍历 Repa 数组自己编写这些操作。

我是否最好使用 Vector 而不是 Repa 重写这些操作?它们会带来更好的性能吗?

我在某处读到一维 Repa 数组被实现为 Vectors 'under the hood' 所以我怀疑 Vectors 是否会产生更好的性能。另一方面,Vector 确实有一些很好的内置函数,我可以使用它们而不是自己编写它们。

我已经使用 Data.Vector.Unboxed 而不是 one-dimensional Data.Array.Repa 实现了程序的某些部分。除了一些小的改进,算法是相同的。对于顺序操作,Data.Vector.Unboxed 似乎比 one-dimensional Data.Array.Repa 快 4 倍。