micropython/tests/micropython
Jim Mussared b326edf68c all: Remove MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE.
This commit removes all parts of code associated with the existing
MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE optimisation option, including the
-mcache-lookup-bc option to mpy-cross.

This feature originally provided a significant performance boost for Unix,
but wasn't able to be enabled for MCU targets (due to frozen bytecode), and
added significant extra complexity to generating and distributing .mpy
files.

The equivalent performance gain is now provided by the combination of
MICROPY_OPT_LOAD_ATTR_FAST_PATH and MICROPY_OPT_MAP_LOOKUP_CACHE (which has
been enabled on the unix port in the previous commit).

It's hard to provide precise performance numbers, but tests have been run
on a wide variety of architectures (x86-64, ARM Cortex, Aarch64, RISC-V,
xtensa) and they all generally agree on the qualitative improvements seen
by the combination of MICROPY_OPT_LOAD_ATTR_FAST_PATH and
MICROPY_OPT_MAP_LOOKUP_CACHE.

For example, on a "quiet" Linux x64 environment (i3-5010U @ 2.10GHz) the
change from CACHE_MAP_LOOKUP_IN_BYTECODE, to LOAD_ATTR_FAST_PATH combined
with MAP_LOOKUP_CACHE is:

diff of scores (higher is better)
N=2000 M=2000       bccache -> attrmapcache      diff      diff% (error%)
bm_chaos.py        13742.56 ->   13905.67 :   +163.11 =  +1.187% (+/-3.75%)
bm_fannkuch.py        60.13 ->      61.34 :     +1.21 =  +2.012% (+/-2.11%)
bm_fft.py         113083.20 ->  114793.68 :  +1710.48 =  +1.513% (+/-1.57%)
bm_float.py       256552.80 ->  243908.29 : -12644.51 =  -4.929% (+/-1.90%)
bm_hexiom.py         521.93 ->     625.41 :   +103.48 = +19.826% (+/-0.40%)
bm_nqueens.py     197544.25 ->  217713.12 : +20168.87 = +10.210% (+/-3.01%)
bm_pidigits.py      8072.98 ->    8198.75 :   +125.77 =  +1.558% (+/-3.22%)
misc_aes.py        17283.45 ->   16480.52 :   -802.93 =  -4.646% (+/-0.82%)
misc_mandel.py     99083.99 ->  128939.84 : +29855.85 = +30.132% (+/-5.88%)
misc_pystone.py    83860.10 ->   82592.56 :  -1267.54 =  -1.511% (+/-2.27%)
misc_raytrace.py   21490.40 ->   22227.23 :   +736.83 =  +3.429% (+/-1.88%)

This shows that the new optimisations are at least as good as the existing
inline-bytecode-caching, and are sometimes much better (because the new
ones apply caching to a wider variety of map lookups).

The new optimisations can also benefit code generated by the native
emitter, because they apply to the runtime rather than the generated code.
The improvement for the native emitter when LOAD_ATTR_FAST_PATH and
MAP_LOOKUP_CACHE are enabled is (same Linux environment as above):

diff of scores (higher is better)
N=2000 M=2000        native -> nat-attrmapcache  diff      diff% (error%)
bm_chaos.py        14130.62 ->   15464.68 :  +1334.06 =  +9.441% (+/-7.11%)
bm_fannkuch.py        74.96 ->      76.16 :     +1.20 =  +1.601% (+/-1.80%)
bm_fft.py         166682.99 ->  168221.86 :  +1538.87 =  +0.923% (+/-4.20%)
bm_float.py       233415.23 ->  265524.90 : +32109.67 = +13.756% (+/-2.57%)
bm_hexiom.py         628.59 ->     734.17 :   +105.58 = +16.796% (+/-1.39%)
bm_nqueens.py     225418.44 ->  232926.45 :  +7508.01 =  +3.331% (+/-3.10%)
bm_pidigits.py      6322.00 ->    6379.52 :    +57.52 =  +0.910% (+/-5.62%)
misc_aes.py        20670.10 ->   27223.18 :  +6553.08 = +31.703% (+/-1.56%)
misc_mandel.py    138221.11 ->  152014.01 : +13792.90 =  +9.979% (+/-2.46%)
misc_pystone.py    85032.14 ->  105681.44 : +20649.30 = +24.284% (+/-2.25%)
misc_raytrace.py   19800.01 ->   23350.73 :  +3550.72 = +17.933% (+/-2.79%)

