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
|