forked from OSchip/llvm-project
384 lines
9.7 KiB
HTML
384 lines
9.7 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
|
"http://www.w3.org/TR/html4/strict.dtd">
|
|
<!-- Material used from: HTML 4.01 specs: http://www.w3.org/TR/html401/ -->
|
|
<html>
|
|
<head> <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
|
<title>Polly - Todo</title>
|
|
<link type="text/css" rel="stylesheet" href="menu.css">
|
|
<link type="text/css" rel="stylesheet" href="content.css">
|
|
</head>
|
|
<body>
|
|
<!--#include virtual="menu.html.incl"-->
|
|
<div id="content">
|
|
<h3> Setup infrastructure at LLVM </h3>
|
|
|
|
<p>We are currently moving to the LLVM infrastructure
|
|
</p>
|
|
<table class="wikitable" cellpadding="2">
|
|
|
|
<tbody><tr>
|
|
<th>Task
|
|
</th><th> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
<tr>
|
|
<th align="left"> Move to LLVM SVN
|
|
</th><td class="done" align="center"> done</br>
|
|
<a
|
|
href="http://llvm.org/svn/llvm-project/polly"
|
|
>http://llvm.org/svn/llvm-project/polly</a>
|
|
</td><td> Tobias
|
|
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Git mirror
|
|
</th><td class="done" align="center"> done<br />
|
|
git://llvm.org/git/polly.git
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Commit mails
|
|
</th><td class="done" align="center"> done <br />
|
|
llvm-commits@cs.uiuc.edu
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
|
|
<th align="left"> LLVM Bugzilla category
|
|
</th><td class="done" align="center"> done <br />
|
|
<a href="http://llvm.org/bugs/enter_bug.cgi?product=Projects">LLVM Bugzilla</a>
|
|
<br />
|
|
(Product is 'Projects', Component is 'Polly')
|
|
</td><td> Tobias
|
|
<tr>
|
|
<th align="left"> Website
|
|
</th><td class="inprogress" align="center"> in progress
|
|
<br />
|
|
<a href="http://polly.grosser.es">http://polly.grosser.es</a>,
|
|
later maybe polly.llvm.org
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left">Buildbot that runs 'make polly-test'
|
|
</th><td class="done" align="center">
|
|
done<br />
|
|
<a
|
|
href="http://google1.osuosl.org:8011/console">http://google1.osuosl.org:8011/console</a>
|
|
<td> Tobias,<br />Raghesh,<br /> Andreas
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Nightly performance/coverage tests<br /> (with the llvm
|
|
test-suite)
|
|
</th><td align="center">
|
|
</th><td> Andreas
|
|
</td></tr>
|
|
</th><td>
|
|
|
|
</td></tr>
|
|
</tbody></table>
|
|
<h3> Phase 2 </h3>
|
|
<p>The second phase of Polly can build on a robust, but very limited framework.
|
|
In this phase work on removing limitations and extending the framework is
|
|
planned. Also we plan the first very simple transformations. Furthermore the
|
|
build system will be improved to simplify deployment.
|
|
</p>
|
|
<table class="wikitable" cellpadding="2">
|
|
|
|
<tbody><tr>
|
|
|
|
<th colspan="3" style="background: none repeat scroll 0% 0% rgb(239, 239,
|
|
239);"> Frontend
|
|
</th></tr>
|
|
<tr>
|
|
<th width="400px"> Task
|
|
</th><th width="150px"> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
<tr>
|
|
<th align="left"> Support for casts in expressions
|
|
</th><td>
|
|
</td><td>
|
|
</td><td>
|
|
</td></tr>
|
|
|
|
<tr>
|
|
<th align="left"> Support multi dimensional arrays.
|
|
</th><td align="center"> planning
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Alias sets
|
|
</th></tr>
|
|
<tr>
|
|
<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
|
|
239);"> Middle end
|
|
</th></tr>
|
|
<tr>
|
|
|
|
<th width="400px"> Task
|
|
</th><th width="80px"> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
<tr>
|
|
<th align="left"> Implement ISL dependency analysis pass
|
|
</th><td class="done" align="center"> working
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Connect pocc/pluto
|
|
|
|
</th><td class="done" align="center"> working
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Finish OpenSCoP support
|
|
</th><td class="open">Blocked (waiting for OpenSCoP)
|
|
</td><td>
|
|
</td><td>
|
|
</td></tr>
|
|
|
|
<tr>
|
|
<th align="left"> Add SCoPLib 0.2 support to connect pocc
|
|
</th><td class="done" align="center">done
|
|
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Write simple loop blocking
|
|
</th><td>
|
|
</td><td>
|
|
</td><td>
|
|
</td></tr>
|
|
<tr>
|
|
<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
|
|
239);"> Backend
|
|
</th></tr>
|
|
<tr>
|
|
<th width="400px"> Task
|
|
|
|
</th><th width="80px"> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
<tr>
|
|
<th align="left"> Code generation for non 64bit targets
|
|
</th><td>
|
|
</td><td>
|
|
</td><td>
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Add write support for data access functions
|
|
</th><td class="open">Still open
|
|
</td><td>
|
|
</td><td>
|
|
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Create vector loops
|
|
</th><td class="inprogress">70% done
|
|
</td><td>Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left">Create OpenMP
|
|
loops
|
|
</th><td class="inprogress">90% done
|
|
</td><td> Raghesh & Tobias
|
|
|
|
</td></tr>
|
|
<tr>
|
|
<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
|
|
239);"> General tasks
|
|
</th></tr>
|
|
<tr>
|
|
<th width="300px"> Task
|
|
</th><th width="80px"> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
|
|
<tr>
|
|
<th align="left"> Commit RegionPass patch upstream
|
|
</th><td class="done" align="center"> done
|
|
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Build against an installed LLVM
|
|
</th><td class="inprogress"> Partial (cmake build without tests)
|
|
</td><td> ether
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Setup buildbot regression testers using LNT
|
|
</th><td class="open">Still open
|
|
</td><td>
|
|
</td><td>
|
|
|
|
</td></tr>
|
|
</tbody></table>
|
|
<h3>Phase 1 - Get something
|
|
working (Finished October 2010)</span></h3>
|
|
<p>The first iteration of this project aims to create a minimal working version
|
|
of this framework, that is capable to transform an LLVM-IR program to the
|
|
polyhedral model
|
|
and back to LLVM-IR without applying any transformations.
|
|
</p>
|
|
<table class="wikitable" cellpadding="2">
|
|
|
|
<tbody><tr>
|
|
<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
|
|
239);"> Frontend
|
|
</th></tr>
|
|
|
|
<tr>
|
|
<th width="300px"> Task
|
|
</th><th width="150px"> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
<tr>
|
|
<th align="left"> Region detection
|
|
</td><td class="done"> Working + Committed upstream
|
|
</td><td>Ether
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Access Functions
|
|
</td><td class="done"> Working
|
|
</td><td>John + Ether
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Alias sets
|
|
</td><td class="open"> Still open
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Scalar evolution to affine expression
|
|
</td><td class="done"> Done
|
|
|
|
</td><td>
|
|
Ether
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> SCoP extraction
|
|
</td><td class="done"> Working
|
|
</td><td>Tobias + Ether
|
|
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> SCoPs to polyhedral model
|
|
</td><td class="done"> Working
|
|
</td><td>Tobias + Ether
|
|
</td></tr>
|
|
<tr>
|
|
<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
|
|
239);"> Middle end
|
|
|
|
</th></tr>
|
|
<tr>
|
|
<th width="300px"> Task
|
|
</th><th width="80px"> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
<tr>
|
|
<th align="left"> Define polyhedral description
|
|
</td><td class="done"> Working
|
|
</td><td>Tobias
|
|
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Import/Export using current openscop version
|
|
</td><td class="done"> Working
|
|
</td><td>Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
|
|
239);"> Backend
|
|
</th></tr>
|
|
<tr>
|
|
|
|
<th width="300px"> Task
|
|
</th><th width="80px"> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
<tr>
|
|
<th align="left"> Create LLVM-IR using CLooG
|
|
</td><td class="done"> Working
|
|
</td><td> Tobias
|
|
|
|
</td></tr>
|
|
<tr>
|
|
<th colspan="4" style="background: none repeat scroll 0% 0% rgb(239, 239,
|
|
239);"> General tasks
|
|
</th></tr>
|
|
<tr>
|
|
<th width="300px"> Task
|
|
</th><th width="80px"> Status
|
|
</th><th>Owner
|
|
</th></tr>
|
|
<tr>
|
|
<th align="left"> Setup git repositories
|
|
|
|
</td><td class="done"> Done
|
|
</td><td> Tobias
|
|
</td></tr>
|
|
<tr>
|
|
<th align="left"> Add CLooG/isl to build system
|
|
</td><td class="done"> Works on Unix
|
|
</td><td> Tobias
|
|
|
|
</td></tr></tbody></table>
|
|
<h3>Further projects </h3>
|
|
<p>There are several great projects related to polly that can already be started
|
|
or are possible in the near future. </p>
|
|
<h4>Extend the post dominance analysis for infinite loops (small)</h4>
|
|
|
|
<p>At the moment the post dominance analysis cannot handle infinite loops. All
|
|
basic blocks in the CFG that do not return are - at the moment - not part of the
|
|
post dominance tree.
|
|
However by adding some virtual edges, they could be added to the post dominator
|
|
tree. Where to add the edges needs some research.
|
|
</p><p>This is a small project, that is is well defined. As it is directly in
|
|
LLVM it can be easily committed upstream. It is useful for polly, as the
|
|
RegionInfo pass will be able to detect regions in parts of the CFG that never
|
|
return.
|
|
</p><p><i>A good starter to get into LLVM</i>
|
|
</p>
|
|
<h4>Vectorization </h4>
|
|
<p>It is planned to use Polly to support vectorization in LLVM.
|
|
</p><p>The basic idea is to use Polly and the polyhedral tools to transform code
|
|
such that the innermost loops can be executed in parallel. Afterwards during
|
|
code generation in LLVM the loops will be created using vector instructions.
|
|
</p><p>To start we plan to use <a href="http://pluto-compiler.sf.net"
|
|
class="external text" title="http://pluto-compiler.sf.net"
|
|
rel="nofollow">Pluto</a> to transform the loop nests. Pluto can generate vector
|
|
parallel code and annotate the vector parallel loops. Some impressive results
|
|
were shown on code that was afterwards vectorized by the icc enforcing
|
|
vectorization. We believe LLVM can do even better, as it can interact directly
|
|
with the polyhedral information.
|
|
|
|
</p><p>As an example simple matrix multiplication:
|
|
</p>
|
|
<pre>
|
|
for(i=0; i<M; i++)
|
|
for(j=0; j<N; j++)
|
|
for(k=0; k<K; k++)
|
|
C[i][j] = beta*C[i][j] + alpha*A[i][k] * B[k][j];
|
|
</pre>
|
|
<p>After plutos transformations with added tiling and
|
|
vectorization hints:
|
|
</p>
|
|
<pre>
|
|
if ((K >= 1) && (M >= 1) && (N >= 1))
|
|
for (t1=0;t1<=floord(M-1,32);t1++)
|
|
for (t2=0;t2<=floord(N-1,32);t2++)
|
|
for (t3=0;t3<=floord(K-1,32);t3++)
|
|
for (t4=32*t1;t4<=min(M-1,32*t1+31);t4++)
|
|
for (t5=32*t3;t5<=min(K-1,32*t3+31);t5++) {
|
|
lbv=32*t2;
|
|
ubv=min(N-1,32*t2+31);
|
|
#pragma ivdep
|
|
#pragma vector always
|
|
for (t6=lbv; t6<=ubv; t6++)
|
|
C[t4][t6]=beta*C[t4][t6]+alpha*A[t4][t5]*B[t5][t6];;
|
|
}
|
|
</pre>
|
|
<p>In this example the innermost loop is parallel without any dependencies. </p>
|
|
</div>
|
|
</body>
|
|
</html>
|