[Samples] Update all polybench samples
This commit is contained in:
parent
2fdba859f7
commit
22e59877cb
|
@ -36,14 +36,14 @@ $ export PYTHONPATH=$PYTHONPATH:$PWD/build/tools/scalehls/python_packages/scaleh
|
|||
### Try ScaleHLS
|
||||
To launch the automatic kernel-level design space exploration, run:
|
||||
```sh
|
||||
$ mlir-clang samples/polybench/gemm/gemm_32.c -function=gemm_32 -memref-fullrank -raise-scf-to-affine -S \
|
||||
| scalehls-opt -dse="top-func=gemm_32 target-spec=samples/polybench/target-spec.ini" -debug-only=scalehls > /dev/null \
|
||||
&& scalehls-translate -emit-hlscpp gemm_32_pareto_0.mlir > gemm_32_pareto_0.cpp
|
||||
$ mlir-clang samples/polybench/gemm/test_gemm.c -function=test_gemm -memref-fullrank -raise-scf-to-affine -S \
|
||||
| scalehls-opt -dse="top-func=test_gemm target-spec=samples/polybench/target-spec.ini" -debug-only=scalehls > /dev/null \
|
||||
&& scalehls-translate -emit-hlscpp test_gemm_pareto_0.mlir > test_gemm_pareto_0.cpp
|
||||
```
|
||||
|
||||
Meanwhile, we provide a `pyscalehls` tool to showcase the `scalehls` Python library:
|
||||
```sh
|
||||
$ pyscalehls.py samples/polybench/syrk/syrk_32.c -f syrk_32
|
||||
$ pyscalehls.py samples/polybench/syrk/test_syrk.c -f test_syrk
|
||||
```
|
||||
|
||||
## Integration with ONNX-MLIR
|
||||
|
|
|
@ -1,19 +1,8 @@
|
|||
#!/bin/bash
|
||||
# This test is deprecated and will be removed soon!!
|
||||
|
||||
# Please run: source ablation_flt_test.sh -m resnet18 -n 15 -c 0
|
||||
|
||||
# cd samples/onnx-mlir-1/ && source ablation_flt_test.sh -m mobilenet -n 15 -c 0
|
||||
# cd samples/onnx-mlir-1/ && source ablation_flt_test.sh -m resnet18 -n 15 -c 0
|
||||
# cd samples/onnx-mlir-1/ && source ablation_flt_test.sh -m vgg16 -n 15 -c 0
|
||||
|
||||
# cd samples/onnx-mlir-2/ && source ablation_flt_test.sh -m mobilenet -n 15 -c 0
|
||||
# cd samples/onnx-mlir-2/ && source ablation_flt_test.sh -m resnet18 -n 15 -c 0
|
||||
# cd samples/onnx-mlir-2/ && source ablation_flt_test.sh -m vgg16 -n 15 -c 0
|
||||
|
||||
# cd samples/onnx-mlir-3/ && source ablation_flt_test.sh -m mobilenet -n 15 -c 0
|
||||
# cd samples/onnx-mlir-3/ && source ablation_flt_test.sh -m resnet18 -n 15 -c 0
|
||||
# cd samples/onnx-mlir-3/ && source ablation_flt_test.sh -m vgg16 -n 15 -c 0
|
||||
|
||||
# Script options.
|
||||
while getopts 'm:n:c:' opt
|
||||
do
|
||||
|
|
|
@ -1,19 +1,8 @@
|
|||
#!/bin/bash
|
||||
# This test is deprecated and will be removed soon!!
|
||||
|
||||
# Please run: source ablation_int_test.sh -m resnet18 -n 17 -c 0
|
||||
|
||||
# cd samples/onnx-mlir-1/ && source ablation_int_test.sh -m mobilenet -n 17 -c 0
|
||||
# cd samples/onnx-mlir-1/ && source ablation_int_test.sh -m resnet18 -n 17 -c 0
|
||||
# cd samples/onnx-mlir-1/ && source ablation_int_test.sh -m vgg16 -n 17 -c 0
|
||||
|
||||
# cd samples/onnx-mlir-2/ && source ablation_int_test.sh -m mobilenet -n 17 -c 0
|
||||
# cd samples/onnx-mlir-2/ && source ablation_int_test.sh -m resnet18 -n 17 -c 0
|
||||
# cd samples/onnx-mlir-2/ && source ablation_int_test.sh -m vgg16 -n 17 -c 0
|
||||
|
||||
# cd samples/onnx-mlir-3/ && source ablation_int_test.sh -m mobilenet -n 17 -c 0
|
||||
# cd samples/onnx-mlir-3/ && source ablation_int_test.sh -m resnet18 -n 17 -c 0
|
||||
# cd samples/onnx-mlir-3/ && source ablation_int_test.sh -m vgg16 -n 17 -c 0
|
||||
|
||||
# Script options.
|
||||
while getopts 'm:n:c:' opt
|
||||
do
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
func @bicg_1024(%A: memref<1024x1024xf32>, %s: memref<1024xf32>, %q: memref<1024xf32>, %p: memref<1024xf32>, %r: memref<1024xf32>) {
|
||||
affine.for %i = 0 to 1024 {
|
||||
affine.for %j = 0 to 1024 {
|
||||
%0 = affine.load %s[%j] : memref<1024xf32>
|
||||
%1 = affine.load %r[%i] : memref<1024xf32>
|
||||
%2 = affine.load %A[%i, %j] : memref<1024x1024xf32>
|
||||
%3 = mulf %1, %2 : f32
|
||||
%4 = addf %0, %3 : f32
|
||||
affine.store %4, %s[%j] : memref<1024xf32>
|
||||
%5 = affine.load %q[%i] : memref<1024xf32>
|
||||
%6 = affine.load %p[%j] : memref<1024xf32>
|
||||
%7 = mulf %2, %6 : f32
|
||||
%8 = addf %5, %7 : f32
|
||||
affine.store %8, %q[%i] : memref<1024xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
func @bicg_128(%A: memref<128x128xf32>, %s: memref<128xf32>, %q: memref<128xf32>, %p: memref<128xf32>, %r: memref<128xf32>) {
|
||||
affine.for %i = 0 to 128 {
|
||||
affine.for %j = 0 to 128 {
|
||||
%0 = affine.load %s[%j] : memref<128xf32>
|
||||
%1 = affine.load %r[%i] : memref<128xf32>
|
||||
%2 = affine.load %A[%i, %j] : memref<128x128xf32>
|
||||
%3 = mulf %1, %2 : f32
|
||||
%4 = addf %0, %3 : f32
|
||||
affine.store %4, %s[%j] : memref<128xf32>
|
||||
%5 = affine.load %q[%i] : memref<128xf32>
|
||||
%6 = affine.load %p[%j] : memref<128xf32>
|
||||
%7 = mulf %2, %6 : f32
|
||||
%8 = addf %5, %7 : f32
|
||||
affine.store %8, %q[%i] : memref<128xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
func @bicg_2048(%A: memref<2048x2048xf32>, %s: memref<2048xf32>, %q: memref<2048xf32>, %p: memref<2048xf32>, %r: memref<2048xf32>) {
|
||||
affine.for %i = 0 to 2048 {
|
||||
affine.for %j = 0 to 2048 {
|
||||
%0 = affine.load %s[%j] : memref<2048xf32>
|
||||
%1 = affine.load %r[%i] : memref<2048xf32>
|
||||
%2 = affine.load %A[%i, %j] : memref<2048x2048xf32>
|
||||
%3 = mulf %1, %2 : f32
|
||||
%4 = addf %0, %3 : f32
|
||||
affine.store %4, %s[%j] : memref<2048xf32>
|
||||
%5 = affine.load %q[%i] : memref<2048xf32>
|
||||
%6 = affine.load %p[%j] : memref<2048xf32>
|
||||
%7 = mulf %2, %6 : f32
|
||||
%8 = addf %5, %7 : f32
|
||||
affine.store %8, %q[%i] : memref<2048xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
func @bicg_256(%A: memref<256x256xf32>, %s: memref<256xf32>, %q: memref<256xf32>, %p: memref<256xf32>, %r: memref<256xf32>) {
|
||||
affine.for %i = 0 to 256 {
|
||||
affine.for %j = 0 to 256 {
|
||||
%0 = affine.load %s[%j] : memref<256xf32>
|
||||
%1 = affine.load %r[%i] : memref<256xf32>
|
||||
%2 = affine.load %A[%i, %j] : memref<256x256xf32>
|
||||
%3 = mulf %1, %2 : f32
|
||||
%4 = addf %0, %3 : f32
|
||||
affine.store %4, %s[%j] : memref<256xf32>
|
||||
%5 = affine.load %q[%i] : memref<256xf32>
|
||||
%6 = affine.load %p[%j] : memref<256xf32>
|
||||
%7 = mulf %2, %6 : f32
|
||||
%8 = addf %5, %7 : f32
|
||||
affine.store %8, %q[%i] : memref<256xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
void bicg_32(float A[32][32], float s[32], float q[32], float p[32],
|
||||
float r[32]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < 32; i += 1) {
|
||||
for (int j = 0; j < 32; j += 1) {
|
||||
s[j] += A[i][j] * r[i];
|
||||
q[i] += A[i][j] * p[j];
|
||||
}
|
||||
}
|
||||
#pragma endscop
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
func @bicg_32(%A: memref<32x32xf32>, %s: memref<32xf32>, %q: memref<32xf32>, %p: memref<32xf32>, %r: memref<32xf32>) {
|
||||
affine.for %i = 0 to 32 {
|
||||
affine.for %j = 0 to 32 {
|
||||
%0 = affine.load %s[%j] : memref<32xf32>
|
||||
%1 = affine.load %r[%i] : memref<32xf32>
|
||||
%2 = affine.load %A[%i, %j] : memref<32x32xf32>
|
||||
%3 = mulf %1, %2 : f32
|
||||
%4 = addf %0, %3 : f32
|
||||
affine.store %4, %s[%j] : memref<32xf32>
|
||||
%5 = affine.load %q[%i] : memref<32xf32>
|
||||
%6 = affine.load %p[%j] : memref<32xf32>
|
||||
%7 = mulf %2, %6 : f32
|
||||
%8 = addf %5, %7 : f32
|
||||
affine.store %8, %q[%i] : memref<32xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
func @bicg_4096(%A: memref<4096x4096xf32>, %s: memref<4096xf32>, %q: memref<4096xf32>, %p: memref<4096xf32>, %r: memref<4096xf32>) {
|
||||
affine.for %i = 0 to 4096 {
|
||||
affine.for %j = 0 to 4096 {
|
||||
%0 = affine.load %s[%j] : memref<4096xf32>
|
||||
%1 = affine.load %r[%i] : memref<4096xf32>
|
||||
%2 = affine.load %A[%i, %j] : memref<4096x4096xf32>
|
||||
%3 = mulf %1, %2 : f32
|
||||
%4 = addf %0, %3 : f32
|
||||
affine.store %4, %s[%j] : memref<4096xf32>
|
||||
%5 = affine.load %q[%i] : memref<4096xf32>
|
||||
%6 = affine.load %p[%j] : memref<4096xf32>
|
||||
%7 = mulf %2, %6 : f32
|
||||
%8 = addf %5, %7 : f32
|
||||
affine.store %8, %q[%i] : memref<4096xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
func @bicg_512(%A: memref<512x512xf32>, %s: memref<512xf32>, %q: memref<512xf32>, %p: memref<512xf32>, %r: memref<512xf32>) {
|
||||
affine.for %i = 0 to 512 {
|
||||
affine.for %j = 0 to 512 {
|
||||
%0 = affine.load %s[%j] : memref<512xf32>
|
||||
%1 = affine.load %r[%i] : memref<512xf32>
|
||||
%2 = affine.load %A[%i, %j] : memref<512x512xf32>
|
||||
%3 = mulf %1, %2 : f32
|
||||
%4 = addf %0, %3 : f32
|
||||
affine.store %4, %s[%j] : memref<512xf32>
|
||||
%5 = affine.load %q[%i] : memref<512xf32>
|
||||
%6 = affine.load %p[%j] : memref<512xf32>
|
||||
%7 = mulf %2, %6 : f32
|
||||
%8 = addf %5, %7 : f32
|
||||
affine.store %8, %q[%i] : memref<512xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
func @bicg_64(%A: memref<64x64xf32>, %s: memref<64xf32>, %q: memref<64xf32>, %p: memref<64xf32>, %r: memref<64xf32>) {
|
||||
affine.for %i = 0 to 64 {
|
||||
affine.for %j = 0 to 64 {
|
||||
%0 = affine.load %s[%j] : memref<64xf32>
|
||||
%1 = affine.load %r[%i] : memref<64xf32>
|
||||
%2 = affine.load %A[%i, %j] : memref<64x64xf32>
|
||||
%3 = mulf %1, %2 : f32
|
||||
%4 = addf %0, %3 : f32
|
||||
affine.store %4, %s[%j] : memref<64xf32>
|
||||
%5 = affine.load %q[%i] : memref<64xf32>
|
||||
%6 = affine.load %p[%j] : memref<64xf32>
|
||||
%7 = mulf %2, %6 : f32
|
||||
%8 = addf %5, %7 : f32
|
||||
affine.store %8, %q[%i] : memref<64xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
#define N 32
|
||||
void test_bicg(float A[N][N], float s[N], float q[N], float p[N], float r[N]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < N; i += 1) {
|
||||
for (int j = 0; j < N; j += 1) {
|
||||
s[j] += A[i][j] * r[i];
|
||||
q[i] += A[i][j] * p[j];
|
||||
}
|
||||
}
|
||||
#pragma endscop
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This test is deprecated!
|
||||
# This test is deprecated and will be removed soon!!
|
||||
|
||||
# Script options.
|
||||
while getopts 'm:c:' opt
|
||||
|
|
|
@ -1,14 +1,8 @@
|
|||
#!/bin/bash
|
||||
# This test is deprecated and will be removed soon!!
|
||||
|
||||
# Please run: source dse_scale_test.sh -m gemm -c 0
|
||||
|
||||
# cd samples/polybench/ && source dse_scale_test.sh -m bicg -c 0
|
||||
# cd samples/polybench/ && source dse_scale_test.sh -m gemm -c 0
|
||||
# cd samples/polybench/ && source dse_scale_test.sh -m gesummv -c 0
|
||||
# cd samples/polybench/ && source dse_scale_test.sh -m syrk -c 0
|
||||
# cd samples/polybench/ && source dse_scale_test.sh -m syr2k -c 0
|
||||
# cd samples/polybench/ && source dse_scale_test.sh -m trmm -c 0
|
||||
|
||||
# Script options.
|
||||
while getopts 'm:c:' opt
|
||||
do
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
func @gemm_1024(%alpha: f32, %beta: f32, %C: memref<1024x1024xf32>, %A: memref<1024x1024xf32>, %B: memref<1024x1024xf32>) {
|
||||
affine.for %i = 0 to 1024 {
|
||||
affine.for %j = 0 to 1024 {
|
||||
%0 = affine.load %C[%i, %j] : memref<1024x1024xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<1024x1024xf32>
|
||||
affine.for %k = 0 to 1024 {
|
||||
%2 = affine.load %A[%i, %k] : memref<1024x1024xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<1024x1024xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<1024x1024xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<1024x1024xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
func @gemm_128(%alpha: f32, %beta: f32, %C: memref<128x128xf32>, %A: memref<128x128xf32>, %B: memref<128x128xf32>) {
|
||||
affine.for %i = 0 to 128 {
|
||||
affine.for %j = 0 to 128 {
|
||||
%0 = affine.load %C[%i, %j] : memref<128x128xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<128x128xf32>
|
||||
affine.for %k = 0 to 128 {
|
||||
%2 = affine.load %A[%i, %k] : memref<128x128xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<128x128xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<128x128xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<128x128xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
func @gemm_2048(%alpha: f32, %beta: f32, %C: memref<2048x2048xf32>, %A: memref<2048x2048xf32>, %B: memref<2048x2048xf32>) {
|
||||
affine.for %i = 0 to 2048 {
|
||||
affine.for %j = 0 to 2048 {
|
||||
%0 = affine.load %C[%i, %j] : memref<2048x2048xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<2048x2048xf32>
|
||||
affine.for %k = 0 to 2048 {
|
||||
%2 = affine.load %A[%i, %k] : memref<2048x2048xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<2048x2048xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<2048x2048xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<2048x2048xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
func @gemm_256(%alpha: f32, %beta: f32, %C: memref<256x256xf32>, %A: memref<256x256xf32>, %B: memref<256x256xf32>) {
|
||||
affine.for %i = 0 to 256 {
|
||||
affine.for %j = 0 to 256 {
|
||||
%0 = affine.load %C[%i, %j] : memref<256x256xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<256x256xf32>
|
||||
affine.for %k = 0 to 256 {
|
||||
%2 = affine.load %A[%i, %k] : memref<256x256xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<256x256xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<256x256xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<256x256xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
void gemm_32(float alpha, float beta, float C[32][32], float A[32][32],
|
||||
float B[32][32]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < 32; i++) {
|
||||
for (int j = 0; j < 32; j++) {
|
||||
C[i][j] *= beta;
|
||||
for (int k = 0; k < 32; k++) {
|
||||
C[i][j] += alpha * A[i][k] * B[k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma endscop
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
func @gemm_32(%alpha: f32, %beta: f32, %C: memref<32x32xf32>, %A: memref<32x32xf32>, %B: memref<32x32xf32>) {
|
||||
affine.for %i = 0 to 32 {
|
||||
affine.for %j = 0 to 32 {
|
||||
%0 = affine.load %C[%i, %j] : memref<32x32xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<32x32xf32>
|
||||
affine.for %k = 0 to 32 {
|
||||
%2 = affine.load %A[%i, %k] : memref<32x32xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<32x32xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<32x32xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<32x32xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
func @gemm_4096(%alpha: f32, %beta: f32, %C: memref<4096x4096xf32>, %A: memref<4096x4096xf32>, %B: memref<4096x4096xf32>) {
|
||||
affine.for %i = 0 to 4096 {
|
||||
affine.for %j = 0 to 4096 {
|
||||
%0 = affine.load %C[%i, %j] : memref<4096x4096xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<4096x4096xf32>
|
||||
affine.for %k = 0 to 4096 {
|
||||
%2 = affine.load %A[%i, %k] : memref<4096x4096xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<4096x4096xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<4096x4096xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<4096x4096xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
func @gemm_512(%alpha: f32, %beta: f32, %C: memref<512x512xf32>, %A: memref<512x512xf32>, %B: memref<512x512xf32>) {
|
||||
affine.for %i = 0 to 512 {
|
||||
affine.for %j = 0 to 512 {
|
||||
%0 = affine.load %C[%i, %j] : memref<512x512xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<512x512xf32>
|
||||
affine.for %k = 0 to 512 {
|
||||
%2 = affine.load %A[%i, %k] : memref<512x512xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<512x512xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<512x512xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<512x512xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
func @gemm_64(%alpha: f32, %beta: f32, %C: memref<64x64xf32>, %A: memref<64x64xf32>, %B: memref<64x64xf32>) {
|
||||
affine.for %i = 0 to 64 {
|
||||
affine.for %j = 0 to 64 {
|
||||
%0 = affine.load %C[%i, %j] : memref<64x64xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<64x64xf32>
|
||||
affine.for %k = 0 to 64 {
|
||||
%2 = affine.load %A[%i, %k] : memref<64x64xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<64x64xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<64x64xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<64x64xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
#define N 32
|
||||
void test_gemm(float alpha, float beta, float C[N][N], float A[N][N],
|
||||
float B[N][N]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < N; i++) {
|
||||
for (int j = 0; j < N; j++) {
|
||||
C[i][j] *= beta;
|
||||
for (int k = 0; k < N; k++) {
|
||||
C[i][j] += alpha * A[i][k] * B[k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma endscop
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
func @gesummv_1024(%alpha: f32, %beta: f32, %A: memref<1024x1024xf32>, %B: memref<1024x1024xf32>, %tmp: memref<1024xf32>, %x: memref<1024xf32>, %y: memref<1024xf32>) {
|
||||
affine.for %i = 0 to 1024 {
|
||||
affine.for %j = 0 to 1024 {
|
||||
%0 = affine.load %A[%i, %j] : memref<1024x1024xf32>
|
||||
%1 = affine.load %x[%j] : memref<1024xf32>
|
||||
%2 = affine.load %tmp[%i] : memref<1024xf32>
|
||||
%3 = mulf %0, %1 : f32
|
||||
%4 = addf %2, %3 : f32
|
||||
affine.store %4, %tmp[%i] : memref<1024xf32>
|
||||
%5 = affine.load %B[%i, %j] : memref<1024x1024xf32>
|
||||
%6 = affine.load %x[%j] : memref<1024xf32>
|
||||
%7 = affine.load %y[%i] : memref<1024xf32>
|
||||
%8 = mulf %5, %6 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
affine.store %9, %y[%i] : memref<1024xf32>
|
||||
}
|
||||
%10 = affine.load %tmp[%i] : memref<1024xf32>
|
||||
%11 = affine.load %y[%i] : memref<1024xf32>
|
||||
%12 = mulf %alpha, %10 : f32
|
||||
%13 = mulf %beta, %11 : f32
|
||||
%14 = addf %12, %13 : f32
|
||||
affine.store %14, %y[%i] : memref<1024xf32>
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
func @gesummv_128(%alpha: f32, %beta: f32, %A: memref<128x128xf32>, %B: memref<128x128xf32>, %tmp: memref<128xf32>, %x: memref<128xf32>, %y: memref<128xf32>) {
|
||||
affine.for %i = 0 to 128 {
|
||||
affine.for %j = 0 to 128 {
|
||||
%0 = affine.load %A[%i, %j] : memref<128x128xf32>
|
||||
%1 = affine.load %x[%j] : memref<128xf32>
|
||||
%2 = affine.load %tmp[%i] : memref<128xf32>
|
||||
%3 = mulf %0, %1 : f32
|
||||
%4 = addf %2, %3 : f32
|
||||
affine.store %4, %tmp[%i] : memref<128xf32>
|
||||
%5 = affine.load %B[%i, %j] : memref<128x128xf32>
|
||||
%6 = affine.load %x[%j] : memref<128xf32>
|
||||
%7 = affine.load %y[%i] : memref<128xf32>
|
||||
%8 = mulf %5, %6 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
affine.store %9, %y[%i] : memref<128xf32>
|
||||
}
|
||||
%10 = affine.load %tmp[%i] : memref<128xf32>
|
||||
%11 = affine.load %y[%i] : memref<128xf32>
|
||||
%12 = mulf %alpha, %10 : f32
|
||||
%13 = mulf %beta, %11 : f32
|
||||
%14 = addf %12, %13 : f32
|
||||
affine.store %14, %y[%i] : memref<128xf32>
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
func @gesummv_2048(%alpha: f32, %beta: f32, %A: memref<2048x2048xf32>, %B: memref<2048x2048xf32>, %tmp: memref<2048xf32>, %x: memref<2048xf32>, %y: memref<2048xf32>) {
|
||||
affine.for %i = 0 to 2048 {
|
||||
affine.for %j = 0 to 2048 {
|
||||
%0 = affine.load %A[%i, %j] : memref<2048x2048xf32>
|
||||
%1 = affine.load %x[%j] : memref<2048xf32>
|
||||
%2 = affine.load %tmp[%i] : memref<2048xf32>
|
||||
%3 = mulf %0, %1 : f32
|
||||
%4 = addf %2, %3 : f32
|
||||
affine.store %4, %tmp[%i] : memref<2048xf32>
|
||||
%5 = affine.load %B[%i, %j] : memref<2048x2048xf32>
|
||||
%6 = affine.load %x[%j] : memref<2048xf32>
|
||||
%7 = affine.load %y[%i] : memref<2048xf32>
|
||||
%8 = mulf %5, %6 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
affine.store %9, %y[%i] : memref<2048xf32>
|
||||
}
|
||||
%10 = affine.load %tmp[%i] : memref<2048xf32>
|
||||
%11 = affine.load %y[%i] : memref<2048xf32>
|
||||
%12 = mulf %alpha, %10 : f32
|
||||
%13 = mulf %beta, %11 : f32
|
||||
%14 = addf %12, %13 : f32
|
||||
affine.store %14, %y[%i] : memref<2048xf32>
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
func @gesummv_256(%alpha: f32, %beta: f32, %A: memref<256x256xf32>, %B: memref<256x256xf32>, %tmp: memref<256xf32>, %x: memref<256xf32>, %y: memref<256xf32>) {
|
||||
affine.for %i = 0 to 256 {
|
||||
affine.for %j = 0 to 256 {
|
||||
%0 = affine.load %A[%i, %j] : memref<256x256xf32>
|
||||
%1 = affine.load %x[%j] : memref<256xf32>
|
||||
%2 = affine.load %tmp[%i] : memref<256xf32>
|
||||
%3 = mulf %0, %1 : f32
|
||||
%4 = addf %2, %3 : f32
|
||||
affine.store %4, %tmp[%i] : memref<256xf32>
|
||||
%5 = affine.load %B[%i, %j] : memref<256x256xf32>
|
||||
%6 = affine.load %x[%j] : memref<256xf32>
|
||||
%7 = affine.load %y[%i] : memref<256xf32>
|
||||
%8 = mulf %5, %6 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
affine.store %9, %y[%i] : memref<256xf32>
|
||||
}
|
||||
%10 = affine.load %tmp[%i] : memref<256xf32>
|
||||
%11 = affine.load %y[%i] : memref<256xf32>
|
||||
%12 = mulf %alpha, %10 : f32
|
||||
%13 = mulf %beta, %11 : f32
|
||||
%14 = addf %12, %13 : f32
|
||||
affine.store %14, %y[%i] : memref<256xf32>
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
void gesummv_32(float alpha, float beta, float A[32][32], float B[32][32],
|
||||
float tmp[32], float x[32], float y[32]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < 32; i += 1) {
|
||||
for (int j = 0; j < 32; j += 1) {
|
||||
tmp[i] += A[i][j] * x[j];
|
||||
y[i] += B[i][j] * x[j];
|
||||
}
|
||||
y[i] = alpha * tmp[i] + beta * y[i];
|
||||
}
|
||||
#pragma endscop
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
func @gesummv_32(%alpha: f32, %beta: f32, %A: memref<32x32xf32>, %B: memref<32x32xf32>, %tmp: memref<32xf32>, %x: memref<32xf32>, %y: memref<32xf32>) {
|
||||
affine.for %i = 0 to 32 {
|
||||
affine.for %j = 0 to 32 {
|
||||
%0 = affine.load %A[%i, %j] : memref<32x32xf32>
|
||||
%1 = affine.load %x[%j] : memref<32xf32>
|
||||
%2 = affine.load %tmp[%i] : memref<32xf32>
|
||||
%3 = mulf %0, %1 : f32
|
||||
%4 = addf %2, %3 : f32
|
||||
affine.store %4, %tmp[%i] : memref<32xf32>
|
||||
%5 = affine.load %B[%i, %j] : memref<32x32xf32>
|
||||
%6 = affine.load %x[%j] : memref<32xf32>
|
||||
%7 = affine.load %y[%i] : memref<32xf32>
|
||||
%8 = mulf %5, %6 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
affine.store %9, %y[%i] : memref<32xf32>
|
||||
}
|
||||
%10 = affine.load %tmp[%i] : memref<32xf32>
|
||||
%11 = affine.load %y[%i] : memref<32xf32>
|
||||
%12 = mulf %alpha, %10 : f32
|
||||
%13 = mulf %beta, %11 : f32
|
||||
%14 = addf %12, %13 : f32
|
||||
affine.store %14, %y[%i] : memref<32xf32>
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
func @gesummv_4096(%alpha: f32, %beta: f32, %A: memref<4096x4096xf32>, %B: memref<4096x4096xf32>, %tmp: memref<4096xf32>, %x: memref<4096xf32>, %y: memref<4096xf32>) {
|
||||
affine.for %i = 0 to 4096 {
|
||||
affine.for %j = 0 to 4096 {
|
||||
%0 = affine.load %A[%i, %j] : memref<4096x4096xf32>
|
||||
%1 = affine.load %x[%j] : memref<4096xf32>
|
||||
%2 = affine.load %tmp[%i] : memref<4096xf32>
|
||||
%3 = mulf %0, %1 : f32
|
||||
%4 = addf %2, %3 : f32
|
||||
affine.store %4, %tmp[%i] : memref<4096xf32>
|
||||
%5 = affine.load %B[%i, %j] : memref<4096x4096xf32>
|
||||
%6 = affine.load %x[%j] : memref<4096xf32>
|
||||
%7 = affine.load %y[%i] : memref<4096xf32>
|
||||
%8 = mulf %5, %6 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
affine.store %9, %y[%i] : memref<4096xf32>
|
||||
}
|
||||
%10 = affine.load %tmp[%i] : memref<4096xf32>
|
||||
%11 = affine.load %y[%i] : memref<4096xf32>
|
||||
%12 = mulf %alpha, %10 : f32
|
||||
%13 = mulf %beta, %11 : f32
|
||||
%14 = addf %12, %13 : f32
|
||||
affine.store %14, %y[%i] : memref<4096xf32>
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
func @gesummv_512(%alpha: f32, %beta: f32, %A: memref<512x512xf32>, %B: memref<512x512xf32>, %tmp: memref<512xf32>, %x: memref<512xf32>, %y: memref<512xf32>) {
|
||||
affine.for %i = 0 to 512 {
|
||||
affine.for %j = 0 to 512 {
|
||||
%0 = affine.load %A[%i, %j] : memref<512x512xf32>
|
||||
%1 = affine.load %x[%j] : memref<512xf32>
|
||||
%2 = affine.load %tmp[%i] : memref<512xf32>
|
||||
%3 = mulf %0, %1 : f32
|
||||
%4 = addf %2, %3 : f32
|
||||
affine.store %4, %tmp[%i] : memref<512xf32>
|
||||
%5 = affine.load %B[%i, %j] : memref<512x512xf32>
|
||||
%6 = affine.load %x[%j] : memref<512xf32>
|
||||
%7 = affine.load %y[%i] : memref<512xf32>
|
||||
%8 = mulf %5, %6 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
affine.store %9, %y[%i] : memref<512xf32>
|
||||
}
|
||||
%10 = affine.load %tmp[%i] : memref<512xf32>
|
||||
%11 = affine.load %y[%i] : memref<512xf32>
|
||||
%12 = mulf %alpha, %10 : f32
|
||||
%13 = mulf %beta, %11 : f32
|
||||
%14 = addf %12, %13 : f32
|
||||
affine.store %14, %y[%i] : memref<512xf32>
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
func @gesummv_64(%alpha: f32, %beta: f32, %A: memref<64x64xf32>, %B: memref<64x64xf32>, %tmp: memref<64xf32>, %x: memref<64xf32>, %y: memref<64xf32>) {
|
||||
affine.for %i = 0 to 64 {
|
||||
affine.for %j = 0 to 64 {
|
||||
%0 = affine.load %A[%i, %j] : memref<64x64xf32>
|
||||
%1 = affine.load %x[%j] : memref<64xf32>
|
||||
%2 = affine.load %tmp[%i] : memref<64xf32>
|
||||
%3 = mulf %0, %1 : f32
|
||||
%4 = addf %2, %3 : f32
|
||||
affine.store %4, %tmp[%i] : memref<64xf32>
|
||||
%5 = affine.load %B[%i, %j] : memref<64x64xf32>
|
||||
%6 = affine.load %x[%j] : memref<64xf32>
|
||||
%7 = affine.load %y[%i] : memref<64xf32>
|
||||
%8 = mulf %5, %6 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
affine.store %9, %y[%i] : memref<64xf32>
|
||||
}
|
||||
%10 = affine.load %tmp[%i] : memref<64xf32>
|
||||
%11 = affine.load %y[%i] : memref<64xf32>
|
||||
%12 = mulf %alpha, %10 : f32
|
||||
%13 = mulf %beta, %11 : f32
|
||||
%14 = addf %12, %13 : f32
|
||||
affine.store %14, %y[%i] : memref<64xf32>
|
||||
}
|
||||
return
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#define N 32
|
||||
void test_gesummv(float alpha, float beta, float A[N][N], float B[N][N],
|
||||
float tmp[N], float x[N], float y[N]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < N; i += 1) {
|
||||
for (int j = 0; j < N; j += 1) {
|
||||
tmp[i] += A[i][j] * x[j];
|
||||
y[i] += B[i][j] * x[j];
|
||||
}
|
||||
y[i] = alpha * tmp[i] + beta * y[i];
|
||||
}
|
||||
#pragma endscop
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syr2k_1024(%alpha: f32, %beta: f32, %C: memref<1024x1024xf32>, %A: memref<1024x1024xf32>, %B: memref<1024x1024xf32>) {
|
||||
affine.for %i = 0 to 1024 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<1024x1024xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<1024x1024xf32>
|
||||
affine.for %k = 0 to 1024 {
|
||||
%2 = affine.load %A[%i, %k] : memref<1024x1024xf32>
|
||||
%3 = affine.load %B[%j, %k] : memref<1024x1024xf32>
|
||||
%4 = affine.load %B[%i, %k] : memref<1024x1024xf32>
|
||||
%5 = affine.load %A[%j, %k] : memref<1024x1024xf32>
|
||||
%6 = affine.load %C[%i, %j] : memref<1024x1024xf32>
|
||||
%7 = mulf %2, %3 : f32
|
||||
%8 = mulf %4, %5 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
%10 = mulf %alpha, %9 : f32
|
||||
%11 = addf %6, %10 : f32
|
||||
affine.store %11, %C[%i, %j] : memref<1024x1024xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syr2k_128(%alpha: f32, %beta: f32, %C: memref<128x128xf32>, %A: memref<128x128xf32>, %B: memref<128x128xf32>) {
|
||||
affine.for %i = 0 to 128 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<128x128xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<128x128xf32>
|
||||
affine.for %k = 0 to 128 {
|
||||
%2 = affine.load %A[%i, %k] : memref<128x128xf32>
|
||||
%3 = affine.load %B[%j, %k] : memref<128x128xf32>
|
||||
%4 = affine.load %B[%i, %k] : memref<128x128xf32>
|
||||
%5 = affine.load %A[%j, %k] : memref<128x128xf32>
|
||||
%6 = affine.load %C[%i, %j] : memref<128x128xf32>
|
||||
%7 = mulf %2, %3 : f32
|
||||
%8 = mulf %4, %5 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
%10 = mulf %alpha, %9 : f32
|
||||
%11 = addf %6, %10 : f32
|
||||
affine.store %11, %C[%i, %j] : memref<128x128xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syr2k_2048(%alpha: f32, %beta: f32, %C: memref<2048x2048xf32>, %A: memref<2048x2048xf32>, %B: memref<2048x2048xf32>) {
|
||||
affine.for %i = 0 to 2048 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<2048x2048xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<2048x2048xf32>
|
||||
affine.for %k = 0 to 2048 {
|
||||
%2 = affine.load %A[%i, %k] : memref<2048x2048xf32>
|
||||
%3 = affine.load %B[%j, %k] : memref<2048x2048xf32>
|
||||
%4 = affine.load %B[%i, %k] : memref<2048x2048xf32>
|
||||
%5 = affine.load %A[%j, %k] : memref<2048x2048xf32>
|
||||
%6 = affine.load %C[%i, %j] : memref<2048x2048xf32>
|
||||
%7 = mulf %2, %3 : f32
|
||||
%8 = mulf %4, %5 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
%10 = mulf %alpha, %9 : f32
|
||||
%11 = addf %6, %10 : f32
|
||||
affine.store %11, %C[%i, %j] : memref<2048x2048xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syr2k_256(%alpha: f32, %beta: f32, %C: memref<256x256xf32>, %A: memref<256x256xf32>, %B: memref<256x256xf32>) {
|
||||
affine.for %i = 0 to 256 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<256x256xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<256x256xf32>
|
||||
affine.for %k = 0 to 256 {
|
||||
%2 = affine.load %A[%i, %k] : memref<256x256xf32>
|
||||
%3 = affine.load %B[%j, %k] : memref<256x256xf32>
|
||||
%4 = affine.load %B[%i, %k] : memref<256x256xf32>
|
||||
%5 = affine.load %A[%j, %k] : memref<256x256xf32>
|
||||
%6 = affine.load %C[%i, %j] : memref<256x256xf32>
|
||||
%7 = mulf %2, %3 : f32
|
||||
%8 = mulf %4, %5 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
%10 = mulf %alpha, %9 : f32
|
||||
%11 = addf %6, %10 : f32
|
||||
affine.store %11, %C[%i, %j] : memref<256x256xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syr2k_32(%alpha: f32, %beta: f32, %C: memref<32x32xf32>, %A: memref<32x32xf32>, %B: memref<32x32xf32>) {
|
||||
affine.for %i = 0 to 32 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<32x32xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<32x32xf32>
|
||||
affine.for %k = 0 to 32 {
|
||||
%2 = affine.load %A[%i, %k] : memref<32x32xf32>
|
||||
%3 = affine.load %B[%j, %k] : memref<32x32xf32>
|
||||
%4 = affine.load %B[%i, %k] : memref<32x32xf32>
|
||||
%5 = affine.load %A[%j, %k] : memref<32x32xf32>
|
||||
%6 = affine.load %C[%i, %j] : memref<32x32xf32>
|
||||
%7 = mulf %2, %3 : f32
|
||||
%8 = mulf %4, %5 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
%10 = mulf %alpha, %9 : f32
|
||||
%11 = addf %6, %10 : f32
|
||||
affine.store %11, %C[%i, %j] : memref<32x32xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syr2k_4096(%alpha: f32, %beta: f32, %C: memref<4096x4096xf32>, %A: memref<4096x4096xf32>, %B: memref<4096x4096xf32>) {
|
||||
affine.for %i = 0 to 4096 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<4096x4096xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<4096x4096xf32>
|
||||
affine.for %k = 0 to 4096 {
|
||||
%2 = affine.load %A[%i, %k] : memref<4096x4096xf32>
|
||||
%3 = affine.load %B[%j, %k] : memref<4096x4096xf32>
|
||||
%4 = affine.load %B[%i, %k] : memref<4096x4096xf32>
|
||||
%5 = affine.load %A[%j, %k] : memref<4096x4096xf32>
|
||||
%6 = affine.load %C[%i, %j] : memref<4096x4096xf32>
|
||||
%7 = mulf %2, %3 : f32
|
||||
%8 = mulf %4, %5 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
%10 = mulf %alpha, %9 : f32
|
||||
%11 = addf %6, %10 : f32
|
||||
affine.store %11, %C[%i, %j] : memref<4096x4096xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syr2k_512(%alpha: f32, %beta: f32, %C: memref<512x512xf32>, %A: memref<512x512xf32>, %B: memref<512x512xf32>) {
|
||||
affine.for %i = 0 to 512 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<512x512xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<512x512xf32>
|
||||
affine.for %k = 0 to 512 {
|
||||
%2 = affine.load %A[%i, %k] : memref<512x512xf32>
|
||||
%3 = affine.load %B[%j, %k] : memref<512x512xf32>
|
||||
%4 = affine.load %B[%i, %k] : memref<512x512xf32>
|
||||
%5 = affine.load %A[%j, %k] : memref<512x512xf32>
|
||||
%6 = affine.load %C[%i, %j] : memref<512x512xf32>
|
||||
%7 = mulf %2, %3 : f32
|
||||
%8 = mulf %4, %5 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
%10 = mulf %alpha, %9 : f32
|
||||
%11 = addf %6, %10 : f32
|
||||
affine.store %11, %C[%i, %j] : memref<512x512xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syr2k_64(%alpha: f32, %beta: f32, %C: memref<64x64xf32>, %A: memref<64x64xf32>, %B: memref<64x64xf32>) {
|
||||
affine.for %i = 0 to 64 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<64x64xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<64x64xf32>
|
||||
affine.for %k = 0 to 64 {
|
||||
%2 = affine.load %A[%i, %k] : memref<64x64xf32>
|
||||
%3 = affine.load %B[%j, %k] : memref<64x64xf32>
|
||||
%4 = affine.load %B[%i, %k] : memref<64x64xf32>
|
||||
%5 = affine.load %A[%j, %k] : memref<64x64xf32>
|
||||
%6 = affine.load %C[%i, %j] : memref<64x64xf32>
|
||||
%7 = mulf %2, %3 : f32
|
||||
%8 = mulf %4, %5 : f32
|
||||
%9 = addf %7, %8 : f32
|
||||
%10 = mulf %alpha, %9 : f32
|
||||
%11 = addf %6, %10 : f32
|
||||
affine.store %11, %C[%i, %j] : memref<64x64xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,10 +1,11 @@
|
|||
void syr2k_32(float alpha, float beta, float C[32][32], float A[32][32],
|
||||
float B[32][32]) {
|
||||
#define N 32
|
||||
void test_syr2k(float alpha, float beta, float C[N][N], float A[N][N],
|
||||
float B[N][N]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < 32; i += 1) {
|
||||
for (int i = 0; i < N; i += 1) {
|
||||
for (int j = 0; j < (i + 1); j += 1) {
|
||||
C[i][j] *= beta;
|
||||
for (int k = 0; k < 32; k += 1) {
|
||||
for (int k = 0; k < N; k += 1) {
|
||||
float tmp = A[i][k] * B[j][k] + B[i][k] * A[j][k];
|
||||
C[i][j] += alpha * tmp;
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syrk_1024(%alpha: f32, %beta: f32, %C: memref<1024x1024xf32>, %A: memref<1024x1024xf32>) {
|
||||
affine.for %i = 0 to 1024 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<1024x1024xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<1024x1024xf32>
|
||||
affine.for %k = 0 to 1024 {
|
||||
%2 = affine.load %A[%i, %k] : memref<1024x1024xf32>
|
||||
%3 = affine.load %A[%j, %k] : memref<1024x1024xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<1024x1024xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<1024x1024xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syrk_128(%alpha: f32, %beta: f32, %C: memref<128x128xf32>, %A: memref<128x128xf32>) {
|
||||
affine.for %i = 0 to 128 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<128x128xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<128x128xf32>
|
||||
affine.for %k = 0 to 128 {
|
||||
%2 = affine.load %A[%i, %k] : memref<128x128xf32>
|
||||
%3 = affine.load %A[%j, %k] : memref<128x128xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<128x128xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<128x128xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syrk_2048(%alpha: f32, %beta: f32, %C: memref<2048x2048xf32>, %A: memref<2048x2048xf32>) {
|
||||
affine.for %i = 0 to 2048 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<2048x2048xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<2048x2048xf32>
|
||||
affine.for %k = 0 to 2048 {
|
||||
%2 = affine.load %A[%i, %k] : memref<2048x2048xf32>
|
||||
%3 = affine.load %A[%j, %k] : memref<2048x2048xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<2048x2048xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<2048x2048xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syrk_256(%alpha: f32, %beta: f32, %C: memref<256x256xf32>, %A: memref<256x256xf32>) {
|
||||
affine.for %i = 0 to 256 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<256x256xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<256x256xf32>
|
||||
affine.for %k = 0 to 256 {
|
||||
%2 = affine.load %A[%i, %k] : memref<256x256xf32>
|
||||
%3 = affine.load %A[%j, %k] : memref<256x256xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<256x256xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<256x256xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syrk_32(%alpha: f32, %beta: f32, %C: memref<32x32xf32>, %A: memref<32x32xf32>) {
|
||||
affine.for %i = 0 to 32 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<32x32xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<32x32xf32>
|
||||
affine.for %k = 0 to 32 {
|
||||
%2 = affine.load %A[%i, %k] : memref<32x32xf32>
|
||||
%3 = affine.load %A[%j, %k] : memref<32x32xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<32x32xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<32x32xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syrk_4096(%alpha: f32, %beta: f32, %C: memref<4096x4096xf32>, %A: memref<4096x4096xf32>) {
|
||||
affine.for %i = 0 to 4096 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<4096x4096xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<4096x4096xf32>
|
||||
affine.for %k = 0 to 4096 {
|
||||
%2 = affine.load %A[%i, %k] : memref<4096x4096xf32>
|
||||
%3 = affine.load %A[%j, %k] : memref<4096x4096xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<4096x4096xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<4096x4096xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syrk_512(%alpha: f32, %beta: f32, %C: memref<512x512xf32>, %A: memref<512x512xf32>) {
|
||||
affine.for %i = 0 to 512 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<512x512xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<512x512xf32>
|
||||
affine.for %k = 0 to 512 {
|
||||
%2 = affine.load %A[%i, %k] : memref<512x512xf32>
|
||||
%3 = affine.load %A[%j, %k] : memref<512x512xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<512x512xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<512x512xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @syrk_64(%alpha: f32, %beta: f32, %C: memref<64x64xf32>, %A: memref<64x64xf32>) {
|
||||
affine.for %i = 0 to 64 {
|
||||
affine.for %j = 0 to #map(%i) {
|
||||
%0 = affine.load %C[%i, %j] : memref<64x64xf32>
|
||||
%1 = mulf %beta, %0 : f32
|
||||
affine.store %1, %C[%i, %j] : memref<64x64xf32>
|
||||
affine.for %k = 0 to 64 {
|
||||
%2 = affine.load %A[%i, %k] : memref<64x64xf32>
|
||||
%3 = affine.load %A[%j, %k] : memref<64x64xf32>
|
||||
%4 = affine.load %C[%i, %j] : memref<64x64xf32>
|
||||
%5 = mulf %alpha, %2 : f32
|
||||
%6 = mulf %5, %3 : f32
|
||||
%7 = addf %4, %6 : f32
|
||||
affine.store %7, %C[%i, %j] : memref<64x64xf32>
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,9 +1,10 @@
|
|||
void syrk_32(float alpha, float beta, float C[32][32], float A[32][32]) {
|
||||
#define N 32
|
||||
void test_syrk(float alpha, float beta, float C[N][N], float A[N][N]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < 32; i++) {
|
||||
for (int i = 0; i < N; i++) {
|
||||
for (int j = 0; j <= i; j++) {
|
||||
C[i][j] *= beta;
|
||||
for (int k = 0; k < 32; k++) {
|
||||
for (int k = 0; k < N; k++) {
|
||||
C[i][j] += alpha * A[i][k] * A[j][k];
|
||||
}
|
||||
}
|
|
@ -1,7 +1,8 @@
|
|||
void trmm_32(float alpha, float A[32][32], float B[32][32]) {
|
||||
#define N 32
|
||||
void test_trmm(float alpha, float A[N][N], float B[N][N]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < 32; i += 1) {
|
||||
for (int j = 0; j < 32; j += 1) {
|
||||
for (int i = 0; i < N; i += 1) {
|
||||
for (int j = 0; j < N; j += 1) {
|
||||
for (int k = 0; k < (i + 1); k += 1) {
|
||||
B[i][j] += A[i][k] * B[k][j];
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @trmm_1024(%alpha: f32, %A: memref<1024x1024xf32>, %B: memref<1024x1024xf32>) {
|
||||
affine.for %i = 0 to 1024 {
|
||||
affine.for %j = 0 to 1024 {
|
||||
affine.for %k = 0 to #map(%i) {
|
||||
%2 = affine.load %A[%i, %k] : memref<1024x1024xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<1024x1024xf32>
|
||||
%4 = affine.load %B[%i, %j] : memref<1024x1024xf32>
|
||||
%5 = mulf %2, %3 : f32
|
||||
%6 = addf %4, %5 : f32
|
||||
affine.store %6, %B[%i, %j] : memref<1024x1024xf32>
|
||||
}
|
||||
%0 = affine.load %B[%i, %j] : memref<1024x1024xf32>
|
||||
%1 = mulf %alpha, %0 : f32
|
||||
affine.store %1, %B[%i, %j] : memref<1024x1024xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @trmm_128(%alpha: f32, %A: memref<128x128xf32>, %B: memref<128x128xf32>) {
|
||||
affine.for %i = 0 to 128 {
|
||||
affine.for %j = 0 to 128 {
|
||||
affine.for %k = 0 to #map(%i) {
|
||||
%2 = affine.load %A[%i, %k] : memref<128x128xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<128x128xf32>
|
||||
%4 = affine.load %B[%i, %j] : memref<128x128xf32>
|
||||
%5 = mulf %2, %3 : f32
|
||||
%6 = addf %4, %5 : f32
|
||||
affine.store %6, %B[%i, %j] : memref<128x128xf32>
|
||||
}
|
||||
%0 = affine.load %B[%i, %j] : memref<128x128xf32>
|
||||
%1 = mulf %alpha, %0 : f32
|
||||
affine.store %1, %B[%i, %j] : memref<128x128xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @trmm_2048(%alpha: f32, %A: memref<2048x2048xf32>, %B: memref<2048x2048xf32>) {
|
||||
affine.for %i = 0 to 2048 {
|
||||
affine.for %j = 0 to 2048 {
|
||||
affine.for %k = 0 to #map(%i) {
|
||||
%2 = affine.load %A[%i, %k] : memref<2048x2048xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<2048x2048xf32>
|
||||
%4 = affine.load %B[%i, %j] : memref<2048x2048xf32>
|
||||
%5 = mulf %2, %3 : f32
|
||||
%6 = addf %4, %5 : f32
|
||||
affine.store %6, %B[%i, %j] : memref<2048x2048xf32>
|
||||
}
|
||||
%0 = affine.load %B[%i, %j] : memref<2048x2048xf32>
|
||||
%1 = mulf %alpha, %0 : f32
|
||||
affine.store %1, %B[%i, %j] : memref<2048x2048xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @trmm_256(%alpha: f32, %A: memref<256x256xf32>, %B: memref<256x256xf32>) {
|
||||
affine.for %i = 0 to 256 {
|
||||
affine.for %j = 0 to 256 {
|
||||
affine.for %k = 0 to #map(%i) {
|
||||
%2 = affine.load %A[%i, %k] : memref<256x256xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<256x256xf32>
|
||||
%4 = affine.load %B[%i, %j] : memref<256x256xf32>
|
||||
%5 = mulf %2, %3 : f32
|
||||
%6 = addf %4, %5 : f32
|
||||
affine.store %6, %B[%i, %j] : memref<256x256xf32>
|
||||
}
|
||||
%0 = affine.load %B[%i, %j] : memref<256x256xf32>
|
||||
%1 = mulf %alpha, %0 : f32
|
||||
affine.store %1, %B[%i, %j] : memref<256x256xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @trmm_32(%alpha: f32, %A: memref<32x32xf32>, %B: memref<32x32xf32>) {
|
||||
affine.for %i = 0 to 32 {
|
||||
affine.for %j = 0 to 32 {
|
||||
affine.for %k = 0 to #map(%i) {
|
||||
%2 = affine.load %A[%i, %k] : memref<32x32xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<32x32xf32>
|
||||
%4 = affine.load %B[%i, %j] : memref<32x32xf32>
|
||||
%5 = mulf %2, %3 : f32
|
||||
%6 = addf %4, %5 : f32
|
||||
affine.store %6, %B[%i, %j] : memref<32x32xf32>
|
||||
}
|
||||
%0 = affine.load %B[%i, %j] : memref<32x32xf32>
|
||||
%1 = mulf %alpha, %0 : f32
|
||||
affine.store %1, %B[%i, %j] : memref<32x32xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @trmm_4096(%alpha: f32, %A: memref<4096x4096xf32>, %B: memref<4096x4096xf32>) {
|
||||
affine.for %i = 0 to 4096 {
|
||||
affine.for %j = 0 to 4096 {
|
||||
affine.for %k = 0 to #map(%i) {
|
||||
%2 = affine.load %A[%i, %k] : memref<4096x4096xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<4096x4096xf32>
|
||||
%4 = affine.load %B[%i, %j] : memref<4096x4096xf32>
|
||||
%5 = mulf %2, %3 : f32
|
||||
%6 = addf %4, %5 : f32
|
||||
affine.store %6, %B[%i, %j] : memref<4096x4096xf32>
|
||||
}
|
||||
%0 = affine.load %B[%i, %j] : memref<4096x4096xf32>
|
||||
%1 = mulf %alpha, %0 : f32
|
||||
affine.store %1, %B[%i, %j] : memref<4096x4096xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @trmm_512(%alpha: f32, %A: memref<512x512xf32>, %B: memref<512x512xf32>) {
|
||||
affine.for %i = 0 to 512 {
|
||||
affine.for %j = 0 to 512 {
|
||||
affine.for %k = 0 to #map(%i) {
|
||||
%2 = affine.load %A[%i, %k] : memref<512x512xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<512x512xf32>
|
||||
%4 = affine.load %B[%i, %j] : memref<512x512xf32>
|
||||
%5 = mulf %2, %3 : f32
|
||||
%6 = addf %4, %5 : f32
|
||||
affine.store %6, %B[%i, %j] : memref<512x512xf32>
|
||||
}
|
||||
%0 = affine.load %B[%i, %j] : memref<512x512xf32>
|
||||
%1 = mulf %alpha, %0 : f32
|
||||
affine.store %1, %B[%i, %j] : memref<512x512xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#map = affine_map<(d0) -> (d0 + 1)>
|
||||
func @trmm_64(%alpha: f32, %A: memref<64x64xf32>, %B: memref<64x64xf32>) {
|
||||
affine.for %i = 0 to 64 {
|
||||
affine.for %j = 0 to 64 {
|
||||
affine.for %k = 0 to #map(%i) {
|
||||
%2 = affine.load %A[%i, %k] : memref<64x64xf32>
|
||||
%3 = affine.load %B[%k, %j] : memref<64x64xf32>
|
||||
%4 = affine.load %B[%i, %j] : memref<64x64xf32>
|
||||
%5 = mulf %2, %3 : f32
|
||||
%6 = addf %4, %5 : f32
|
||||
affine.store %6, %B[%i, %j] : memref<64x64xf32>
|
||||
}
|
||||
%0 = affine.load %B[%i, %j] : memref<64x64xf32>
|
||||
%1 = mulf %alpha, %0 : f32
|
||||
affine.store %1, %B[%i, %j] : memref<64x64xf32>
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
# REQUIRES: bindings_python
|
||||
# RUN: %PYTHON %s
|
||||
|
||||
import mlir.ir
|
||||
from mlir.dialects import builtin
|
||||
import scalehls
|
||||
from scalehls.dialects import hlscpp
|
|
@ -13,13 +13,16 @@
|
|||
// CHECK-NEXT: for (int [[j:.*]] = 0; [[j]] < 4; [[j]] += 1) {
|
||||
// CHECK-NEXT: #pragma HLS pipeline II=3
|
||||
|
||||
void test_syrk(float alpha, float beta, float C[32][32], float A[32][32]) {
|
||||
for (int i = 0; i < 32; i++) {
|
||||
#define N 32
|
||||
void test_syrk(float alpha, float beta, float C[N][N], float A[N][N]) {
|
||||
#pragma scop
|
||||
for (int i = 0; i < N; i++) {
|
||||
for (int j = 0; j <= i; j++) {
|
||||
C[i][j] *= beta;
|
||||
for (int k = 0; k < 32; k++) {
|
||||
for (int k = 0; k < N; k++) {
|
||||
C[i][j] += alpha * A[i][k] * A[j][k];
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma endscop
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue