On Tue, Feb 16, 2010 at 3:45 PM, Jean-Marie Gaillourdet <j...@gaillourdet.net > wrote:
> Hi, > > Daniel Fischer wrote: > >> total alloc = 165,728 bytes (excludes profiling overheads) > >> > >> COST CENTRE MODULE %time %alloc > >> > >> CAF GHC.Handle 0.0 10.7 > >> CAF Text.Read.Lex 0.0 2.1 > >> CAF GHC.Read 0.0 1.2 > >> square Main 0.0 2.8 > >> solve Main 0.0 1.3 > >> show_aVx Main 0.0 3.7 > >> readsPrec_aYF Main 0.0 60.6 > >> main Main 0.0 9.6 > >> genNums Main 0.0 5.0 > >> cell Main 0.0 1.2 > >> > >> > >> > >> individual inherited > >> COST CENTRE MODULE > >> no. entries %time %alloc %time %alloc > >> > >> MAIN MAIN > >> 1 0 0.0 0.3 0.0 100.0 > >> main Main > >> 186 1 0.0 9.6 0.0 85.6 > >> show_aVx Main > >> 196 2 0.0 3.7 0.0 3.7 > >> cell Main > >> 197 16 0.0 0.0 0.0 0.0 > >> solve Main > >> 188 5 0.0 1.3 0.0 11.8 > >> genNums Main > >> 189 8 0.0 5.0 0.0 10.4 > >> square Main > >> 194 88 0.0 2.8 0.0 3.2 > >> cell Main > >> 195 16 0.0 0.4 0.0 0.4 > >> col Main > >> 192 4 0.0 0.7 0.0 1.1 > >> cell Main > >> 193 16 0.0 0.4 0.0 0.4 > >> row Main > >> 190 4 0.0 0.7 0.0 1.1 > >> cell Main > >> 191 16 0.0 0.4 0.0 0.4 > >> readsPrec_aYF Main > >> 187 3 0.0 60.6 0.0 60.6 > >> CAF GHC.Read > >> 151 1 0.0 1.2 0.0 1.2 > >> CAF Text.Read.Lex > >> 144 8 0.0 2.1 0.0 2.1 > >> CAF GHC.Handle > >> 128 4 0.0 10.7 0.0 10.7 > >> CAF GHC.Conc > >> 127 1 0.0 0.0 0.0 0.0 > >> > >> Does the column 'entries' represent the number of times the function > >> was called? > > > > Number of times it was 'entered', not quite the same as the number of > times it was called. > > I think (Warning: speculation ahead, I don't *know* how the profiles are > generated) it's > > thus: > > Say you call a function returning a list. One call, first entry. It finds > the beginning of > > the list, the first k elements and hands them to the caller. Caller > processes these, asks > > "can I have more, or was that it?". Same call, second entry: f looks for > more, finds the > > next m elements, hands them to caller. Caller processes. Repeat until > whatever happens > > first, caller doesn't ask whether there's more or callee finds there's > nothing more (or > > hits bottom). > > > > Warning: speculation ahead, but is based on my knowledge on other > profilers. > > Many profilers work statistically, they interrupt a program at more less > random (or equal) intervals and inspect the stack, whick is of course > quite difficult in Haskell as far as I understand it. I have interpreted > the entries column as an indication for the amount of "profile > interrupts" which happened when a function f was on top of the stack, > whatever that means in Haskell. > > The manual of GHC 6.10.4, chapter 5 states: > > >The actual meaning of the various columns in the output is: > > > >entries > > > > The number of times this particular point in the call graph was > > entered. > > > So for me the question remains open, is "entries" a precisely counted > value or a statistically determined one? I believe it's the latter. I think the RTS uses a periodic SIGALRM to figure out which function is currently executing and to record that in the profile. Simon Marlow would know.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe