gpt4 book ai didi

haskell - 这个统计输出是什么意思?

转载 作者:行者123 更新时间:2023-12-02 03:14:44 25 4
gpt4 key购买 nike

所以我有一个基于 io-streams 的管道,我刚刚运行(解释)并使用 -s 转储统计信息:

    123,680 bytes allocated in the heap
3,464 bytes copied during GC
68,912 bytes maximum residency (1 sample(s))
13,008 bytes maximum slop
1 MB total memory in use (0 MB lost due to fragmentation)

Tot time (elapsed) Avg pause Max pause
Gen 0 0 colls, 0 par 0.000s 0.000s 0.0000s 0.0000s
Gen 1 1 colls, 0 par 0.000s 0.000s 0.0002s 0.0002s

INIT time 0.000s ( 0.000s elapsed)
MUT time 0.001s (299.935s elapsed)
GC time 0.000s ( 0.000s elapsed)
EXIT time 0.000s ( 0.000s elapsed)
Total time 0.134s (299.936s elapsed)

%GC time 0.2% (0.0% elapsed)

Alloc rate 106,371,724 bytes per MUT second

Productivity 99.7% of total user, 0.0% of total elapsed

所以基本上没有时间花在垃圾收集上。但是我感到困惑的是括号中的时间。来自 the docs括号中的时间和时间之间的区别是什么并不明显。任何人都可以对此有所了解吗?

最佳答案

括号中的时间是挂钟时间。如果你看着墙上的时钟,这是一个人(你)在程序运行时所经历的时间。 CPU 时间是你的程序经历的时间:

If you use the -s flag then, when your program finishes, you will see something like this (the exact details will vary depending on what sort of RTS you have, e.g. you will only see profiling data if your RTS is compiled for profiling):

    36,169,392 bytes allocated in the heap
4,057,632 bytes copied during GC
1,065,272 bytes maximum residency (2 sample(s))
54,312 bytes maximum slop
3 MB total memory in use (0 MB lost due to fragmentation)

Generation 0: 67 collections, 0 parallel, 0.04s, 0.03s elapsed
Generation 1: 2 collections, 0 parallel, 0.03s, 0.04s elapsed

SPARKS: 359207 (557 converted, 149591 pruned)

INIT time 0.00s ( 0.00s elapsed)
MUT time 0.01s ( 0.02s elapsed)
GC time 0.07s ( 0.07s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 0.08s ( 0.09s elapsed)

%GC time 89.5% (75.3% elapsed)

Alloc rate 4,520,608,923 bytes per MUT second

Productivity 10.5% of total user, 9.1% of total elapsed

[…]

Next there is the CPU time and wall clock time elapsed broken down by what the runtime system was doing at the time. INIT is …

挂钟时间通常大于 CPU 时间,除非您同时使用多个内核。使用 getLinesleep 可以实现 CPU 时间非常而挂钟时间很高的简单示例回声:

$ {sleep 10; echo 1} | ghc -e 'getLine' +RTS -s > /dev/null

32,006,664 bytes allocated in the heap
20,644,024 bytes copied during GC
5,813,624 bytes maximum residency (6 sample(s))
156,360 bytes maximum slop
12 MB total memory in use (0 MB lost due to fragmentation)

Tot time (elapsed) Avg pause Max pause
Gen 0 37 colls, 0 par 0.011s 0.011s 0.0003s 0.0009s
Gen 1 6 colls, 0 par 0.052s 0.052s 0.0087s 0.0105s

TASKS: 5 (1 bound, 4 peak workers (4 total), using -N1)

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

INIT time 0.001s ( 0.001s elapsed)
MUT time 0.016s ( 9.903s elapsed) <------------
GC time 0.063s ( 0.063s elapsed)
EXIT time 0.010s ( 0.010s elapsed)
Total time 0.125s ( 9.977s elapsed)

Alloc rate 1,956,305,120 bytes per MUT second

Productivity 48.7% of total user, 0.6% of total elapsed

如您所见,MUT CPU 时间很短,而 MUT 挂钟时间很长,因为应用程序等待输入。

关于haskell - 这个统计输出是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37696504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com