[GSoC 2016] Enabling Polyhedral Optimizations in Julia - Midterm Report

427 views
Skip to first unread message

Matthias Reisinger

unread,
Jun 21, 2016, 8:15:33 PM6/21/16
to Polly Development, Tobias Grosser, Jameson Nash, Tim Holy, llvm...@lists.llvm.org, juli...@googlegroups.com
Dear Community,

in an earlier post, students working on LLVM were asked to provide a short report on
their GSoC project. in the following I want to give an overview on the current status of my
GSoC project and outline my next planned activities. Since my mentoring organization is Julia,
I also send this to the according mailing list.

1. Activities so far:

As described in my proposal [1], I am working on making available Polly's optimizations on Julia.
Within the pull-requests [2] and [3] I integrated Polly into Julia's LLVM-based JIT infrastructure.
Polly can now be explicitly used to optimize Julia functions that are annotated with the newly
introduced `@polly` macro. You may also read my blog post [4] on this topic, which illustrates how
these new features can be used in Julia. In a next step I used first micro benchmarks to analyze
the LLVM code that Julia produces internally and tried to determine characteristics of the produced
code that prevents Polly from applying its optimizations. For a more comprehensive evaluation,
I ported the PolyBench benchmark suite to Julia. My recent blog post [5] provides more details on this.

These benchmarks helped to identify Julia constructs which hinder Polly's SCoP detection. `for`-loops
for which both the lower and the upper bound are parametric are lowered to LLVM code that restrain
ScalarEvolution analysis and has been discussed in the bug report at [6]. It was possible to solve
this problem and I will shortly supply a patch for this. Another language construct that is lowered to
LLVM IR that limits the optimization potential are Julia's `StepRange`s. More concretely, this regards
loops of the form `for i = lower_bound:step:upper_bound`. They will prevent optimizations especially
when occurring inside other loops.

2. Next steps:

It is planned to complete the analysis of Polly on Julia code on the existing benchmarks and solve the
problems mentioned above. Furthermore, I plan to extend the analysis to find critical code
parts. Therefore I plan to use computation kernels from Julia's base library to detect further regions that
cause Polly to fail to perform optimizations.

When the necessary corrections make it possible to apply Polly to a reasonably large amount of Julia
programs it is furthermore planned to enhance Polly's bound-check-elimination to work in Julia. So far
it is only possible to optimize Julia code that does not contain bound-checks, that means currently they
have to be turned off explicitly (either through the `@inbounds` macro or via Julia's `--check-bounds=no`
command-line switch). The aim is to be able to use Polly in the presence of Julia's bound-checks.

Best regards,
Matthias

Tobias Grosser

unread,
Jun 22, 2016, 10:39:54 AM6/22/16
to Matthias Reisinger, Polly Development, llvm...@lists.llvm.org, Tim Holy, juli...@googlegroups.com
On Wed, Jun 22, 2016, at 02:15 AM, Matthias Reisinger via llvm-dev
wrote:
> Dear Community,

Hi Matthias,

thank you a lot for this update!

> in an earlier post, students working on LLVM were asked to provide a
> short
> report on
> their GSoC project. in the following I want to give an overview on the
> current status of my
> GSoC project and outline my next planned activities. Since my mentoring
> organization is Julia,
> I also send this to the according mailing list.
>
> *1. Activities so far:*
Very good work indeed! Thanks for upstreaming the first patches and for
tracking down all the mismatches that today make optimizations more
difficult than necessary! It seems -- despite it certainly requiring
effort -- most of the changes look tracktable. Looking forward to see
them resolved one-by-one.

Also, thank you for writing a PollyBench-Julia version. This is indeed a
great tool to test your work and
obviously gives some nice data to talk about in your blog post.

Best,
Tobias

Viral Shah

unread,
Jul 9, 2016, 8:42:30 PM7/9/16
to julia-dev, matthias.j...@gmail.com, poll...@googlegroups.com, llvm...@lists.llvm.org, tim....@gmail.com
I am looking forward to trying this out when it is ready!

-viral

Stefan Karpinski

unread,
Jul 11, 2016, 8:19:15 AM7/11/16
to juli...@googlegroups.com, matthias.j...@gmail.com, poll...@googlegroups.com, llvm...@lists.llvm.org, Tim Holy
Viral told us excitedly about at-the-time-new polyhedral loop optimizations way back in 2009 and we were very eager to try them out in Julia as soon as we could. That didn't quite pan out as quickly as we imagined, but it seems that you're now really making it happen – very exciting!
Reply all
Reply to author
Forward
0 new messages