Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 关于减少GHC中GC时间的一般建议_Optimization_Haskell_Garbage Collection_Ghc - Fatal编程技术网

Optimization 关于减少GHC中GC时间的一般建议

Optimization 关于减少GHC中GC时间的一般建议,optimization,haskell,garbage-collection,ghc,Optimization,Haskell,Garbage Collection,Ghc,当GHC编译的程序花费大量时间进行垃圾收集时,是否有任何通用规则可以遵循以发现原因?一般认为什么太多了?例如,一般来说,60%的生产率是可以接受的,还是表示代码可能有问题?下面是一个快速且非常不完整的列表: 测试和基准测试。哈斯克尔的几个弱点之一是难以预测时间和空间成本。如果你没有测试数据,你什么都没有 使用更好的算法。这听起来太简单了,但优化效率低下的算法就像敲打s**t的金子 从战略上使某些数据更加严格测试和基准测试目标是存储物理上较小的WHNF值,而不是产生该值的thunk,从而在最有效的

当GHC编译的程序花费大量时间进行垃圾收集时,是否有任何通用规则可以遵循以发现原因?一般认为什么太多了?例如,一般来说,60%的生产率是可以接受的,还是表示代码可能有问题?

下面是一个快速且非常不完整的列表:

  • 测试和基准测试。哈斯克尔的几个弱点之一是难以预测时间和空间成本。如果你没有测试数据,你什么都没有
  • 使用更好的算法。这听起来太简单了,但优化效率低下的算法就像敲打s**t的金子
  • 从战略上使某些数据更加严格测试和基准测试目标是存储物理上较小的WHNF值,而不是产生该值的thunk,从而在最有效的第一次传递中清除更多垃圾。寻找产生简单数据的复杂函数
  • 从战略上降低某些数据的严格性测试和基准测试目标是将大量数据的生成延迟到使用和丢弃之前,从而在最高效的第一次传递中清除更多的垃圾。寻找生成大型复杂数据的简单函数。另见科摩纳德
  • 策略性地使用数组和非固定类型,尤其请参见#2。关于圣莫纳德测试和基准测试所有这些都将更多原始数据放入更小更紧凑的内存中。要收集的垃圾更少了
  • 摆弄RTS设置(ghc特定)测试和基准测试目标是将GC与程序的内存需求“阻抗匹配”。我在这里比在1-5中更迷路,所以请咨询专家

  • 更好的垃圾收集有一个相当简单的前提:创建更少的垃圾,更快地收集垃圾,产生更少的内存分配/释放。你能做的任何可能导致这三种效果之一的事情都值得一试测试和基准测试

    分配更少的资源,您将获得更少的GC。我通常认为25%的GC是可以接受的,高于这个值,我开始寻找减少分配的方法。通常,用“+RTS-H”运行程序会有很大帮助。此外,使用-O2构建。您可以使用非评测构建获得
    -hT
    概要文件(当然需要
    -rtsopts
    ,但不需要
    -prof
    )。这可能会指出问题所在。@JohnL:是的,我使用的是
    -auto-all
    。那我就试试手动方式,谢谢。尽管我怀疑探查器正在禁用Data.Vector模块中的fusion,这导致了大部分差异…@Grzegorz:如果
    Vector
    软件包也安装了
    -auto-all
    ,您可能需要使用
    -auto
    重新安装它,或者不安装评测。这肯定会干扰融合。+1用于连接算法优化和处理粪便。给猪涂口红现在老了,呃: