430 lines
11 KiB
Common Lisp
430 lines
11 KiB
Common Lisp
;;; all the performance benchmarks
|
|
;;;
|
|
;;; Time-stamp: <2004-06-28 emarsden>
|
|
|
|
|
|
(in-package :cl-bench)
|
|
|
|
|
|
(defbench compiler
|
|
:group :misc
|
|
:function 'cl-bench.misc:run-compiler
|
|
:long "Compilation of the Gabriel benchmarks"
|
|
:runs 3
|
|
:disabled-for '(gcl armedbear))
|
|
|
|
(defbench load-fasl
|
|
:group :misc
|
|
:function 'cl-bench.misc:run-fasload
|
|
:runs 20
|
|
:disabled-for '(gcl armedbear ecl))
|
|
|
|
(defbench sum-permutations
|
|
:group :misc
|
|
:long "traversal of a large, linked, self-sharing structure"
|
|
:function 'cl-bench.misc:run-permutations
|
|
:runs 2
|
|
:disabled-for '(lispworks-personal-edition ecl))
|
|
|
|
(defbench walk-list/seq
|
|
:group :misc
|
|
:long "Walk a list of 2M fixnums that were sequentially allocated"
|
|
:setup 'cl-bench.misc::setup-walk-list/seq
|
|
:function 'cl-bench.misc:walk-list/seq
|
|
:runs 2
|
|
:disabled-for '(lispworks-personal-edition armedbear))
|
|
|
|
(defbench walk-list/mess
|
|
:group :misc
|
|
:long "Walk a list of 2M fixnums that were mergesorted to spread pointers"
|
|
:setup 'cl-bench.misc::setup-walk-list/mess
|
|
:function 'cl-bench.misc:walk-list/mess
|
|
:runs 1
|
|
:disabled-for '(lispworks-personal-edition armedbear poplog))
|
|
|
|
(defbench boyer
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:boyer
|
|
:long "CONS-intensive logic-programming code"
|
|
:runs 30)
|
|
|
|
(defbench browse
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:browse
|
|
:runs 10)
|
|
|
|
(defbench dderiv
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:dderiv-run
|
|
:runs 50)
|
|
|
|
(defbench deriv
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:deriv-run
|
|
:runs 60)
|
|
|
|
(defbench destructive
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:run-destructive
|
|
:runs 100)
|
|
|
|
(defbench div2-test-1
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:run-div2-test1
|
|
:runs 200)
|
|
|
|
(defbench div2-test-2
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:run-div2-test2
|
|
:runs 200)
|
|
|
|
(defbench fft
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:run-fft
|
|
:runs 30)
|
|
|
|
(defbench frpoly/fixnum
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:run-frpoly/fixnum
|
|
:runs 100)
|
|
|
|
(defbench frpoly/bignum
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:run-frpoly/bignum
|
|
:runs 30)
|
|
|
|
(defbench frpoly/float
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:run-frpoly/float
|
|
:runs 100)
|
|
|
|
(defbench puzzle
|
|
:group :gabriel
|
|
:long "Forest Baskett's Puzzle, exercising simple-vectors"
|
|
:function 'cl-bench.gabriel:run-puzzle
|
|
:runs 1500)
|
|
|
|
(defbench tak
|
|
:group :gabriel
|
|
:function 'cl-bench.gabriel:run-tak
|
|
:runs 500)
|
|
|
|
(defbench ctak
|
|
:group :gabriel
|
|
:long "TAKeuchi function using the catch/throw facility"
|
|
:function 'cl-bench.gabriel:run-ctak
|
|
:runs 900)
|
|
|
|
(defbench trtak
|
|
:group :gabriel
|
|
:long "TAKeuchi function without tail recursion"
|
|
:function 'cl-bench.gabriel:run-trtak
|
|
:runs 500)
|
|
|
|
(defbench takl
|
|
:group :gabriel
|
|
:long "TAKeuchi function with lists as counters"
|
|
:function 'cl-bench.gabriel:run-takl
|
|
:runs 150)
|
|
|
|
(defbench stak
|
|
:group :gabriel
|
|
:long "TAKeuchi function with special variables instead of parameter passing"
|
|
:function 'cl-bench.gabriel:run-stak
|
|
:runs 200)
|
|
|
|
(defbench fprint/ugly
|
|
:group :gabriel
|
|
:long "Pretty-printer and write operations to file, no *PRINT-PRETTY*"
|
|
:function 'cl-bench.gabriel:fprint/ugly
|
|
:runs 200)
|
|
|
|
(defbench fprint/pretty
|
|
:group :gabriel
|
|
:long "Pretty-printer and write operations to file, with *PRINT-PRETTY*"
|
|
:function 'cl-bench.gabriel:fprint/pretty
|
|
:runs 100)
|
|
|
|
(defbench traverse
|
|
:group :gabriel
|
|
:long "Creates and traverses a tree structure"
|
|
:function 'cl-bench.gabriel:run-traverse
|
|
:runs 15)
|
|
|
|
(defbench triangle
|
|
:group :gabriel
|
|
:long "Puzzle solving (board game) using combinatorial search"
|
|
:function 'cl-bench.gabriel:run-triangle
|
|
:runs 5)
|
|
|
|
;; end of Gabriel benchmarks
|
|
|
|
(defbench richards
|
|
:group :misc
|
|
:long "Operating system simulation"
|
|
:function 'cl-bench.richards:richards
|
|
:runs 5)
|
|
|
|
(defbench factorial
|
|
:group :math
|
|
:function 'cl-bench.math:run-factorial
|
|
:runs 1000)
|
|
|
|
(defbench fib
|
|
:group :math
|
|
:function 'cl-bench.math:run-fib
|
|
:runs 50)
|
|
|
|
(defbench fib-ratio
|
|
:group :math
|
|
:function 'cl-bench.math:run-fib-ratio
|
|
:runs 500)
|
|
|
|
(defbench ackermann
|
|
:group :math
|
|
:long "Calculating Ackermann's number (heavy recursion)"
|
|
:function 'cl-bench.math:run-ackermann
|
|
:runs 1)
|
|
|
|
(defbench mandelbrot/complex
|
|
:group :math
|
|
:long "Mandelbrot Set computation using complex numbers"
|
|
:function 'cl-bench.math:run-mandelbrot/complex
|
|
:runs 100)
|
|
|
|
(defbench mandelbrot/dfloat
|
|
:group :math
|
|
:long "Mandelbrot Set computation using double-floats"
|
|
:function 'cl-bench.math:run-mandelbrot/dfloat
|
|
:runs 100)
|
|
|
|
(defbench mrg32k3a
|
|
:group :math
|
|
:long "multiple recursive random number generator of l'Ecuyer"
|
|
:function 'cl-bench.math:run-mrg32k3a
|
|
:runs 20)
|
|
|
|
(defbench crc40
|
|
:group :math
|
|
:long "Cyclic redundancy check calculation using 40-bit integers"
|
|
:function 'cl-bench.crc:run-crc40
|
|
:runs 2)
|
|
|
|
(defbench bignum/elem-100-1000
|
|
:group :bignum
|
|
:function 'cl-bench.bignum:run-elem-100-1000
|
|
:runs 1)
|
|
|
|
(defbench bignum/elem-1000-100
|
|
:group :bignum
|
|
:function 'cl-bench.bignum:run-elem-1000-100
|
|
:runs 1)
|
|
|
|
(defbench bignum/elem-10000-1
|
|
:group :bignum
|
|
:function 'cl-bench.bignum:run-elem-10000-1
|
|
:runs 1)
|
|
|
|
(defbench bignum/pari-100-10
|
|
:group :bignum
|
|
:function 'cl-bench.bignum:run-pari-100-10
|
|
:runs 1)
|
|
|
|
(defbench bignum/pari-200-5
|
|
:group :bignum
|
|
:function 'cl-bench.bignum:run-pari-200-5
|
|
:runs 1)
|
|
|
|
;; this one takes ages to run
|
|
#+slow-tests
|
|
(defbench bignum/pari-1000-1
|
|
:group :bignum
|
|
:short "bignum/pari-1000-1"
|
|
:function 'cl-bench.bignum:run-pari-1000-1
|
|
:runs 1)
|
|
|
|
(defbench pi-decimal/small
|
|
:group :bignum
|
|
:function 'cl-bench.bignum:run-pi-decimal/small
|
|
:runs 100)
|
|
|
|
(defbench pi-decimal/big
|
|
:group :bignum
|
|
:function 'cl-bench.bignum:run-pi-decimal/big
|
|
:runs 2)
|
|
|
|
(defbench pi-atan
|
|
:group :bignum
|
|
:function 'cl-bench.bignum:run-pi-atan
|
|
:runs 200)
|
|
|
|
(defbench pi-ratios
|
|
:group :bignum
|
|
:function 'cl-bench.ratios:run-pi-ratios
|
|
:runs 2)
|
|
|
|
(defbench hash-strings
|
|
:group :hash
|
|
:function 'cl-bench.hash:hash-strings
|
|
:runs 2)
|
|
|
|
(defbench hash-integers
|
|
:group :hash
|
|
:function 'cl-bench.hash:hash-integers
|
|
:runs 10)
|
|
|
|
(defbench slurp-lines
|
|
:group :gc
|
|
:long "Line-by-line read of a large file (mostly testing allocation speed)"
|
|
:function 'cl-bench.hash:run-slurp-lines
|
|
:runs 30)
|
|
|
|
(defbench boehm-gc
|
|
:group :gc
|
|
:function 'cl-bench.boehm-gc:gc-benchmark
|
|
:runs 1
|
|
:disabled-for '(lispworks-personal-edition))
|
|
|
|
(defbench deflate-file
|
|
:group :misc
|
|
:function 'cl-bench.deflate:run-deflate-file
|
|
:runs 100)
|
|
|
|
;; these tests exceed the limited stack size in the trial version of LW
|
|
(defbench 1d-arrays
|
|
:group :sequence
|
|
:long "Adding together two vectors"
|
|
:function 'cl-bench.arrays:bench-1d-arrays
|
|
:runs 1
|
|
:disabled-for '(lispworks-personal-edition))
|
|
|
|
(defbench 2d-arrays
|
|
:group :sequence
|
|
:long "Adding together two 2-dimensional arrays"
|
|
:function 'cl-bench.arrays:bench-2d-arrays
|
|
:runs 1
|
|
:disabled-for '(lispworks-personal-edition))
|
|
|
|
(defbench 3d-arrays
|
|
:group :sequence
|
|
:long "Adding together two 3-dimensional arrays"
|
|
:function 'cl-bench.arrays:bench-3d-arrays
|
|
:runs 1
|
|
:disabled-for '(lispworks-personal-edition))
|
|
|
|
;; Poplog seems to have a buggy implementation of bitvectors
|
|
(defbench bitvectors
|
|
:group :sequence
|
|
:long "BIT-XOR, BIT-AND on big bitvectors"
|
|
:function 'cl-bench.arrays:bench-bitvectors
|
|
:runs 3
|
|
:disabled-form '(lispworks-personal-edition poplog))
|
|
|
|
(defbench bench-strings
|
|
:group :sequence
|
|
:long "Allocate and fill large strings"
|
|
:function 'cl-bench.arrays:bench-strings
|
|
:runs 1
|
|
:disabled-for '(lispworks-personal-edition))
|
|
|
|
(defbench fill-strings/adjust
|
|
:group :sequence
|
|
:short "fill-strings/adjustable"
|
|
:long "Fill an adjustable array with characters"
|
|
:function 'cl-bench.arrays:bench-strings/adjustable
|
|
:runs 1
|
|
:disabled-for '(lispworks-personal-edition))
|
|
|
|
;; as of 2002-01-20 this crashes CLISP, both release and CVS versions.
|
|
;; It exceeds maximum array size for both Allegro CL and LispWorks.
|
|
;; It takes AGES and consumes around 120MB RSS with Poplog
|
|
(defbench string-concat
|
|
:group :sequence
|
|
:long "WITH-OUTPUT-TO-STRING and much output"
|
|
:function 'cl-bench.arrays:bench-string-concat
|
|
:runs 1
|
|
:disabled-for '(allegro lispworks-personal-edition poplog))
|
|
|
|
(defbench search-sequence
|
|
:group :sequence
|
|
:long "FIND, FIND-IF, POSITION on a simple-vector"
|
|
:function 'cl-bench.arrays:bench-search-sequence
|
|
:runs 1
|
|
:disabled-for '(lispworks-personal-edition))
|
|
|
|
(defbench clos-defclass
|
|
:group :clos
|
|
:short "CLOS/defclass"
|
|
:long "Defines a class hierarchy"
|
|
:function 'cl-bench.clos:run-defclass
|
|
:runs 1)
|
|
|
|
(defbench clos-defmethod
|
|
:group :clos
|
|
:short "CLOS/defmethod"
|
|
:long "Defines methods on the class hierarchy"
|
|
:function 'cl-bench.clos:run-defmethod
|
|
:runs 1)
|
|
|
|
(defbench clos-instantiate
|
|
:group :clos
|
|
:short "CLOS/instantiate"
|
|
:long "Instantiates a complicated class hierarchy"
|
|
:function 'cl-bench.clos:make-instances
|
|
:runs 2)
|
|
|
|
(defbench clos-instantiate
|
|
:group :clos
|
|
:short "CLOS/simple-instantiate"
|
|
:long "Instantiates a simple class hierarchy"
|
|
:function 'cl-bench.clos:make-instances/simple
|
|
:runs 200)
|
|
|
|
(defbench methodcalls
|
|
:group :clos
|
|
:short "CLOS/methodcalls"
|
|
:long "Make method calls against the created instances."
|
|
:function 'cl-bench.clos:methodcalls/simple
|
|
:runs 5)
|
|
|
|
(defbench methodcalls+after
|
|
:group :clos
|
|
:short "CLOS/method+after"
|
|
:long "Define after methods on our instances, then run some method calls"
|
|
:function 'cl-bench.clos:methodcalls/simple+after
|
|
:runs 2)
|
|
|
|
(defbench methodcalls/complex
|
|
:group :clos
|
|
:short "CLOS/complex-methods"
|
|
:long "Run methodcalls with and method combination."
|
|
:function 'cl-bench.clos:methodcalls/complex
|
|
:runs 5
|
|
:disabled-for '(clisp poplog))
|
|
|
|
(defbench eql-specialized-fib
|
|
:group :clos
|
|
:long "Fibonnaci function implemented with EQL specialization"
|
|
:function 'cl-bench.clos:run-eql-fib
|
|
:runs 2)
|
|
|
|
;; this is really a test of the speed of loading a source file full of data
|
|
#+nil
|
|
(defbench ppcre-load/source
|
|
:long "CL-PPCRE, Perl-compatible regular expressions: loading data file"
|
|
:function '(load (make-pathname :directory '(:relative "files" "cl-ppcre")
|
|
:name "testdata"
|
|
:type "lisp"))
|
|
:runs 1
|
|
:disabled-for '(armedbear))
|
|
|
|
#+nil
|
|
(defbench ppcre-match
|
|
:long "CL-PPCRE, perl-compatible regular expressions: matching speed"
|
|
:function '(cl-ppcre-test:test)
|
|
:runs 20
|
|
:disabled-for '(armedbear))
|
|
|
|
|
|
;; EOF
|