home *** CD-ROM | disk | FTP | other *** search
- ;;; (C) Copyright 1984 by Gold Hill Computers
-
- ;;; An excution timer
-
- ;;; Usage:
- ;;; (TIME form) - macro
- ;;; Form is the form to be timed. Since TIME is
- ;;; a macro form is not evaluated.
-
- ;;; Usage:
- ;;; (EVAL-TIME form) - function
- ;;; Where form is the form to be timed. In this case
- ;;; form is evaluated.
-
- ;;; Example:
- ;;; (TIME (DOTIMES (I 10000)))
- ;;; This will time the empty loop.
-
- (DEFMACRO TIME X
- `(EVAL-TIME ',(CAR X)))
-
- (DEFUN EVAL-TIME (FORM)
- (LET (START FINISH S-HSEC F-HSEC S-SEC F-SEC S-MIN F-MIN VALS)
- (FORMAT *trace-output* "~&Evaluating: ~A" FORM)
- ;; read the start time.
- (MULTIPLE-VALUE-SETQ (NIL NIL NIL S-MIN START)
- (%SYSINT #X21 #X2C00 0 0 0))
- ;; Eval the form.
- (SETQ VALS (MULTIPLE-VALUE-LIST (EVAL FORM)))
- ;; Read the end time.
- (MULTIPLE-VALUE-SETQ (NIL NIL NIL F-MIN FINISH)
- (%SYSINT #X21 #X2C00 0 0 0))
- ;; Unpack start and end times.
- (SETQ S-HSEC (LOGAND START #X0FF)
- F-HSEC (LOGAND FINISH #X0FF)
- S-SEC (LSH START -8)
- F-SEC (LSH FINISH -8)
- S-MIN (LOGAND #X0FF S-MIN)
- F-MIN (LOGAND #X0FF F-MIN))
- (SETQ F-HSEC (- F-HSEC S-HSEC)) ; calc hundreths
- (IF (MINUSP F-HSEC)
- (SETQ F-HSEC (+ F-HSEC 100)
- F-SEC (1- F-SEC)))
- (SETQ F-SEC (- F-SEC S-SEC)) ; calc seconds
- (IF (MINUSP F-SEC)
- (SETQ F-SEC (+ F-SEC 60)
- F-MIN (1- F-MIN)))
- (SETQ F-MIN (- F-MIN S-MIN)) ; calc minutes
- (IF (MINUSP F-MIN) (INCF F-MIN 60))
- (FORMAT *trace-output* "~&Elapsed time: ~D:~:[~D~;0~D~].~:[~D~;0~D~]~%"
- F-MIN (< F-SEC 10.) F-SEC (< F-HSEC 10) F-HSEC)
- (VALUES-LIST VALS)))
-
- ;;; This give data on the storage system and available memory.
- ;;; If the first arg is non-NIL then more detailed information is printed.
- ;;; If the second arg is NIL the GC is not performed.
- (DEFUN ROOM (&OPTIONAL DETAIL-P (GCP T))
- (LET ((CNS 0) (FCNS 0) (OBJV 0) (FOBJV 0)(LSIZE 0.0))
- (WHEN GCP
- (FORMAT T "~&GC...") ; do the GC
- (GC))
- (FORMAT T "~% GC data as of last GC (# ~D)" (ARRAY-LEADER *GC-DATA* 1))
- (WHEN DETAIL-P
- (FORMAT T "~%~% Region Type Start Length Free"))
- (DO ((I 0 (+ I 9))
- (X)(Y))
- ((= (AREF *GC-DATA* I) #X0FF))
- (SETQ Y (LOGIOR (LSH (AREF *GC-DATA* (+ I 8)) 8) ; free
- (AREF *GC-DATA* (+ I 7)))
- X (LOGIOR (LSH (AREF *GC-DATA* (+ I 6)) 8) ; length
- (AREF *GC-DATA* (+ I 5)))
- LSIZE (+ LSIZE
- (LSH X -10)
- (/ (LOGAND X #X3FF) 1024))) ; total size
- (WHEN DETAIL-P
- (FORMAT T "~% ~D ~:[ CONS~; ATOM~]~:[ ~;*~] ~X:~X ~U ~U"
- (TRUNCATE I 9) ; region #
- (LOGBITP 0 (AREF *GC-DATA* I)) ; type
- (LOGBITP 1 (AREF *GC-DATA* I)) ; static or not
- (LOGIOR (LSH (AREF *GC-DATA* (+ I 4)) 8) ; segment
- (AREF *GC-DATA* (+ I 3)))
- (LOGIOR (LSH (AREF *GC-DATA* (+ I 2)) 8) ; offset
- (AREF *GC-DATA* (+ I 1)))
- X ; length
- (IF (ZEROP (LOGAND 1 (AREF *GC-DATA* I)))
- (*& 9 Y) ; cons case
- Y)))
- (COND ((NOT (LOGBITP 0 (AREF *GC-DATA* I))) ; cons
- (SETQ CNS (+& CNS (/& X 9)))
- (SETQ FCNS (+& FCNS Y)))
- (T ; objv
- (SETQ OBJV (+& OBJV (/& X 1024.)))
- (SETQ FOBJV (+& FOBJV (/& Y 1024.))))))
- (WHEN DETAIL-P (FORMAT T "~%* indicates a static storage region."))
- (FORMAT T "~%~% Approximately ~DK atom space and ~U conses"
- OBJV CNS)
- (FORMAT T "~% of which ~DK atom space and ~U conses are free."
- FOBJV FCNS)
- (FORMAT T "~% This lisp occupies ~AK bytes of memory.~%" LSIZE)
- ))
-