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 0 2 2 241 0.000
loops gen 1 3 3 375 0.002
fib_recursive gen 5 5 4 1,116 0.004
fib_iter gen 7 6 7 959 0.008
asdl_generated gen 9 8 7 528 0.017
scoped_resource gen 28 30 29 1,377 0.020
parse gen 22 24 21 941 0.023
classes gen 1 1 1 27 0.035
files gen 4 6 6 103 0.038
containers gen 5 7 6 125 0.042
tuple_return_value gen 14 17 14 253 0.056
gc_stack_roots gen 1 0 1 12 0.122
length gen 35 32 38 243 0.143
cartesian gen 69 73 68 397 0.173
escape gen 94 101 94 444 0.212
cgi gen 259 250 260 744 0.348
varargs gen 14 24 17 30 0.461
control_flow gen 135 179 135 145 0.926

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.5 4.5 4.3 11.5 0.39
gc_stack_roots gen 3.4 3.4 3.4 7.7 0.44
asdl_generated gen 3.4 3.4 3.4 7.6 0.45
cartesian gen 3.5 3.5 3.4 7.7 0.46
fib_recursive gen 3.5 3.7 3.5 7.7 0.46
cgi gen 3.5 3.5 3.4 7.6 0.47
escape gen 3.5 3.5 3.4 7.6 0.47
fib_iter gen 3.5 3.5 3.5 7.6 0.47
modules gen 3.5 3.7 3.7 7.6 0.47
scoped_resource gen 3.5 3.5 3.4 7.6 0.47
parse gen 3.8 3.9 3.9 8.1 0.47
files gen 3.7 3.7 3.7 7.7 0.47
length gen 3.7 3.5 3.7 7.6 0.48
loops gen 3.7 3.5 3.5 7.6 0.48
control_flow gen 3.8 3.8 3.8 7.6 0.50
tuple_return_value gen 3.8 3.8 3.8 7.6 0.50
containers gen 28.5 28.3 28.5 48.2 0.59
varargs gen 5.5 5.4 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 0 11 0.000
gc_stack_roots gen 0 1 1 9 0.000
classes gen 2 2 2 19 0.099
control_flow gen 1 0 2 8 0.124
cgi gen 1 2 0 8 0.125
tuple_return_value gen 1 0 1 5 0.202
scoped_resource gen 2 3 1 9 0.221
fib_recursive gen 2 1 2 6 0.300
parse gen 4 3 5 12 0.329
asdl_generated gen 1 2 3 3 0.337
loops gen 2 0 0 5 0.345
containers gen 9 8 8 27 0.346
modules gen 1 0 0 4 0.363
files gen 3 1 1 8 0.367
cartesian gen 7 7 7 9 0.774
length gen 4 5 1 5 0.817
varargs gen 25 14 21 27 0.915
escape gen 4 4 5 4 1.001

raw benchmark files