In summary, compared to MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE, the new
MICROPY_OPT_LOAD_ATTR_FAST_PATH and MICROPY_OPT_MAP_LOOKUP_CACHE options:
- are simpler;
- take less code size;
- are faster (generally);
- work with code generated by the native emitter;
- can be used on embedded targets with a small and constant RAM overhead;
- allow the same .mpy bytecode to run on all targets.

See #7680 for further discussion.  And see also #7653 for a discussion
about simplifying mpy-cross options.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
2021-09-16 16:04:03 +10:00
..
const.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
const.py.exp py/parse: Treat constants that start with underscore as private. 2016-06-06 17:28:32 +01:00
const2.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
const2.py.exp tests/micropython: Add tests for const names being replaced in parser. 2016-09-27 13:03:53 +10:00
const_error.py py/parse: Support constant folding of power operator for integers. 2020-05-03 16:23:19 +10:00
const_error.py.exp py/parse: Remove unnecessary check in const folding for ** operator. 2020-04-09 16:02:39 +10:00
const_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
const_intbig.py.exp tests/micropython: Add test for consts that are bignums. 2017-02-24 13:08:18 +11:00
decorator.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
decorator.py.exp tests: Add tests for things that are not already tested. 2015-03-12 22:48:45 +00:00
decorator_error.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
decorator_error.py.exp tests: Add tests for SyntaxError, TypeError, and other missing things. 2015-03-25 23:10:09 +00:00
emg_exc.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
emg_exc.py.exp tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
extreme_exc.py tests/micropython/extreme_exc.py: Unlink alloc'd lists earlier in chain. 2020-10-29 23:35:36 +11:00
extreme_exc.py.exp tests/micropython/extreme_exc.py: Allow to run without any emg exc buf. 2018-04-05 03:03:16 +10:00
heap_lock.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heap_lock.py.exp py/modmicropython: Add heap_locked function to test state of heap. 2020-03-11 16:54:16 +11:00
heap_locked.py py/modmicropython: Add heap_locked function to test state of heap. 2020-03-11 16:54:16 +11:00
heap_locked.py.exp py/modmicropython: Add heap_locked function to test state of heap. 2020-03-11 16:54:16 +11:00
heapalloc.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc.py.exp tests/micropython: Move alloc-less traceback test to separate test file. 2016-11-21 17:39:23 +11:00
heapalloc_bytesio.py tests: Convert remaining "sys.exit()" to "raise SystemExit". 2017-06-10 20:34:38 +03:00
heapalloc_bytesio.py.exp tests/heapalloc_bytesio: Test for BytesIO with preallocates space. 2017-02-02 00:38:38 +03:00
heapalloc_bytesio2.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_bytesio2.py.exp py/objstringio: If created from immutable object, follow copy on write policy. 2017-06-09 17:33:01 +03:00
heapalloc_exc_compressed.py py/objexcept: Allow compression of exception message text. 2020-04-05 15:02:06 +10:00
heapalloc_exc_compressed.py.exp py/objexcept: Allow compression of exception message text. 2020-04-05 15:02:06 +10:00
heapalloc_exc_compressed_emg_exc.py py/objexcept: Allow compression of exception message text. 2020-04-05 15:02:06 +10:00
heapalloc_exc_compressed_emg_exc.py.exp py/objexcept: Allow compression of exception message text. 2020-04-05 15:02:06 +10:00
heapalloc_exc_raise.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_exc_raise.py.exp tests/heapalloc_exc_raise.py: Heap alloc test for raising/catching exc. 2017-02-20 04:22:32 +03:00
heapalloc_fail_bytearray.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_bytearray.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_dict.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_dict.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_list.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_list.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_memoryview.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_memoryview.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_set.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_set.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_fail_tuple.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_fail_tuple.py.exp tests/micropython: Add some tests for failed heap allocation. 2019-04-18 14:34:12 +10:00
heapalloc_inst_call.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_inst_call.py.exp tests/heapalloc_inst_call: Test for no alloc for simple object calls. 2016-12-25 00:50:27 +03:00
heapalloc_int_from_bytes.py tests/micropython: Add test for int.from_bytes with many zero bytes. 2017-05-06 10:29:09 +10:00
heapalloc_int_from_bytes.py.exp tests/micropython: Add test for int.from_bytes with many zero bytes. 2017-05-06 10:29:09 +10:00
heapalloc_iter.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_str.py tests/heapalloc_str: Test no-replacement case for str.replace(). 2017-03-22 22:17:52 +03:00
heapalloc_str.py.exp tests/heapalloc_str: Test for alloc-free string operations. 2017-01-27 00:49:39 +03:00
heapalloc_super.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_super.py.exp tests: Add tests for calling super and loading a method directly. 2017-04-22 23:39:38 +10:00
heapalloc_traceback.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
heapalloc_traceback.py.exp tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_yield_from.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
heapalloc_yield_from.py.exp tests/micropython: Add test for yield-from while heap is locked. 2019-12-27 12:34:22 +11:00
import_mpy_invalid.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
import_mpy_invalid.py.exp tests: Move .mpy import tests from import/ to micropython/ dir. 2020-07-26 22:04:31 +10:00
import_mpy_native_gc.py all: Remove MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE. 2021-09-16 16:04:03 +10:00
import_mpy_native_gc.py.exp py/persistentcode: Maintain root ptr list of imported native .mpy code. 2020-08-02 22:34:09 +10:00
import_mpy_native_x64.py all: Remove MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE. 2021-09-16 16:04:03 +10:00
import_mpy_native_x64.py.exp tests: Move .mpy import tests from import/ to micropython/ dir. 2020-07-26 22:04:31 +10:00
kbd_intr.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
kbd_intr.py.exp tests/micropython: Add test for micropython.kbd_intr(). 2017-04-18 17:24:30 +10:00
meminfo.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
meminfo.py.exp tests/meminfo: Update for addition of "max free sz" output. 2016-07-01 00:39:26 +03:00
memstats.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
memstats.py.exp tests: Add missing tests for builtins, and many other things. 2015-04-04 22:05:30 +01:00
native_closure.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_closure.py.exp tests: Add specific test for closures in native emitter. 2015-04-03 16:14:25 +01:00
native_const.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_const.py.exp tests/micropython: Test loading const objs in native and viper funcs. 2018-09-27 23:39:08 +10:00
native_const_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_const_intbig.py.exp tests/micropython/: Split off intbig tests. 2017-03-07 07:12:58 +01:00
native_for.py tests: Move native for test from pybnative to micropython. 2021-01-29 23:57:10 +11:00
native_for.py.exp tests: Move native for test from pybnative to micropython. 2021-01-29 23:57:10 +11:00
native_gen.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_gen.py.exp tests/micropython: Add test for native generators. 2019-09-26 16:53:47 +10:00
native_misc.py py/emitnative: Ensure stack settling is safe mid-branch. 2021-07-19 23:18:59 +10:00
native_misc.py.exp py/emitnative: Ensure stack settling is safe mid-branch. 2021-07-19 23:18:59 +10:00
native_try.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_try.py.exp tests/micropython: Add tests for try and with blocks under native/viper. 2018-08-17 14:11:36 +10:00
native_try_deep.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_try_deep.py.exp tests/micropython: Add tests for try and with blocks under native/viper. 2018-08-17 14:11:36 +10:00
native_with.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
native_with.py.exp py: Shorten error messages by using contractions and some rewording. 2018-09-20 14:33:10 +10:00
opt_level.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
opt_level.py.exp tests: Split out test for optimisation level and line-no printing. 2019-08-28 12:47:58 +10:00
opt_level_lineno.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
opt_level_lineno.py.exp tests: Split out test for optimisation level and line-no printing. 2019-08-28 12:47:58 +10:00
schedule.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
schedule.py.exp tests/micropython: Add tests for micropython.schedule(). 2017-03-20 15:20:26 +11:00
stack_use.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
stack_use.py.exp tests/micropython: Add test for micropython.stack_use() function. 2016-12-28 17:46:52 +11:00
viper_addr.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_addr.py.exp py: Allow to pass in read-only buffers to viper and inline-asm funcs. 2019-08-06 15:58:23 +10:00
viper_args.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_args.py.exp py/emitnative: Support arbitrary number of arguments to viper functions. 2018-09-15 22:39:27 +10:00
viper_binop_arith.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_arith.py.exp py: Implement native multiply operation in viper emitter. 2015-06-04 14:00:29 +00:00
viper_binop_arith_uint.py py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_arith_uint.py.exp py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_bitwise_uint.py py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_bitwise_uint.py.exp py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_comp.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_comp.py.exp tests: Add tests for viper binary operations. 2014-09-29 19:42:06 +01:00
viper_binop_comp_imm.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_comp_imm.py.exp asmarm: Fix bug with encoding small negative ints using MVN instruction. 2014-12-14 03:24:17 +02:00
viper_binop_comp_uint.py py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_comp_uint.py.exp py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_binop_divmod.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_divmod.py.exp py/emitnative: Implement floor-division and modulo for viper emitter. 2017-10-11 18:54:34 +11:00
viper_binop_multi_comp.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_binop_multi_comp.py.exp py: Partially fix viper multi-comparison; add test for it. 2014-10-19 19:00:51 +01:00
viper_cond.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_cond.py.exp tests/micropython/viper_cond: Add test for large int as bool. 2018-08-04 22:16:24 +10:00
viper_const.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_const.py.exp tests/micropython: Test loading const objs in native and viper funcs. 2018-09-27 23:39:08 +10:00
viper_const_intbig.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_const_intbig.py.exp tests/micropython: Test loading const objs in native and viper funcs. 2018-09-27 23:39:08 +10:00
viper_error.py py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_error.py.exp py/emitnative: Implement binary operations for viper uint operands. 2020-06-27 00:24:04 +10:00
viper_globals.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_globals.py.exp py/emitnative: Make viper funcs run with their correct globals context. 2018-09-15 22:39:27 +10:00
viper_import.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_import.py.exp tests/micropython: Add test for import from within viper function. 2016-11-10 22:54:55 +11:00
viper_misc.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_misc.py.exp tests/micropython/: Split off intbig tests. 2017-03-07 07:12:58 +01:00
viper_misc2.py py/emitnative: Fix x86-64 emitter to generate correct 8/16-bit stores. 2021-05-20 23:43:25 +10:00
viper_misc2.py.exp py/emitnative: Fix x86-64 emitter to generate correct 8/16-bit stores. 2021-05-20 23:43:25 +10:00
viper_misc_intbig.py all: Rename "sys" module to "usys". 2020-09-04 00:10:24 +10:00
viper_misc_intbig.py.exp tests/micropython/: Split off intbig tests. 2017-03-07 07:12:58 +01:00
viper_ptr8_load.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr8_load.py.exp tests: Add more tests for viper, including tests for ViperTypeError's. 2015-04-22 23:18:28 +01:00
viper_ptr8_store.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr8_store.py.exp tests: Add more tests for viper, including tests for ViperTypeError's. 2015-04-22 23:18:28 +01:00
viper_ptr16_load.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr16_load.py.exp tests: Add more tests for viper 16/32-bit load/store, and ellipsis. 2015-10-13 18:24:36 +01:00
viper_ptr16_store.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr16_store.py.exp tests: Add more tests for viper 16/32-bit load/store, and ellipsis. 2015-10-13 18:24:36 +01:00
viper_ptr32_load.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr32_load.py.exp tests: Add more tests for viper 16/32-bit load/store, and ellipsis. 2015-10-13 18:24:36 +01:00
viper_ptr32_store.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_ptr32_store.py.exp tests: Add more tests for viper 16/32-bit load/store, and ellipsis. 2015-10-13 18:24:36 +01:00
viper_subscr.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_subscr.py.exp py: Implement implicit cast to obj for viper load/store index/value. 2015-06-04 11:52:16 +01:00
viper_subscr_multi.py py/emitnative: Ensure load_subscr does not clobber existing REG_RET. 2021-09-13 22:30:24 +10:00
viper_subscr_multi.py.exp py/emitnative: Ensure load_subscr does not clobber existing REG_RET. 2021-09-13 22:30:24 +10:00
viper_try.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_try.py.exp tests/micropython: Add tests for try and with blocks under native/viper. 2018-08-17 14:11:36 +10:00
viper_types.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_types.py.exp py/native: Improve support for bool type in viper functions. 2019-05-03 23:18:30 +10:00
viper_with.py tests: Format all Python code with black, except tests in basics subdir. 2020-03-30 13:21:58 +11:00
viper_with.py.exp py: Shorten error messages by using contractions and some rewording. 2018-09-20 14:33:10 +10:00