llvm, polly, 向量化测试,GEMM非常明显
1)这是OMP的
rm -f *.o3
clang -DLARGE_DATASET -O3 -mllvm -polly-omp-backend=LLVM -mllvm -polly-num-threads=2 -I/home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities/polybench.c /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/stencils/jacobi-2d/jacobi-2d.c -o a3.polly.o3
time ./a3.polly.o3
real 0m9.228s
user 0m9.016s
sys 0m0.169s
2)vectorizer的结果
a@a:~/src/a3.llvm.polly/a1.polybench-c-4.2$ rm -f *.o3
clang -DLARGE_DATASET -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -I/home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities/polybench.c /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/stencils/jacobi-2d/jacobi-2d.c -o a3.polly.o3
time ./a3.polly.o3
real 0m9.078s
user 0m8.851s
sys 0m0.196s
3)对于GEMM,vectorizer效果非常明显。
rm -f *.o3
clang -DLARGE_DATASET -O3 -mllvm -polly-omp-backend=LLVM -mllvm -polly-num-threads=2 -I/home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities/polybench.c /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/linear-algebra/blas/gemm/gemm.c -o a3.polly.o3
time ./a3.polly.o3
rm -f *.o3
clang -DLARGE_DATASET -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -I/home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities/polybench.c /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/linear-algebra/blas/gemm/gemm.c -o a3.polly.o3
time ./a3.polly.o3
real 0m3.265s
user 0m3.109s
sys 0m0.132s
real 0m1.211s
user 0m1.133s
sys 0m0.076s
4)出了个小BUG:
rm -f *.o3
clang -DLARGE_DATASET -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -I/home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities/polybench.c /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/datamining/correlation/correlation.c -o a3.polly.o3
time ./a3.polly.o3
/usr/bin/ld: /tmp/correlation-ceecf1.o: in function `main':
correlation.c:(.text+0x181): undefined reference to `sqrt'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
bash: ./a3.polly.o3: 没有那个文件或目录
解决方法:加上-lm
这是常见的错
5)
rm -f *.o3
clang -DLARGE_DATASET -O3 -mllvm -polly-omp-backend=LLVM -mllvm -polly-num-threads=2 -I/home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities/polybench.c /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/datamining/correlation/correlation.c -o a3.polly.o3 -lm
time ./a3.polly.o3
rm -f *.o3
clang -DLARGE_DATASET -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine -I/home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities/polybench.c /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/datamining/correlation/correlation.c -o a3.polly.o3 -lm
time ./a3.polly.o3
real 0m20.509s
user 0m20.406s
sys 0m0.072s
real 0m2.272s
user 0m2.226s
sys 0m0.036s
a@a:~/src/a3.llvm.polly/a1.polybench-c-4.2$
rm -f *.o3
gcc -DLARGE_DATASET -O3 -I/home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/utilities/polybench.c /home/a/src/a3.llvm.polly/a1.polybench-c-4.2/datamining/correlation/correlation.c -o a3.polly.o3 -lm
time ./a3.polly.o3
real 0m17.786s
user 0m17.606s
sys 0m0.153s
如果向量化是正确的话,那么效果太好。