[llvm-dev] On Loop Distribution pass

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Mon Oct 10 14:50:39 PDT 2016


----- Original Message -----

> From: "Dangeti Tharun kumar via llvm-dev" <llvm-dev at lists.llvm.org>
> To: llvm-dev at lists.llvm.org
> Cc: "Santanu Das" <cs15mtech11018 at iith.ac.in>
> Sent: Sunday, October 9, 2016 12:09:01 PM
> Subject: [llvm-dev] On Loop Distribution pass

> Dear community,

> Our team at IITH have been experimenting with loop-distribution pass
> in LLVM. We see the following results on few benchmarks.

> clang -O3 -mllvm -enable-loop-distribute -Rpass=loop-distribute
> file.c
> clang -O3 -mllvm -enable-loop-distribute
> -Rpass-analysis=loop-distribute file.c

> TORCH :
> There are nearly 488 loops in this benchmark. LLVM was not able to
> distribute any loop.

> TSVC :
> There are 151 loops coded in plain ā€˜Cā€™, none of them got distributed.
> TSVC has particularly candidates valid for distribution like the one
> below. The inner loop in this example can be distributed.

> for (int nl = 0; nl < ntimes/2; nl++) {
> for (int i = 1; i < LEN; i++) {
> a[i] += c[i] * d[i];
> b[i] = b[i - 1] + a[i] + d[i];
> }
> dummy(a, b, c, d, e, aa, bb, cc, 0.);
> }

> MiBench :
> There are 6539 loops in MiBench. None of the loops were distributed
> by the loop-distribution pass of LLVM.

> CoMD :
> CoMD is a reference implementation of typical classical molecular
> dynamics algorithms and workloads.
> Out of 112 loops none of them are distributed.

> For the specific loop I have shown above which is straight forward a
> good distribution candidate, the remark is " loop not distributed:
> memory operations are safe for vectorization
> [-Rpass-analysis=loop-distribute] ".

> Can someone reason these results and this remark?

The current loop distribution implementation is focused on enabling vectorization. The comment at the top of the file says: 

// This file implements the Loop Distribution Pass. Its main focus is to 
// distribute loops that cannot be vectorized due to dependence cycles. It 
// tries to isolate the offending dependences into a new loop allowing 
// vectorization of the remaining parts. 

Hopefully, this helps explain the diagnostic. Regarding why the loop you highlight is not distributed to enable the vectorization of the a[i] update, I don't know. Adam? 

-Hal 

> I humbly request the community to correct me, if am missing something
> in my analysis.

> --

> Thank you
> D Tharun kumar
> CS15MTECH11002
> 9948373970
> CSE-IITH
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-- 

Hal Finkel 
Lead, Compiler Technology and Programming Languages 
Leadership Computing Facility 
Argonne National Laboratory 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161010/7295d145/attachment.html>


More information about the llvm-dev mailing list