diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-06-19 03:20:34 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-06-19 20:49:03 +0300 |
commit | e53d2197e4a749b2e2265c7b42f9b9834128799f (patch) | |
tree | 91ce001dabfd672b41f061cc42f2ac98e67c6bf7 | |
parent | b0851e5949b4d241106f130bc9febb9a5ff0acb6 (diff) | |
download | micropython-e53d2197e4a749b2e2265c7b42f9b9834128799f.tar.gz micropython-e53d2197e4a749b2e2265c7b42f9b9834128799f.zip |
bench: Add test for function call overhead.
For a trivial operation, calling a function is 5 times slower than doing
operation inline.
-rw-r--r-- | tests/bench/funcall-1-inline.py | 9 | ||||
-rw-r--r-- | tests/bench/funcall-2-funcall.py | 12 | ||||
-rw-r--r-- | tests/bench/funcall-3-funcall-local.py | 16 |
3 files changed, 37 insertions, 0 deletions
diff --git a/tests/bench/funcall-1-inline.py b/tests/bench/funcall-1-inline.py new file mode 100644 index 0000000000..fbeb79630d --- /dev/null +++ b/tests/bench/funcall-1-inline.py @@ -0,0 +1,9 @@ +# Function call overhead test +# Establish a baseline for performing a trivial operation inline +import bench + +def test(num): + for i in iter(range(num)): + a = i + 1 + +bench.run(test) diff --git a/tests/bench/funcall-2-funcall.py b/tests/bench/funcall-2-funcall.py new file mode 100644 index 0000000000..d5c36c60aa --- /dev/null +++ b/tests/bench/funcall-2-funcall.py @@ -0,0 +1,12 @@ +# Function call overhead test +# Perform the same trivial operation as global function call +import bench + +def f(x): + return x + 1 + +def test(num): + for i in iter(range(num)): + a = f(i) + +bench.run(test) diff --git a/tests/bench/funcall-3-funcall-local.py b/tests/bench/funcall-3-funcall-local.py new file mode 100644 index 0000000000..1a6d728c63 --- /dev/null +++ b/tests/bench/funcall-3-funcall-local.py @@ -0,0 +1,16 @@ +# Function call overhead test +# Perform the same trivial operation as calling function, cached in a +# local variable. This is commonly known optimization for overly dynamic +# languages (the idea is to cut on symbolic look up overhead, as local +# variables are accessed by offset, not by name) +import bench + +def f(x): + return x + 1 + +def test(num): + f_ = f + for i in iter(range(num)): + a = f_(i) + +bench.run(test) |