[LLVMdev] Coarse-grained parallelism
tobias at grosser.es
Fri Apr 22 09:03:18 PDT 2011
On 04/20/2011 08:05 AM, Andreas Wilhelm wrote:
> Am 19.04.2011 um 16:44 schrieb John Criswell:
>> On 4/19/11 5:57 AM, Andreas Wilhelm wrote:
>>> I found some code within the pool allocation project to identify
>>> parallelizable function calls.
>>> Unfortunately the functionality isn't part of the current release of
>>> poolalloc (in release 14 it was).
>> Can you tell me in what file(s) this is implemented? I wasn't aware
>> that the poolalloc project had such an analysis.
> The automatic parallelization was implemented in
> poolalloc/lib/DSA/Parallelize.cpp. The pass uses the PDG of class
> PgmDependenceGraph to identify parallelizable function calls. Do you
> know something about the idea behind those code?
>>> My intention is to estimate the parallelization-potential of
>>> sequential applications concerning coarse-grained parallelism.
>>> Can you tell me...
>>> 1. Why are classes of pollalloc, like the one for creating a Program
>>> Dependence Graph (DPG), not supported anymore?
>> It's probably not supported because no one is using it. We primarily
>> use Automatic Pool Allocation as part of the SAFECode memory safety
>> compiler, so we haven't needed this functionality.
>> If you'd like to try to get it working again, we'd welcome patches for
>> mainline poolalloc.
>>> 2. Do you know any other existing tools or practices to identify
>>> parallelizable function calls?
>> I don't work on automatic parallelization, so I'd prefer input from
>> others. That said, I believe the Polly framework and LLVM's memory
>> dependence analysis pass may be useful. As parallelizing C programs
>> will need points-to analysis, the DSA project (found within the
>> poolalloc source code) or the work of Calvin Lin and Ben Hardekopf
>> (http://www.cs.ucsb.edu/~benh/downloads.html) may be useful, too.
sorry for replying slowly.
In respect of parallelizing function calls Polly may or may not help
you. In case you want some interprocedural analysis or you want to
detect if functions are 'pure' or 'readonly' Polly is probably not the
right thing. It may be possible to use Polly to analyze functions and to
give detailed information what a function touches, but this would need
In case you have a list of function calls that are called in a loop and
which are known to be pure or read-only, Polly will in many cases be
able able to detect the parallel loop and to generate calls to the
OpenMP runtime. The focus in Polly's automatic parallelization is
currently on loop level parallelism.
Maybe you can give a little more details about what kind of function
calls you want to parallelize?
If you want to investigate loop level parallelism as it may appear in
image processing tools, augmented reality, ... Polly may help you.
What kind of programs are your currently looking into? Do you have some
More information about the llvm-dev