(Arne Babenhauserheide)
2017-04-09: benchmark: add all equivalents to Python list benchmarks benchmark: add all equivalents to Python list benchmarks
diff --git a/examples/benchmark.w b/examples/benchmark.w --- a/examples/benchmark.w +++ b/examples/benchmark.w @@ -128,21 +128,21 @@ define : logiota steps start stepsize ;; - TODO: and #t #f ;; List benchmarks: -;; - TODO: list-copy (py-copy) +;; - list-copy (py-copy) ;; - cons (py-push / py-append) ;; - car (py-pop) ;; - list-ref (py-get-item) -;; - TODO: list-set! (py-set-item) -;; - TODO: take + drop (py-get-slice) -;; - TODO: take-right + drop-right (py-get-slice) -;; - TODO: last -;; - TODO: append (py-extend) -;; - TODO: delete (py-delete-item) -;; - TODO: min (py-min) -;; - TODO: max (py-max) -;; - TODO: member (py-in) -;; - TODO: reverse (py-reversed) -;; - TODO: length (py-len) +;; - list-set! (py-set-item) +;; - take + drop (py-get-slice) +;; - take-right + drop-right (py-get-slice) +;; - last +;; - append (py-extend) +;; - delete (py-delete-item) +;; - min (py-min) +;; - max (py-max) +;; - member (py-in) +;; - reverse (py-reversed) +;; - length (py-len) define : bench-append param-list . "Test (append a b) with lists of lengths from the param-list." define : f x @@ -196,11 +196,102 @@ define : bench-set param-list . "Test (cons a b) with element A and list B of lengths from the param-list." define : f x let : (N (list-ref x 0)) (m (list-ref x 1)) - benchmark (list-set! a b) :let ((a (iota N))(b m)) + benchmark (list-set! a b #t) :let ((a (iota (max N m)))(b (- m 1))) + zip param-list : map f param-list + +define : bench-copy param-list + . "Copy a list of length N." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (set! b (list-copy a)) :let ((a (iota N))(b #f)) + zip param-list : map f param-list + +define : bench-getslice-left param-list + . "Get a slice from left." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (take (drop a b) b) :let ((a (iota (max N (* 2 m))))(b m)) + zip param-list : map f param-list + +define : bench-getslice-right param-list + . "Get a slice from right." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (take-right (drop-right a b) b) :let ((a (iota (max N (* 2 m))))(b m)) + zip param-list : map f param-list + +define : bench-length param-list + . "Get the length of a list." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (length a) :let ((a (iota N))(b m)) + zip param-list : map f param-list + +define : bench-reverse param-list + . "Reverse a list." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (reverse a) :let ((a (iota N))(b m)) + zip param-list : map f param-list + +define : bench-member param-list + . "Check (member b a)." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (member b a) :let ((a (iota N)) (b (- m 1))) + zip param-list : map f param-list + +define : bench-last param-list + . "Get the last element of a list." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (last a) :let ((a (iota N))(b m)) + zip param-list : map f param-list + +define : bench-max param-list + . "Get the maximum value of a list." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (apply max a) :let ((a (iota N))(b m)) + zip param-list : map f param-list + +define : bench-min param-list + . "Get the minimum value of a list." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (apply min a) :let ((a (iota N))(b m)) + zip param-list : map f param-list + +define : bench-delete param-list + . "Check (member b a)." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (delete b a) :let ((a (iota N)) (b (- m 1))) + zip param-list : map f param-list + +define : bench-delete-smaller param-list + . "Check (delete b a <)." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (delete b a <) :let ((a (iota N)) (b (- m 1))) + zip param-list : map f param-list + +define : bench-delete-larger param-list + . "Check (delete b a >)." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (delete b a >) :let ((a (iota N)) (b (- m 1))) + zip param-list : map f param-list + +define : bench-delete! param-list + . "Check (member b a)." + define : f x + let : (N (list-ref x 0)) (m (list-ref x 1)) + benchmark (delete! b a) :let ((a (iota N)) (b (- m 1))) zip param-list : map f param-list -;; VList benchmarks +;; TODO: VList benchmarks ;; String benchmarks @@ -419,12 +510,18 @@ scalarMap = mpl.cm.ScalarMappable(norm=c define : main args + let : : steps 50 + when : member "--quick" args + set! max-relative-uncertainty 1.5 + set! max-absolute-uncertainty-seconds 1.e-1 + set! min-aggregated-runtime-seconds 1.e-7 + set! max-iterations 16 + set! steps 5 let* : H : lambda (x pos) (H-N-m x pos #:all #t) H-const : lambda (x pos) (H-N-m x pos #:const #t) H-log : lambda (x pos) (H-N-m x pos #:const #t #:OlogN #t #:Ologm #t) H-lin : lambda (x pos) (H-N-m x pos #:const #t #:ON #t #:Om #t #:ONlogN #t #:Omlogm #t #:ONlogNlogN #t #:Omlogmlogm #t ) - steps 50 pbr plot-benchmark-result let lp : N-start '(1 1 1 100) @@ -464,9 +561,52 @@ define : main args pbr (bench-sort param-list) H-lin . #:title : title "sort (iota N)" . #:filename : filename "sort" + pbr (bench-copy param-list) H + . #:title : title "list-copy (iota N)" + . #:filename : filename "copy" + pbr (bench-length param-list) H + . #:title : title "length (iota N)" + . #:filename : filename "length" + pbr (bench-reverse param-list) H + . #:title : title "reverse (iota N)" + . #:filename : filename "reverse" + pbr (bench-last param-list) H + . #:title : title "last (iota N)" + . #:filename : filename "last" + pbr (bench-max param-list) H + . #:title : title "apply max (iota N)" + . #:filename : filename "max" + pbr (bench-min param-list) H + . #:title : title "apply min (iota N)" + . #:filename : filename "min" pbr (bench-append param-list) H-lin . #:title : title "append (iota N) (iota m)" . #:filename : filename "list-append" + pbr (bench-set param-list) H + . #:title : title "list-set! (iota (max N m)) m #t" + . #:filename : filename "list-set" + pbr (bench-getslice-left param-list) H + . #:title : title "take (drop (iota (max N (* 2 m))) m) m" + . #:filename : filename "list-getslice-left" + pbr (bench-getslice-right param-list) H + . #:title : title "take-right (drop-right (iota (max N (* 2 m))) m) m" + . #:filename : filename "list-getslice-right" + pbr (bench-member param-list) H + . #:title : title "member (- m 1) (iota N)" + . #:filename : filename "member" + pbr (bench-delete param-list) H + . #:title : title "delete (- m 1) (iota N)" + . #:filename : filename "delete" + pbr (bench-delete-smaller param-list) H + . #:title : title "delete (- m 1) (iota N) <" + . #:filename : filename "delete-smaller" + pbr (bench-delete-larger param-list) H + . #:title : title "member (- m 1) (iota N) >" + . #:filename : filename "delete-larger" + pbr (bench-delete! param-list) H + . #:title : title "delete! (- m 1) (iota N)" + . #:filename : filename "delete-bang" + ;; strings pbr (bench-append-string param-list) H-lin . #:title : title "string-append (make-string N) (make-string m)" . #:filename : filename "string-append"