[llvm-dev] crowdsourcing analysis and tuning of LLVM optimization heuristic?
Grigori Fursin via llvm-dev
llvm-dev at lists.llvm.org
Fri Mar 4 04:11:53 PST 2016
We are pleased to announce a prototype framework for sharing compiler
optimization knowledge across diverse hardware platforms, programs and
datasets. We have started aggregating results for LLVM 3.6 .. 3.9 in our
public repository here: http://cTuning.org/crowdtuning-results-llvm
Many of you know that devising good compiler optimization heuristics is
a always challenge. The compiler codebase, workloads and even targets
change so rapidly that manual optimization tuning is not only
unproductive - it is simply infeasible. This explains how it is often
possible to find a combination of compiler flags that beats the default
best (e.g. “-O3”) optimization level by a factor of 2 or more. Poor
compiler optimization heuristics for a particular target directly
affects users’ perception of the target’s performance (and hence its
That’s why we have developed a framework for crowdtuning compiler
optimization heuristics. Here’s a bird’s eye view of how it works. (For
more details, please see
https://github.com/ctuning/ck/wiki/Crowdsource_Experiments ): you
install a client Android app
The app sends system properties to a public server. The server compiles
a random shared workload using some flag combinations that have been
found to work well on similar machines, as well as some new random ones.
The client executes the compiled workload several times to account for
variability etc, and sends the results back to the server.
If a combination is found that improves performance over the
combinations found so far, it gets reduced (by removing flags that do
now affect the performance) and uploaded to a public repository.
Importantly, if a combination significantly degrades performance for a
particular workload, this gets recorded as well. This potentially points
to a problem with optimization heuristics for a particular target, which
may be worth investigating and improving.
At the moment, only global Clang flags are exposed for crowdtuning.
Longer term, we are aiming to cover LLVM “opt” optimizations and
fine-grain transformation decisions (vectorization, unrolling, etc).
It’s work in progress, so we would like to apologize in advance for
possible glitches! We thank all the volunteers who have contributed so
far but there are still many things to add or improve. Please get in
touch if you are interested to know more or contribute!
Grigori Fursin, PhD
CTO, dividiti, UK
More information about the llvm-dev