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 1 238 0.003
loops gen 2 3 3 359 0.005
fib_recursive gen 6 5 5 1,132 0.005
fib_iter gen 7 5 7 960 0.007
asdl_generated gen 7 8 9 519 0.014
scoped_resource gen 26 28 25 1,364 0.019
parse gen 22 24 23 952 0.023
containers gen 3 5 3 133 0.023
classes gen 2 3 2 37 0.049
tuple_return_value gen 13 16 14 251 0.052
files gen 7 4 5 107 0.064
gc_stack_roots gen 1 1 0 13 0.109
length gen 37 34 37 247 0.149
cartesian gen 67 75 69 407 0.164
escape gen 94 102 98 424 0.222
cgi gen 258 246 258 725 0.356
varargs gen 13 19 20 22 0.586
control_flow gen 135 179 137 153 0.885

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.5 4.5 12.3 0.35
asdl_generated gen 3.3 3.4 3.4 8.3 0.40
gc_stack_roots gen 3.4 3.5 3.4 8.5 0.40
scoped_resource gen 3.4 3.5 3.5 8.4 0.41
cgi gen 3.5 3.5 3.5 8.5 0.42
escape gen 3.5 3.4 3.4 8.5 0.42
loops gen 3.5 3.5 3.5 8.5 0.42
cartesian gen 3.5 3.4 3.5 8.4 0.42
fib_iter gen 3.5 3.7 3.5 8.4 0.42
fib_recursive gen 3.5 3.5 3.7 8.4 0.42
length gen 3.5 3.5 3.7 8.4 0.42
parse gen 3.8 3.8 3.8 8.9 0.43
files gen 3.7 3.8 3.8 8.5 0.43
modules gen 3.7 3.7 3.7 8.4 0.44
tuple_return_value gen 3.7 3.7 3.5 8.4 0.44
control_flow gen 3.8 3.8 3.8 8.3 0.46
containers gen 28.5 28.5 28.5 49.0 0.58
varargs gen 5.5 5.5 5.4 8.5 0.65

System Time (milliseconds)

Lower ratios are better.

example name gen C++ C++-NoSouffle C++-Souffle Python C++ : Python
fib_iter gen 0 2 0 7 0.000
fib_recursive gen 0 1 2 7 0.000
files gen 0 3 2 4 0.000
gc_stack_roots gen 0 0 1 11 0.000
classes gen 1 0 1 12 0.076
loops gen 1 1 0 10 0.086
modules gen 1 0 0 7 0.114
control_flow gen 1 0 1 6 0.166
tuple_return_value gen 2 1 1 12 0.166
cgi gen 2 6 4 12 0.167
asdl_generated gen 3 2 1 13 0.232
length gen 2 3 2 8 0.250
parse gen 4 3 3 15 0.263
containers gen 11 10 11 29 0.386
scoped_resource gen 4 4 5 10 0.398
escape gen 5 3 6 9 0.556
varargs gen 26 20 18 40 0.644
cartesian gen 8 5 6 9 0.888

raw benchmark files