DIM1 Repa 阵列与向量的性能对比
Performance of DIM1 Repa Array vs Vector
我编写了一个程序来使用 Repa 处理大量数据样本。性能是该程序的关键。大部分操作需要在多维数组上并行 maps/folds,而 Repa
非常适合这个。但是,我的程序中仍有一部分仅使用一维数组并且不需要并行性(即并行性开销会损害性能)。其中一些操作需要 take
或 fold
等带有自定义累加器的函数,Repa
不支持。所以我通过遍历 Repa
数组自己编写这些操作。
我是否最好使用 Vector 而不是 Repa
重写这些操作?它们会带来更好的性能吗?
我在某处读到一维 Repa
数组被实现为 Vector
s 'under the hood' 所以我怀疑 Vector
s 是否会产生更好的性能。另一方面,Vector
确实有一些很好的内置函数,我可以使用它们而不是自己编写它们。
我已经使用 Data.Vector.Unboxed
而不是 one-dimensional Data.Array.Repa
实现了程序的某些部分。除了一些小的改进,算法是相同的。对于顺序操作,Data.Vector.Unboxed
似乎比 one-dimensional Data.Array.Repa
快 4 倍。
我编写了一个程序来使用 Repa 处理大量数据样本。性能是该程序的关键。大部分操作需要在多维数组上并行 maps/folds,而 Repa
非常适合这个。但是,我的程序中仍有一部分仅使用一维数组并且不需要并行性(即并行性开销会损害性能)。其中一些操作需要 take
或 fold
等带有自定义累加器的函数,Repa
不支持。所以我通过遍历 Repa
数组自己编写这些操作。
我是否最好使用 Vector 而不是 Repa
重写这些操作?它们会带来更好的性能吗?
我在某处读到一维 Repa
数组被实现为 Vector
s 'under the hood' 所以我怀疑 Vector
s 是否会产生更好的性能。另一方面,Vector
确实有一些很好的内置函数,我可以使用它们而不是自己编写它们。
我已经使用 Data.Vector.Unboxed
而不是 one-dimensional Data.Array.Repa
实现了程序的某些部分。除了一些小的改进,算法是相同的。对于顺序操作,Data.Vector.Unboxed
似乎比 one-dimensional Data.Array.Repa
快 4 倍。