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
gc_stack_roots gen 0 1 0 12 0.000
modules gen 0 1 1 208 0.000
fib_recursive gen 5 5 5 1,006 0.005
loops gen 2 2 2 308 0.007
fib_iter gen 5 6 4 739 0.007
asdl_generated gen 10 9 9 508 0.019
scoped_resource gen 29 29 27 1,222 0.023
parse gen 22 25 23 906 0.024
classes gen 1 2 0 32 0.035
containers gen 6 6 5 116 0.051
files gen 5 6 6 92 0.057
tuple_return_value gen 14 16 14 214 0.067
length gen 31 31 28 221 0.141
cartesian gen 66 73 64 359 0.185
escape gen 81 92 84 374 0.217
cgi gen 184 177 184 658 0.280
varargs gen 17 15 12 20 0.835
control_flow gen 125 167 122 133 0.942

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.6 4.6 11.6 0.38
gc_stack_roots gen 3.4 3.5 3.5 7.9 0.43
asdl_generated gen 3.4 3.4 3.4 7.6 0.45
cartesian gen 3.4 3.5 3.5 7.6 0.45
escape gen 3.5 3.5 3.5 7.7 0.46
cgi gen 3.5 3.7 3.5 7.6 0.47
fib_iter gen 3.7 3.7 3.5 7.7 0.47
fib_recursive gen 3.7 3.7 3.7 7.7 0.47
length gen 3.7 3.7 3.7 7.7 0.47
modules gen 3.7 3.8 3.7 7.7 0.47
parse gen 3.9 3.9 3.9 8.3 0.48
loops gen 3.7 3.7 3.7 7.6 0.48
scoped_resource gen 3.7 3.5 3.4 7.6 0.48
control_flow gen 3.8 3.8 3.7 7.7 0.49
tuple_return_value gen 3.8 3.8 3.8 7.6 0.50
files gen 3.9 3.8 3.7 7.7 0.51
containers gen 28.5 28.5 28.4 48.2 0.59
varargs gen 5.6 5.5 5.5 7.7 0.73

System Time (milliseconds)

Lower ratios are better.

example name gen C++ C++-NoSouffle C++-Souffle Python C++ : Python
asdl_generated gen 0 1 0 7 0.000
control_flow gen 0 1 3 7 0.000
fib_recursive gen 0 0 0 3 0.000
loops gen 0 1 0 7 0.000
tuple_return_value gen 0 0 0 7 0.000
length gen 1 1 4 6 0.163
modules gen 1 0 0 6 0.185
classes gen 1 0 2 6 0.189
fib_iter gen 1 0 2 5 0.211
scoped_resource gen 1 2 2 4 0.247
gc_stack_roots gen 1 1 1 4 0.256
files gen 1 0 0 3 0.292
containers gen 6 7 7 20 0.297
cartesian gen 2 2 5 6 0.335
parse gen 2 1 1 6 0.345
varargs gen 7 9 12 16 0.457
escape gen 4 2 3 7 0.571
cgi gen 2 1 2 1 1.992

raw benchmark files