Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. (defstruct state
  2. (samples 0)
  3. real-time
  4. (real-time/overhead 0.0)
  5. (real-time/total 0)
  6. gc-time
  7. (gc-time/total 0.0)
  8. bytes-consed
  9. (bytes-consed/total 0))
  10.  
  11. (defstruct (results (:constructor %make-results))
  12. samples
  13. real-time
  14. gc-time
  15. bytes-consed)
  16.  
  17. (defun get-time ()
  18. #-sbcl (multiple-value-bind (s us) (sb-ext:get-time-of-day)
  19. (+ (* (expt 10 6)
  20. (- s (load-time-value (sb-ext:get-time-of-day))))
  21. us))
  22. #+sbcl (* (expt 10 6)
  23. (- (/ (get-internal-real-time)
  24. internal-time-units-per-second)
  25. (load-time-value (/ (get-internal-real-time)
  26. internal-time-units-per-second)))))
  27.  
  28. (defun reset-state (state)
  29. (setf (state-real-time state) (get-time)
  30. (state-gc-time state) sb-ext:*gc-run-time*
  31. (state-bytes-consed state) (sb-ext:get-bytes-consed)))
  32.  
  33. (defun accumulate-state (state)
  34. (let ((real-time (get-time)))
  35. (incf (state-samples state))
  36. (incf (state-real-time/total state)
  37. (- (get-time) (state-real-time state)))
  38. (incf (state-gc-time/total state)
  39. (- sb-ext:*gc-run-time* (state-gc-time state)))
  40. (incf (state-bytes-consed/total state)
  41. (- (sb-ext:get-bytes-consed) (state-bytes-consed state)))
  42. (incf (state-real-time/overhead state)
  43. (max 0 (- (get-time) real-time)))))
  44.  
  45. (defun make-results (state)
  46. (%make-results
  47. :samples (state-samples state)
  48. :real-time (/ (- (state-real-time/total state)
  49. (state-real-time/overhead state))
  50. (expt 10 6))
  51. :gc-time (/ (state-gc-time/total state)
  52. internal-time-units-per-second)
  53. :bytes-consed (state-bytes-consed/total state)))
  54.  
  55. (defmacro with-benchmark (samples &body body)
  56. (au:with-unique-names (state)
  57. `(let ((,state (make-state)))
  58. (loop :repeat ,samples
  59. :do (reset-state ,state)
  60. (progn ,@body)
  61. (accumulate-state ,state))
  62. (make-results ,state))))
  63.  
  64. (defun test ()
  65. (time (loop :repeat (expt 10 7) :do (list 1 2 3)))
  66. (with-benchmark (expt 10 7) (list 1 2 3)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement