L'heure entre parenthèses est l'heure de l'horloge murale. C'est le moment où un humain (vous) vit pendant que le programme fonctionne si vous regardez une horloge au mur. Le temps CPU est le temps Vos expériences de programme:
Si vous utilisez alors le drapeau -s
, lorsque votre programme se termine, vous verrez quelque chose comme ceci (les détails exacts varient en fonction de quel type de RTS que vous avez, par exemple, vous ne verrez que les données de profilage si votre RTS est compilé pour le profilage):
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
[...]
Ensuite il y a le temps CPU et l'heure horloge murale qui écoulée brisé par le système d'exécution a été fait à l'époque. INIT est ...
L'horloge murale est généralement supérieure à la durée de l'UC, sauf si vous utilisez plusieurs cœurs en même temps. Un exemple simple où le temps CPU est très faible et le temps horloge murale est élevée peut être obtenue en utilisant getLine
, sleep
et echo
:
$ {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
Comme vous pouvez le voir, le temps CPU MUT est faible, alors que le temps de l'horloge murale MUT est élevé, car l'application attend une entrée.
il est temps CPU vs horloge murale (ce que vous appelleriez le temps) - le premier est le temps de passer * réchauffement * le CPU - l'autre est-vous attendre le résultat – Carsten
dans ce cas, il semble que vous avez fait – Carsten
btw: il est là dans les docs: "Ensuite, il y a l'heure du processeur et l'heure de l'horloge murale" – Carsten