[llvm-dev] Jacobi 5 Point Stencil Code not Vectorizing

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Sun Jul 2 02:12:11 PDT 2017


On 07/02/2017 03:47 AM, hameeza ahmed wrote:
> but now it works fine with mentioned code.

If adding "restrict" causes us to stop vectorizing, that's a bug.

Also, bugs should be filed for desired enhancements.

  -Hal

>
> On Sun, Jul 2, 2017 at 1:28 PM, Hal Finkel <hfinkel at anl.gov 
> <mailto:hfinkel at anl.gov>> wrote:
>
>
>     On 07/01/2017 05:33 PM, hameeza ahmed wrote:
>>     I am able to vectorize it with the following code;
>>
>>     #include <stdio.h>
>>     #define N 100351
>>     // This function computes 2D-5 point Jacobi stencil
>>     void stencil(int a[][N], int b[][N])
>>     {
>>        int i, j, k;
>>        for (k = 0; k < N; k++) {
>>            for (i = 1; i <= N-2; i++)
>>                for (j = 1; j <= N-2; j++)
>>     b[i][j] = 0.25 * (a[i][j] + a[i-1][j] + a[i+1][j] + a[i][j-1] +
>>     a[i][j+1]);
>>
>>     for (i = 1; i <= N-2; i++)
>>     for (j = 1; j <= N-2; j++)
>>      a[i][j] = b[i][j];
>>     }
>>     }
>>
>>     I removed restrict over here.
>
>     That seems odd. Can you please file a bug report?
>
>      -Hal
>
>
>>
>>     On Sun, Jul 2, 2017 at 3:11 AM, hameeza ahmed
>>     <hahmed2305 at gmail.com <mailto:hahmed2305 at gmail.com>> wrote:
>>
>>         further i modified the code to the following;
>>
>>         #include <stdio.h>
>>         #define N 100351
>>         // This function computes 2D-5 point Jacobi stencil
>>         void stencil(int a[restrict][N], int b[restrict][N])
>>         {
>>            int i, j, k;
>>            for (k = 0; k < N; k++) {
>>                for (i = 1; i <= N-2; i++)
>>                    for (j = 1; j <= N-2; j++)
>>         b[i][j] = 0.25 * (a[i][j] + a[i-1][j] + a[i+1][j] + a[i][j-1]
>>         + a[i][j+1]);
>>
>>         for (i = 1; i <= N-2; i++)
>>         for (j = 1; j <= N-2; j++)
>>          a[i][j] = b[i][j];
>>         }
>>         }
>>
>>            but still no vectorization in IR. Also, when I set vector
>>         width explicitly to 64, it gives the following error:
>>
>>         remark: <unknown>:0:0: loop not vectorized: call instruction
>>         cannot be vectorized
>>         remark: <unknown>:0:0: loop not vectorized: value that could
>>         not be identified as reduction is used outside the loop
>>
>>         I need serious help on this. Please guide me.
>>
>>         On Sun, Jul 2, 2017 at 1:54 AM, hameeza ahmed
>>         <hahmed2305 at gmail.com <mailto:hahmed2305 at gmail.com>> wrote:
>>
>>             Does it happen due to loop carried dependence? if yes
>>             what is the solution to vectorize such codes?
>>
>>
>>             please reply. i m waiting.
>>
>>             On Jul 1, 2017 12:30 PM, "hameeza ahmed"
>>             <hahmed2305 at gmail.com <mailto:hahmed2305 at gmail.com>> wrote:
>>
>>                 I even tried polly but still my llvm IR does not
>>                 contain vector instructions. i used the following
>>                 command;
>>
>>                 clang  -S -emit-llvm stencil.c -march=knl -O3 -mllvm
>>                 -polly -mllvm -polly-vectorizer=stripmine -o
>>                 stencil_poly.ll
>>
>>                 Please specify what is wrong with my code?
>>
>>
>>                 On Sat, Jul 1, 2017 at 4:08 PM, hameeza ahmed
>>                 <hahmed2305 at gmail.com <mailto:hahmed2305 at gmail.com>>
>>                 wrote:
>>
>>                     Hello,
>>
>>                     I am trying to vectorize following stencil code;
>>
>>                     #include <stdio.h>
>>                     #define N 100351
>>                     // This function computes 2D-5 point Jacobi stencil
>>                     void stencil(int a[restrict][N])
>>                     {
>>                        int i, j, k;
>>                        for (k = 0; k < 100; k++)
>>                          {  for (i = 1; i <= N-2; i++)
>>                              {  for (j = 1; j <= N-2; j++)
>>                     { a[i][j] = 0.25 * (a[i][j] + a[i-1][j] +
>>                     a[i+1][j] + a[i][j-1] + a[i][j+1]);
>>                       }
>>                     }
>>                     }}
>>
>>                     I have used the following commands
>>
>>                     clang  -S -emit-llvm stencil.c -march=knl -O3
>>                     -mllvm -disable-llvm-optzns -o stencil.ll
>>
>>                     opt  -S -O3 stencil.ll -o stencil_o3.ll
>>
>>                     llc -x86-asm-syntax=intel stencil_o3.ll -o stencil.s
>>
>>                     But the code is not vectorized. It still uses the
>>                     scalar instructions;
>>
>>                     Please correct me.
>>
>>                     Thank You
>>
>>
>>
>>
>>
>>
>>
>
>     -- 
>     Hal Finkel
>     Lead, Compiler Technology and Programming Languages
>     Leadership Computing Facility
>     Argonne National Laboratory
>
>

-- 
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/20170702/bded1ea5/attachment-0001.html>


More information about the llvm-dev mailing list