[llvm-dev] LLVM Matrix Multiplication Loop Vectorizer

Tobias Grosser via llvm-dev llvm-dev at lists.llvm.org
Tue Jun 27 23:11:07 PDT 2017


On Tue, Jun 27, 2017, at 09:54 PM, hameeza ahmed via llvm-dev wrote:
> Hello,
> i am trying to vectorize a simple matrix multiplication in llvm;
> here is my code;
> 
> #include <stdio.h>
> #define N 1000
> 
> // This function multiplies A[][] and B[][], and stores
> // the result in C[][]
> void multiply(int A[][N], int B[][N], int C[][N])
> {
>     int i, j, k;
>     for (i = 0; i < N; i++)
>     {
>         for (j = 0; j < N; j++)
>         {
>             C[i][j] = 0;
>             for (k = 0; k < N; k++)
>                 C[i][j] += A[i][k]*B[k][j];
>         }
>     }
> }
> 
> here are the commands;
> 
> 
> 
> clang  -S -emit-llvm mat.c -march=knl -O3 -mllvm -disable-llvm-optzns -o
> mat.ll
> 
> opt  -S -O3  mat.ll -o mat_o3.ll
> 
> llc -x86-asm-syntax=intel mat_o3.ll -o mat_intel.s
> 
> 
> with this command i got the below error
> opt  -S -O3 -force-vector-width=16 mat.ll -o mat_o3.ll
> 
> 
> remark: <unknown>:0:0: loop not vectorized: value that could not be
> identified as reduction is used outside the loop
> 
> 
> it is unable to vectorize the matrix multiplication and in .ll and .s
> files
> i see the scalar instructions.
> 
> Why is that so? What is my mistake?? Kindly correct me.

You might also try Polly. We detect and optimize this code into very
high-performance code.

Best,
Tobias
 
> Looking forward to your reply
> 
> Thank You
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list