mycpp Code Generation

Measure the speedup from mycpp, and the resource usage.

Source code: oils/mycpp/examples

User Time (milliseconds)

Lower ratios are better.

example name gen C++ C++-NoSouffle C++-Souffle Python C++ : Python
modules gen 1 1 0 237 0.003
fib_recursive gen 4 6 4 1,122 0.004
loops gen 2 3 2 360 0.007
fib_iter gen 7 6 6 961 0.007
asdl_generated gen 8 8 8 506 0.016
parse gen 20 25 23 951 0.021
scoped_resource gen 30 29 27 1,375 0.022
classes gen 1 1 3 35 0.025
containers gen 5 8 6 145 0.036
files gen 5 7 7 99 0.050
tuple_return_value gen 15 15 13 251 0.059
gc_stack_roots gen 1 1 1 13 0.104
length gen 32 33 33 242 0.134
cartesian gen 70 70 72 395 0.177
escape gen 90 104 95 428 0.209
cgi gen 257 249 260 731 0.351
varargs gen 16 20 13 29 0.562
control_flow gen 134 177 134 144 0.930

Max Resident Set Size (MB)

Lower ratios are better. We use MB (powers of 10), not MiB (powers of 2).

example name gen C++ C++-NoSouffle C++-Souffle Python C++ : Python
classes gen 4.3 4.3 4.3 11.5 0.38
gc_stack_roots gen 3.4 3.4 3.4 7.6 0.45
escape gen 3.4 3.5 3.5 7.5 0.46
cgi gen 3.5 3.5 3.5 7.7 0.46
length gen 3.5 3.5 3.7 7.7 0.46
modules gen 3.5 3.5 3.5 7.7 0.46
scoped_resource gen 3.5 3.5 3.5 7.7 0.46
asdl_generated gen 3.5 3.5 3.4 7.6 0.47
cartesian gen 3.5 3.5 3.5 7.6 0.47
fib_recursive gen 3.5 3.5 3.5 7.6 0.47
parse gen 3.8 3.8 3.7 8.1 0.47
fib_iter gen 3.7 3.5 3.7 7.7 0.47
files gen 3.7 3.5 3.5 7.6 0.48
loops gen 3.7 3.5 3.5 7.6 0.48
tuple_return_value gen 3.7 3.7 3.8 7.6 0.48
control_flow gen 3.8 3.7 3.8 7.7 0.49
containers gen 28.3 28.7 28.4 48.3 0.59
varargs gen 5.5 5.5 5.5 7.6 0.72

System Time (milliseconds)

Lower ratios are better.

example name gen C++ C++-NoSouffle C++-Souffle Python C++ : Python
fib_iter gen 0 1 1 5 0.000
gc_stack_roots gen 0 0 0 7 0.000
loops gen 0 0 0 5 0.000
scoped_resource gen 0 3 3 8 0.000
tuple_return_value gen 0 1 2 7 0.000
modules gen 1 0 1 7 0.099
fib_recursive gen 2 0 3 11 0.161
asdl_generated gen 2 2 2 10 0.196
control_flow gen 2 1 2 10 0.200
files gen 2 0 0 9 0.221
classes gen 2 1 0 7 0.251
containers gen 8 6 7 25 0.334
cgi gen 4 2 2 8 0.500
cartesian gen 5 10 3 7 0.715
parse gen 6 2 3 7 0.837
varargs gen 23 18 25 27 0.867
length gen 6 4 6 6 0.981
escape gen 9 3 4 8 1.132

raw benchmark files