File: mlrisc-timing.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (34 lines) | stat: -rw-r--r-- 874 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(* mlrisc-timing.sml
 *
 * COPYRIGHT (c) 2002 Bell Labs, Lucent Technologies
 *)

signature MLRISC_TIMING =
sig

    val timePhase : string -> ('a -> 'b) -> 'a -> 'b
end

structure MLRiscTiming : MLRISC_TIMING =
struct

   fun timePhase name f =
   let val timing = MLRiscControl.timing name
       val { gc, usr, sys } = !timing
       fun run x = 
       let val timer = Timer.startCPUTimer()
           fun update timer = 
           let val t = Timer.checkCPUTimes timer
	       val gc' = #usr (#gc t)
	       val usr' = #usr (#nongc t)
	       val sys' = Time.+ (#sys (#gc t), #sys (#nongc t))
           in  timing := {gc=Time.+(gc,gc'),
                          usr=Time.+(usr,usr'),
                          sys=Time.+(sys,sys')}
           end
           val y = f x handle e => (update timer; raise e)
       in  update timer; y
       end
   in  run end
  
end