【问题标题】:Performance of DIM1 Repa Array vs VectorDIM1 Repa 阵列与向量的性能
【发布时间】:2017-01-25 13:08:49
【问题描述】:

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

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

我在某处读到一维Repa 数组被实现为Vectors '在引擎盖下',所以我怀疑Vectors 会带来更好的性能。另一方面,Vector 确实有一些不错的内置函数,我可以使用它们而不是自己编写它们。

【问题讨论】:

  • Repa 对所有维度都使用 Unboxed(U) 或 Storable(F) 向量,而不仅仅是DIM1。所以,我想说,如果你不需要并行处理那些DIM1数组,你最好直接使用vector包。
  • 是的,你是对的。每个 N 维数组在底层都是一个向量。它只是改变的形状。

标签: haskell vector repa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2016-12-03
    • 1970-01-01
    • 2020-11-09
    • 2016-04-11
    • 2013-07-28
    相关资源
    最近更新 更多