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
如何解读Haskell+;RTS-s摘要输出_Haskell - Fatal编程技术网

如何解读Haskell+;RTS-s摘要输出

如何解读Haskell+;RTS-s摘要输出,haskell,Haskell,我已经对代码进行了一些性能测试,发现了+RTS-s标志,它显示了一系列关于程序执行情况的指标。但是我还没有找到一个完整的解释如何解释输出 我在sparks上找到了一些资源,并解释了它们是如何成为线程池的任务的 任务是什么意思 如何使用INIT,MUT等读取表格 在这种情况下,Productivity意味着什么 10:23:12 decision-tree-haskell $ stack exec -- performance-test +RTS -A200M -N -s 4,952,803

我已经对代码进行了一些性能测试,发现了
+RTS-s
标志,它显示了一系列关于程序执行情况的指标。但是我还没有找到一个完整的解释如何解释输出

我在sparks上找到了一些资源,并解释了它们是如何成为线程池的任务的

任务
是什么意思

如何使用
INIT
MUT
等读取表格

在这种情况下,
Productivity
意味着什么

10:23:12 decision-tree-haskell $ stack exec -- performance-test +RTS -A200M -N -s
   4,952,803,088 bytes allocated in the heap
       5,277,992 bytes copied during GC
       1,438,264 bytes maximum residency (2 sample(s))
          70,552 bytes maximum slop
             816 MB total memory in use (0 MB lost due to fragmentation)

                                     Tot time (elapsed)  Avg pause  Max pause
  Gen  0        22 colls,    22 par    0.036s   0.011s     0.0005s    0.0058s
  Gen  1         2 colls,     1 par    0.004s   0.001s     0.0006s    0.0010s

  Parallel GC work balance: 8.43% (serial 0%, perfect 100%)

  TASKS: 10 (1 bound, 9 peak workers (9 total), using -N4)

  SPARKS: 48 (48 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)

  INIT    time    0.009s  (  0.009s elapsed)
  MUT     time    9.846s  (  9.895s elapsed)
  GC      time    0.040s  (  0.013s elapsed)
  EXIT    time    0.001s  (  0.000s elapsed)
  Total   time    9.963s  (  9.916s elapsed)

  Alloc rate    503,030,959 bytes per MUT second

  Productivity  99.5% of total user, 99.8% of total elapsed

gc_alloc_block_sync: 808
whitehole_spin: 0
gen[0].sync: 9
gen[1].sync: 0

您看过GHC用户手册了吗

[…]接下来是CPU时间和挂钟时间,按运行时系统当时在做什么细分。INIT是运行时系统初始化。MUT是mutator时间,即实际运行代码所花费的时间。GC是执行垃圾收集所花费的时间。RP是进行固位体分析所花费的时间。PROF是用于进行其他分析的时间。EXIT是运行时系统关闭时间。最后,总数当然是总数

%GC时间告诉您GC占总数的百分比。“Alloc rate”告诉您“在堆中分配的字节数”除以MUT CPU时间。“生产率”告诉您在mutator(MUT)中花费的CPU和挂钟时间占总时间的百分比

因此INIT是启动GHC运行时系统所需的时间,EXIT是关闭它所需的时间,GC是垃圾收集器运行的时间,MUT是实际程序执行有用工作的时间

“已用”时间是实际的挂钟时间,而第一个数字是CPU时间。(例如,如果您有一个4核CPU,CPU时间可能会比墙壁时间长很多。不确定等待I/O的时间是多少。)


出于某种原因,我似乎找不到手册中的引用,但我相信“生产率”是运行代码所花费的墙时间的百分比(与运行垃圾收集器、等待I/O等相反)。

我无法提供详细的答案,但Haskell运行时系统初始化/关闭的初始和退出度量成本。GC度量垃圾收集的成本。MUT代表“mutator”,是实际运行程序的成本。在内存管理算法中,标准术语实际上是“收集器”与“变异器”。因此,对于您的程序,我们可以看到最小的运行时系统开销,大部分工作由程序本身完成。感谢您的回复。你有任何关于
任务
的信息吗?@TheHoff-Hmm,似乎没有记录在案。。。OOC,您正在运行哪个版本的GHC?目前我最好的猜测是“任务”实际上是线程。。。但这只是猜测。ghc 8.0.2版