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 0 1 14 0.000
modules gen 1 0 0 239 0.003
fib_recursive gen 4 5 6 1,095 0.004
fib_iter gen 6 6 7 959 0.006
loops gen 3 3 2 361 0.007
scoped_resource gen 24 29 29 1,345 0.018
asdl_generated gen 10 7 9 504 0.020
parse gen 23 26 23 957 0.025
classes gen 2 2 2 35 0.052
tuple_return_value gen 13 17 13 245 0.053
files gen 6 6 5 98 0.061
containers gen 8 6 5 120 0.065
length gen 34 36 35 240 0.140
cartesian gen 72 74 68 381 0.188
escape gen 94 103 95 432 0.219
cgi gen 258 247 259 729 0.354
varargs gen 17 17 15 26 0.640
control_flow gen 132 179 135 143 0.924

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.5 0.38
asdl_generated gen 3.3 3.3 3.3 7.6 0.43
cgi gen 3.4 3.5 3.4 7.7 0.44
gc_stack_roots gen 3.4 3.3 3.3 7.7 0.44
cartesian gen 3.4 3.5 3.5 7.6 0.45
fib_recursive gen 3.5 3.5 3.5 7.7 0.46
escape gen 3.5 3.4 3.4 7.6 0.47
scoped_resource gen 3.5 3.5 3.7 7.6 0.47
files gen 3.7 3.7 3.5 7.7 0.47
parse gen 3.8 3.8 3.9 8.0 0.48
fib_iter gen 3.7 3.4 3.4 7.6 0.48
length gen 3.7 3.7 3.5 7.6 0.48
loops gen 3.7 3.7 3.5 7.6 0.48
modules gen 3.7 3.5 3.5 7.6 0.48
control_flow gen 3.8 3.7 3.8 7.6 0.50
tuple_return_value gen 3.8 3.8 3.8 7.6 0.50
containers gen 28.7 28.6 28.5 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
asdl_generated gen 0 3 1 6 0.000
loops gen 0 0 0 10 0.000
files gen 1 1 2 10 0.100
classes gen 1 1 1 7 0.129
fib_iter gen 1 1 0 7 0.146
containers gen 6 8 9 32 0.182
cgi gen 2 4 2 10 0.200
gc_stack_roots gen 1 1 1 7 0.202
fib_recursive gen 2 1 0 8 0.224
modules gen 1 1 1 3 0.238
tuple_return_value gen 2 0 2 8 0.250
parse gen 2 1 2 8 0.255
control_flow gen 4 2 1 9 0.441
escape gen 4 2 4 8 0.496
length gen 4 1 3 8 0.496
cartesian gen 3 6 7 6 0.504
varargs gen 22 21 23 29 0.743
scoped_resource gen 6 2 2 5 1.193

raw benchmark files