Use hyperfine to benchmark, add builtin_fib as a comparison for how fast we could try to be
This commit is contained in:
77
fib_tests.sh
77
fib_tests.sh
@@ -3,6 +3,54 @@
|
|||||||
NUMBER=30
|
NUMBER=30
|
||||||
#NUMBER=25
|
#NUMBER=25
|
||||||
|
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp
|
||||||
|
mv csc_out.wasm fib_compiled.wasm
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp
|
||||||
|
mv csc_out.wasm fib_compiled_let.wasm
|
||||||
|
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp no_compile
|
||||||
|
mv csc_out.wasm fib_interpreted.wasm
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp no_compile
|
||||||
|
mv csc_out.wasm fib_interpreted_let.wasm
|
||||||
|
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib2.kp
|
||||||
|
mv csc_out.wasm fib_compiled_manual.wasm
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm builtin_fib.kp
|
||||||
|
mv csc_out.wasm builtin_fib.wasm
|
||||||
|
|
||||||
|
pushd rust_fib
|
||||||
|
cargo build --target=wasm32-wasi
|
||||||
|
cargo build --release --target=wasm32-wasi
|
||||||
|
cargo build
|
||||||
|
cargo build --release
|
||||||
|
popd
|
||||||
|
|
||||||
|
pushd clojure_fib
|
||||||
|
lein uberjar
|
||||||
|
popd
|
||||||
|
|
||||||
|
pushd clojure_hi
|
||||||
|
lein uberjar
|
||||||
|
popd
|
||||||
|
|
||||||
|
#clang-11 fib.c -o c_fib
|
||||||
|
#clang-11 fib_let.c -o c_fib_let
|
||||||
|
|
||||||
|
|
||||||
|
hyperfine --export-markdown table.md \
|
||||||
|
'echo '$NUMBER' | wasmtime ./fib_compiled.wasm' 'echo '$NUMBER' | wasmtime ./fib_compiled_let.wasm' \
|
||||||
|
'echo '$NUMBER' | wasmtime ./fib_interpreted.wasm' 'echo '$NUMBER' | wasmtime ./fib_interpreted_let.wasm' \
|
||||||
|
'echo '$NUMBER' | wasmtime ./builtin_fib.wasm' 'echo '$NUMBER' | wasmtime ./fib_compiled_manual.wasm' \
|
||||||
|
'echo '$NUMBER' | wasmtime ./rust_fib/target/wasm32-wasi/debug/rust_let.wasm' 'echo '$NUMBER' | wasmtime ./rust_fib/target/wasm32-wasi/release/rust_let.wasm' \
|
||||||
|
'echo '$NUMBER' | ./rust_fib/target/debug/rust_let' 'echo '$NUMBER' | ./rust_fib/target/release/rust_let' \
|
||||||
|
"scheme --script ./fib.scm $NUMBER" "scheme --script ./fib_let.scm $NUMBER" \
|
||||||
|
"python3 ./fib.py $NUMBER" "python3 ./fib_let.py $NUMBER" \
|
||||||
|
"echo $NUMBER | java -jar ./clojure_fib/target/uberjar/clojure_fib-0.1.0-SNAPSHOT-standalone.jar" "echo $NUMBER | java -jar ./clojure_hi/target/uberjar/clojure_hi-0.1.0-SNAPSHOT-standalone.jar"
|
||||||
|
|
||||||
|
#"./c_fib $NUMBER" "./c_fib_let $NUMBER" \
|
||||||
|
|
||||||
|
exit
|
||||||
|
|
||||||
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp && time perf record -k mono wasmtime --jitdump ./csc_out.wasm
|
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp && time perf record -k mono wasmtime --jitdump ./csc_out.wasm
|
||||||
#exit
|
#exit
|
||||||
|
|
||||||
@@ -15,6 +63,21 @@ echo "Compile Straight 2"
|
|||||||
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp && time echo $NUMBER | wasm3 ./csc_out.wasm
|
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp && time echo $NUMBER | wasm3 ./csc_out.wasm
|
||||||
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib2.kp && time echo $NUMBER | wasmtime ./csc_out.wasm
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib2.kp && time echo $NUMBER | wasmtime ./csc_out.wasm
|
||||||
|
|
||||||
|
echo "Compile Builtin"
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm builtin_fib.kp && time echo $NUMBER | wasmtime ./csc_out.wasm
|
||||||
|
|
||||||
|
echo "Interpret Straight"
|
||||||
|
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp no_compile && time echo $NUMBER | wasm3 ./csc_out.wasm
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp no_compile && time echo $NUMBER | wasmtime ./csc_out.wasm
|
||||||
|
|
||||||
|
echo "Compile Let"
|
||||||
|
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp && time echo $NUMBER | wasm3 ./csc_out.wasm
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp && time echo $NUMBER | wasmtime ./csc_out.wasm
|
||||||
|
|
||||||
|
echo "Interpret Let"
|
||||||
|
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp no_compile && time echo $NUMBER | wasm3 ./csc_out.wasm
|
||||||
|
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp no_compile && time echo $NUMBER | wasmtime ./csc_out.wasm
|
||||||
|
|
||||||
echo "Python"
|
echo "Python"
|
||||||
time python3 ./fib.py $NUMBER
|
time python3 ./fib.py $NUMBER
|
||||||
|
|
||||||
@@ -43,20 +106,6 @@ pushd clojure_fib
|
|||||||
lein uberjar && time echo $NUMBER | time java -jar target/uberjar/clojure_fib-0.1.0-SNAPSHOT-standalone.jar
|
lein uberjar && time echo $NUMBER | time java -jar target/uberjar/clojure_fib-0.1.0-SNAPSHOT-standalone.jar
|
||||||
popd
|
popd
|
||||||
|
|
||||||
exit
|
|
||||||
|
|
||||||
echo "Interpret Straight"
|
|
||||||
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp no_compile && time echo $NUMBER | wasm3 ./csc_out.wasm
|
|
||||||
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib.kp no_compile && time echo $NUMBER | wasmtime ./csc_out.wasm
|
|
||||||
|
|
||||||
echo "Compile Let"
|
|
||||||
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp && time echo $NUMBER | wasm3 ./csc_out.wasm
|
|
||||||
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp && time echo $NUMBER | wasmtime ./csc_out.wasm
|
|
||||||
|
|
||||||
echo "Interpret Let"
|
|
||||||
#touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp no_compile && time echo $NUMBER | wasm3 ./csc_out.wasm
|
|
||||||
touch csc_out.wasm && rm csc_out.wasm && scheme --script ./partial_eval.scm fib_let.kp no_compile && time echo $NUMBER | wasmtime ./csc_out.wasm
|
|
||||||
|
|
||||||
echo "Chez Scheme"
|
echo "Chez Scheme"
|
||||||
time scheme --script ./fib.scm $NUMBER
|
time scheme --script ./fib.scm $NUMBER
|
||||||
|
|
||||||
|
|||||||
@@ -1064,6 +1064,7 @@
|
|||||||
;(needs_params_val_lambda 'prn prn)
|
;(needs_params_val_lambda 'prn prn)
|
||||||
(give_up_eval_params 'log)
|
(give_up_eval_params 'log)
|
||||||
(give_up_eval_params 'debug)
|
(give_up_eval_params 'debug)
|
||||||
|
(give_up_eval_params 'builtin_fib)
|
||||||
; really do need to figure out mif we want to keep meta, and add it mif so
|
; really do need to figure out mif we want to keep meta, and add it mif so
|
||||||
;(give_up_eval_params 'meta meta)
|
;(give_up_eval_params 'meta meta)
|
||||||
;(give_up_eval_params 'with-meta with-meta)
|
;(give_up_eval_params 'with-meta with-meta)
|
||||||
@@ -2951,6 +2952,33 @@
|
|||||||
drop_p_d
|
drop_p_d
|
||||||
))))
|
))))
|
||||||
|
|
||||||
|
|
||||||
|
((k_builtin_fib_helper func_idx funcs) (array func_idx (+ 1 func_idx) (concat funcs (func '$builtin_fib_helper '(param $n i64) '(result i64)
|
||||||
|
(_if '$eq0 '(result i64)
|
||||||
|
(i64.eq (i64.const 0) (local.get '$n))
|
||||||
|
(then (i64.const 2))
|
||||||
|
(else
|
||||||
|
(_if '$eq1 '(result i64)
|
||||||
|
(i64.eq (i64.const 2) (local.get '$n))
|
||||||
|
(then (i64.const 2))
|
||||||
|
(else
|
||||||
|
(i64.add (call '$builtin_fib_helper (i64.sub (local.get '$n) (i64.const 2))) (call '$builtin_fib_helper (i64.sub (local.get '$n) (i64.const 4))))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
))))
|
||||||
|
|
||||||
|
((k_builtin_fib_loc k_builtin_fib_length datasi) (alloc_data "k_builtin_fib" datasi))
|
||||||
|
(k_builtin_fib_msg_val (bor (<< k_builtin_fib_length 32) k_builtin_fib_loc #b011))
|
||||||
|
((k_builtin_fib func_idx funcs) (array func_idx (+ 1 func_idx) (concat funcs (func '$builtin_fib '(param $p i64) '(param $d i64) '(param $s i64) '(result i64) '(local $ptr i32) '(local $len i32)
|
||||||
|
(ensure_not_op_n_params_set_ptr_len i32.ne 1)
|
||||||
|
(type_assert 0 type_int k_builtin_fib_msg_val)
|
||||||
|
(call '$builtin_fib_helper (i64.load 0 (local.get '$ptr)))
|
||||||
|
drop_p_d
|
||||||
|
))))
|
||||||
|
|
||||||
|
|
||||||
((k_concat_loc k_concat_length datasi) (alloc_data "k_concat" datasi))
|
((k_concat_loc k_concat_length datasi) (alloc_data "k_concat" datasi))
|
||||||
(k_concat_msg_val (bor (<< k_concat_length 32) k_concat_loc #b011))
|
(k_concat_msg_val (bor (<< k_concat_length 32) k_concat_loc #b011))
|
||||||
((k_concat func_idx funcs) (array func_idx (+ 1 func_idx) (concat funcs (func '$concat '(param $p i64) '(param $d i64) '(param $s i64) '(result i64) '(local $ptr i32) '(local $len i32) '(local $size i32) '(local $i i32) '(local $it i64) '(local $new_ptr i32) '(local $inner_ptr i32) '(local $inner_size i32) '(local $new_ptr_traverse i32) '(local $is_str i32)
|
((k_concat func_idx funcs) (array func_idx (+ 1 func_idx) (concat funcs (func '$concat '(param $p i64) '(param $d i64) '(param $s i64) '(result i64) '(local $ptr i32) '(local $len i32) '(local $size i32) '(local $i i32) '(local $it i64) '(local $new_ptr i32) '(local $inner_ptr i32) '(local $inner_size i32) '(local $new_ptr_traverse i32) '(local $is_str i32)
|
||||||
@@ -4650,6 +4678,7 @@
|
|||||||
((= 'bnot (.prim_comb_sym c)) (array (bor (<< (- k_bnot dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
((= 'bnot (.prim_comb_sym c)) (array (bor (<< (- k_bnot dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
||||||
((= '<< (.prim_comb_sym c)) (array (bor (<< (- k_ls dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
((= '<< (.prim_comb_sym c)) (array (bor (<< (- k_ls dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
||||||
((= '>> (.prim_comb_sym c)) (array (bor (<< (- k_rs dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
((= '>> (.prim_comb_sym c)) (array (bor (<< (- k_rs dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
||||||
|
((= 'builtin_fib (.prim_comb_sym c)) (array (bor (<< (- k_builtin_fib dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
||||||
((= 'array (.prim_comb_sym c)) (array (bor (<< (- k_array dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
((= 'array (.prim_comb_sym c)) (array (bor (<< (- k_array dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
||||||
((= 'concat (.prim_comb_sym c)) (array (bor (<< (- k_concat dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
((= 'concat (.prim_comb_sym c)) (array (bor (<< (- k_concat dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
||||||
((= 'slice (.prim_comb_sym c)) (array (bor (<< (- k_slice dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
((= 'slice (.prim_comb_sym c)) (array (bor (<< (- k_slice dyn_start) 35) (<< 0 5) (<< (.prim_comb_wrap_level c) 4) #b0001) nil nil ctx))
|
||||||
@@ -4817,7 +4846,7 @@
|
|||||||
(true (error (str "Can't compile-inner impossible " c)))
|
(true (error (str "Can't compile-inner impossible " c)))
|
||||||
)))
|
)))
|
||||||
|
|
||||||
(_ (println "compiling partial evaled " (str_strip marked_code)))
|
;(_ (println "compiling partial evaled " (str_strip marked_code)))
|
||||||
;(_ (true_print "compiling partial evaled " (true_str_strip marked_code)))
|
;(_ (true_print "compiling partial evaled " (true_str_strip marked_code)))
|
||||||
;(_ (true_print "compiling partial evaled "))
|
;(_ (true_print "compiling partial evaled "))
|
||||||
(memo empty_dict)
|
(memo empty_dict)
|
||||||
|
|||||||
@@ -19,5 +19,7 @@ mkShell {
|
|||||||
#(rustChannelOf { date = "2022-04-10"; channel = "nightly"; targets = [ "wasm32-wasi" ]; }).rust
|
#(rustChannelOf { date = "2022-04-10"; channel = "nightly"; targets = [ "wasm32-wasi" ]; }).rust
|
||||||
(latest.rustChannels.nightly.rust.override { targets = [ "wasm32-wasi" ]; })
|
(latest.rustChannels.nightly.rust.override { targets = [ "wasm32-wasi" ]; })
|
||||||
leiningen
|
leiningen
|
||||||
|
clang
|
||||||
|
hyperfine
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user