Benchmarks regarding the Sather compiler
On this page you will find links to several benchmarks that show the
impact of six different optimizations of the new 1.0.8 Sather
compiler.
The Benchmarks
If your browser supports forms, you can select and sort the tables
the way you want them here.
Note: This is an experimental service and may not work all the time.
The Optimization Options:
- Inlining
Inlining replaces function and procedure calls by the body of
the respective function/procedure. It is also able to inline some
of the iterators.
- Replace Iters
The current compiler is able to replace the most commonly used
iters in many cases by much faster code. The iters replaced are,
in the class AREF and ARRAY: aelt!, elt!, ind!, aind!, set! and
aset!, and in the INT class the iters times! times!:INT and upto!
are replaced. If this option is not used, but the inlining option
is, some of those iters are inlined. This gives, especially
together with hoisting of the initializations code that runs
nearly as fast as the one generated with this option.
- Move While! and Until!
If a while! or until! is at the beginning of the loop, this
option moves it to the end and encloses the loop in an if
statement. This allows us to move more loop constants and iter
initializations out of the loop.
- Hoist Iter Once Arguments
In many cases it is possible to move the initialization of once
arguments of iters out of the loop. This makes the loop smaller
and removes an if statement in the loop.
- Hoist Loop Invariants
Loop constants should be evaluated only once, outside the loop.
If this option is used, but not the preceding one, many
initializations of once arguments are still hoisted, although
this option is less aggressive than the one above.
- Common Subexpression Elimination
Common subexpressions are eliminated with this option, and
multiple writes are removed.
Description of the Tables
Each line of the tables shows the result when using some of the
optimization options of the compiler. The options that are turned
on for each line are marked with a blue dot. A red dot (only used in
the impact tables) signifies
that this line shows the difference between two runs of the compiler,
once with this option turned off, and once when it is turned on.
To the right are the different measurments made. Each column is
divided into 4 subcolumns.
- The first one shows the absolute value,
- the second one the relative value when compared with the standard compiler
(the one shown in row 1),
- the third one the difference between the standard compiler and this line
in absolute values
- and the fourth one the relative difference between the standard compiler
and this line.
Note that the impact tables will only show the last two subcolumns,
and instead of comparing the values with the standard compiler, they show
the difference introduced by using the option marked with a red dot.
The Measurements
- # [#]
This gives you the number of the row, and a unique number for
this combination of options of this row. This number
may be used to quickly locate the same row in other tables.
The impact table, where each row describes actually two rows, has
two numbers in the square brackest, one numbering the row if the
option with the red dot is not used, and one if it is used.
- Best Run
The time in seconds of the fastest run of the test program.
- Mean Run
This is the average time the program ran during the
measurements.
- Size
This is the size of the executable in KB.
- Compile Time
This shows how many seconds the compiler needed to compile the
benchmark program.
- Memory used by the Compiler
The number of KB used by the compiler to compile the
Sather program