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
fib_recursive gen 4 6 6 1,077 0.004
modules gen 1 1 0 233 0.006
fib_iter gen 6 6 7 971 0.006
loops gen 3 2 1 358 0.007
asdl_generated gen 8 8 8 514 0.016
scoped_resource gen 26 31 30 1,375 0.019
parse gen 22 25 24 967 0.023
containers gen 3 5 5 123 0.024
classes gen 1 3 1 35 0.038
tuple_return_value gen 12 14 12 249 0.048
files gen 7 5 5 101 0.068
gc_stack_roots gen 1 0 1 13 0.104
length gen 36 35 29 249 0.143
cartesian gen 72 74 69 396 0.182
escape gen 94 99 94 443 0.213
varargs gen 8 19 18 24 0.335
cgi gen 254 249 259 740 0.343
control_flow gen 144 178 134 147 0.981

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.5 4.5 11.6 0.37
asdl_generated gen 3.4 3.4 3.3 7.7 0.44
escape gen 3.4 3.5 3.4 7.6 0.45
gc_stack_roots gen 3.4 3.4 3.5 7.6 0.45
cgi gen 3.5 3.4 3.4 7.7 0.46
fib_iter gen 3.5 3.5 3.5 7.7 0.46
scoped_resource gen 3.5 3.4 3.5 7.7 0.46
cartesian gen 3.5 3.5 3.5 7.6 0.47
modules gen 3.5 3.5 3.7 7.6 0.47
control_flow gen 3.7 3.7 3.7 7.6 0.48
fib_recursive gen 3.7 3.5 3.5 7.6 0.48
length gen 3.7 3.5 3.7 7.6 0.48
loops gen 3.7 3.5 3.7 7.6 0.48
parse gen 3.9 3.9 3.8 8.1 0.48
files gen 3.8 3.7 3.8 7.6 0.50
tuple_return_value gen 3.8 3.7 3.7 7.6 0.50
containers gen 28.5 28.3 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
control_flow gen 0 2 2 6 0.000
files gen 0 2 2 6 0.000
gc_stack_roots gen 0 1 0 7 0.000
loops gen 0 1 2 10 0.000
modules gen 0 1 1 6 0.000
fib_iter gen 1 1 0 7 0.146
classes gen 1 0 1 8 0.167
fib_recursive gen 2 0 0 8 0.223
containers gen 10 9 9 30 0.331
tuple_return_value gen 3 3 3 8 0.375
asdl_generated gen 2 2 2 5 0.399
parse gen 3 2 1 6 0.510
scoped_resource gen 4 2 0 8 0.512
length gen 3 1 10 5 0.594
escape gen 4 6 5 6 0.667
cgi gen 6 4 1 9 0.667
varargs gen 30 19 20 33 0.913
cartesian gen 3 6 6 3 1.001

raw benchmark files