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 1 1 2 410 0.002
fib_recursive gen 6 5 6 1,108 0.006
modules gen 1 1 1 239 0.006
fib_iter gen 7 6 6 983 0.007
scoped_resource gen 26 26 24 1,379 0.019
asdl_generated gen 10 10 9 518 0.020
parse gen 24 25 22 963 0.025
classes gen 1 2 1 38 0.036
containers gen 5 5 8 133 0.037
tuple_return_value gen 13 15 14 248 0.051
files gen 7 4 7 99 0.069
gc_stack_roots gen 1 0 1 14 0.102
length gen 37 31 33 249 0.148
cartesian gen 67 73 70 390 0.172
escape gen 94 99 94 423 0.222
cgi gen 257 258 257 731 0.352
varargs gen 17 16 11 32 0.528
control_flow gen 135 184 136 143 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.6 0.37
gc_stack_roots gen 3.3 3.4 3.4 7.6 0.43
asdl_generated gen 3.4 3.4 3.3 7.7 0.44
cartesian gen 3.4 3.4 3.4 7.7 0.44
cgi gen 3.5 3.5 3.5 7.7 0.46
escape gen 3.5 3.5 3.4 7.6 0.47
modules gen 3.5 3.7 3.7 7.6 0.47
scoped_resource gen 3.5 3.5 3.5 7.5 0.47
loops gen 3.7 3.5 3.7 7.7 0.47
tuple_return_value gen 3.7 3.8 3.7 7.7 0.47
fib_iter gen 3.7 3.7 3.5 7.6 0.48
fib_recursive gen 3.7 3.5 3.7 7.6 0.48
length gen 3.7 3.5 3.4 7.6 0.48
parse gen 3.9 3.7 3.7 8.1 0.48
control_flow gen 3.8 3.8 3.8 7.7 0.49
files gen 3.8 3.8 3.7 7.7 0.49
containers gen 28.5 28.4 28.5 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
asdl_generated gen 0 0 1 5 0.000
fib_iter gen 0 1 1 8 0.000
fib_recursive gen 0 1 1 9 0.000
files gen 0 3 0 7 0.000
gc_stack_roots gen 0 1 1 7 0.000
modules gen 0 1 0 6 0.000
control_flow gen 1 0 1 10 0.100
length gen 2 6 6 12 0.166
classes gen 1 1 2 7 0.196
cgi gen 2 1 3 10 0.200
tuple_return_value gen 2 2 1 7 0.281
loops gen 2 2 1 6 0.283
parse gen 2 2 3 7 0.294
scoped_resource gen 4 5 6 10 0.399
escape gen 5 6 3 11 0.455
containers gen 10 10 6 19 0.522
varargs gen 21 23 27 24 0.870
cartesian gen 9 8 6 9 1.001

raw benchmark files