[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

mzscheme103 profiler



Hi,
I've tried to use mzscheme profiler.
Results are very unclear to me.

Here are code snippets and results

(define (print-profiling-results)
  (for-each 
   (lambda (rec) 
     (printf "~a	~a	~a	~a	~a~n"
	     (list-ref rec 2);name
             (list-ref rec 0);num calls
	     (list-ref rec 1);time
	      ":"
	     (list-ref rec 3);filename
	     ))
   (get-profile-results)
   ))

(require-library "errortrace.ss" "errortrace")
(instrumenting-enabled #t) ;switch on errortrace
(profiling-enabled #t) ;switch on profiling

;; procedure that takes some time...
(define (fufl) 
  (with-input-from-file "/usr/dict/words"
    (lambda () (let loop ((a (read-line)))
		 (if (eof-object? a) #f (loop (read-line)))))))

Documentation says that profiler gives

 * the number of milliseconds consumed by the procedure's body across
   all calls (including the time consumed by any nested non-tail call
   within the procedure, but not including time consumed by a
   tail-call from the procedure).


bash-2.03$ mzscheme -f prof-test.scm
Welcome to MzScheme version 103.1 (using locale), Copyright (c) 1995-2000 PLT (Matthew Flatt)
> (time (fufl))
cpu time: 1770 real time: 1770 gc time: 20
#f
> (print-profiling-results)
fufl	1	0	:	#f
(#%lambda () ((#%letrec-values (((loop) (#%lambda (a) (#%if (eof-object? a) #f (loop (read-line)))))) loop) (read-line)))	1	0	:	#f
(#%lambda () (fufl))	1	0	:	#f
loop	25144	960	:	#f
> (exit)

So:
-- `loop' calls are tail-recursive, but they were counted
-- toplevel call (fufl) as well as inner #%lambda and #%lambda generated
by `time' macro took no time at all?

-AT