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
loops gen 2 2 1 355 0.005
fib_recursive gen 6 6 5 1,115 0.006
modules gen 1 0 0 231 0.006
fib_iter gen 7 5 6 952 0.007
asdl_generated gen 8 8 7 533 0.015
scoped_resource gen 26 27 26 1,386 0.019
parse gen 22 55 24 953 0.024
containers gen 4 6 3 121 0.033
classes gen 2 3 3 35 0.050
tuple_return_value gen 14 16 14 253 0.054
files gen 6 6 6 101 0.057
gc_stack_roots gen 1 1 0 12 0.113
length gen 30 34 33 244 0.122
cartesian gen 70 71 72 390 0.180
escape gen 93 101 91 422 0.221
cgi gen 258 248 258 735 0.352
varargs gen 16 18 14 22 0.747
control_flow gen 136 178 134 145 0.943

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
asdl_generated gen 3.4 3.4 3.3 7.6 0.45
cartesian gen 3.4 3.5 3.5 7.6 0.45
cgi gen 3.4 3.4 3.4 7.6 0.45
fib_iter gen 3.4 3.5 3.5 7.6 0.45
gc_stack_roots gen 3.4 3.4 3.4 7.6 0.45
modules gen 3.5 3.7 3.7 7.7 0.46
escape gen 3.5 3.4 3.5 7.6 0.47
fib_recursive gen 3.5 3.7 3.5 7.6 0.47
length gen 3.5 3.7 3.7 7.6 0.47
scoped_resource gen 3.5 3.5 3.5 7.6 0.47
loops gen 3.7 3.5 3.7 7.7 0.47
parse gen 3.8 3.9 3.7 8.0 0.47
files gen 3.7 3.7 3.8 7.6 0.48
tuple_return_value gen 3.8 3.7 3.8 7.7 0.49
control_flow gen 3.8 3.8 3.8 7.6 0.50
containers gen 28.7 28.3 28.4 48.2 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 2 1 6 0.000
fib_recursive gen 0 0 1 5 0.000
gc_stack_roots gen 0 0 1 8 0.000
modules gen 0 1 1 9 0.000
cgi gen 1 3 2 8 0.125
classes gen 1 0 0 7 0.126
loops gen 1 1 2 6 0.141
control_flow gen 1 1 2 7 0.143
files gen 1 1 1 6 0.159
tuple_return_value gen 1 0 1 5 0.209
asdl_generated gen 2 2 3 9 0.219
parse gen 3 2 1 10 0.306
containers gen 10 8 11 30 0.331
scoped_resource gen 4 4 4 10 0.395
escape gen 5 2 6 10 0.501
cartesian gen 5 9 3 8 0.619
varargs gen 21 20 24 34 0.635
length gen 9 3 6 6 1.494

raw benchmark files