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 2 366 0.005
fib_recursive gen 6 6 6 1,083 0.006
modules gen 1 1 0 230 0.006
fib_iter gen 7 6 4 968 0.007
asdl_generated gen 9 9 8 527 0.017
scoped_resource gen 29 28 26 1,381 0.021
parse gen 24 24 20 968 0.024
classes gen 1 2 3 38 0.035
files gen 4 6 5 103 0.038
tuple_return_value gen 14 15 12 251 0.055
containers gen 7 5 5 119 0.058
gc_stack_roots gen 1 1 1 14 0.097
length gen 31 32 35 240 0.128
cartesian gen 69 74 70 401 0.172
escape gen 93 100 91 436 0.213
cgi gen 258 251 256 751 0.344
varargs gen 15 19 19 22 0.660
control_flow gen 136 178 134 146 0.934

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.2 4.5 4.3 11.4 0.37
asdl_generated gen 3.3 3.3 3.4 7.7 0.42
gc_stack_roots gen 3.3 3.4 3.4 7.6 0.43
cartesian gen 3.4 3.4 3.4 7.7 0.44
cgi gen 3.4 3.5 3.5 7.7 0.44
length gen 3.4 3.5 3.5 7.6 0.45
fib_recursive gen 3.5 3.7 3.7 7.7 0.46
loops gen 3.5 3.7 3.5 7.7 0.46
escape 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.7 7.6 0.47
parse gen 3.8 3.9 3.7 8.0 0.47
fib_iter gen 3.7 3.5 3.5 7.6 0.48
files gen 3.7 3.7 3.7 7.6 0.48
tuple_return_value gen 3.8 3.8 3.8 7.7 0.49
control_flow gen 3.8 3.8 3.8 7.5 0.51
containers gen 28.5 28.4 28.4 48.2 0.59
varargs gen 5.5 5.5 5.5 7.7 0.71

System Time (milliseconds)

Lower ratios are better.

example name gen C++ C++-NoSouffle C++-Souffle Python C++ : Python
cgi gen 0 2 4 9 0.000
control_flow gen 0 0 1 8 0.000
fib_iter gen 0 1 3 4 0.000
fib_recursive gen 0 0 0 12 0.000
gc_stack_roots gen 0 1 1 7 0.000
modules gen 0 0 1 5 0.000
tuple_return_value gen 1 1 3 8 0.123
asdl_generated gen 1 1 2 7 0.143
scoped_resource gen 1 4 4 7 0.145
containers gen 7 9 9 34 0.202
loops gen 1 1 0 4 0.210
parse gen 2 3 5 8 0.255
classes gen 1 1 0 5 0.269
files gen 3 1 2 6 0.488
escape gen 5 3 7 8 0.625
varargs gen 24 20 20 33 0.704
length gen 8 4 4 6 1.323
cartesian gen 9 6 6 6 1.501

raw benchmark files