mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-23 13:27:29 -04:00
sfilter working
This commit is contained in:
parent
ea53554215
commit
2fb1a0a1da
7 changed files with 93070 additions and 0 deletions
33
benchmarks/vector/sfilter/Makefile
Normal file
33
benchmarks/vector/sfilter/Makefile
Normal file
|
@ -0,0 +1,33 @@
|
|||
LIB_PATH = ../../../runtime
|
||||
|
||||
COMP = /home/priya/dev/riscv_vec/riscv-gnu/bin/riscv32-unknown-elf-gcc
|
||||
|
||||
CC_FLAGS = -ffreestanding -O0 -Wl,--gc-sections -nostartfiles -nostdlib -nostartfiles -nodefaultlibs -Wl,-Bstatic,-T,$(LIB_PATH)/mains/vortex_link.ld -march=rv32imv -mabi=ilp32
|
||||
|
||||
DMP = /home/priya/dev/riscv_vec/riscv-gnu/bin/riscv32-unknown-elf-objdump
|
||||
CPY = /home/priya/dev/riscv_vec/riscv-gnu/bin/riscv32-unknown-elf-objcopy
|
||||
|
||||
# VX_STR = ../../startup/vx_start.s
|
||||
|
||||
NEWLIB = $(LIB_PATH)/newlib/newlib.c
|
||||
VX_STR = $(LIB_PATH)/startup/vx_start.s
|
||||
VX_INT = $(LIB_PATH)/intrinsics/vx_intrinsics.s
|
||||
VX_IO = $(LIB_PATH)/io/vx_io.s $(LIB_PATH)/io/vx_io.c
|
||||
VX_API = $(LIB_PATH)/vx_api/vx_api.c
|
||||
VX_TEST = $(LIB_PATH)/tests/tests.c
|
||||
VX_FIO = $(LIB_PATH)/fileio/fileio.s
|
||||
VX_VEC = vx_vec_sfilter.s #float --> int
|
||||
LIBS = /home/priya/dev/riscv_vec/riscv-gnu/riscv32-unknown-elf/lib/libc.a /home/priya/dev/riscv_vec/riscv-gnu/riscv32-unknown-elf/lib/libstdc++.a -static-libgcc -lgcc
|
||||
|
||||
VX_MAIN = vx_vec_sfilter
|
||||
|
||||
all: HEX DUMP ELF
|
||||
|
||||
DUMP: ELF
|
||||
$(DMP) -D $(VX_MAIN).elf > $(VX_MAIN).dump
|
||||
|
||||
HEX: ELF
|
||||
$(CPY) -O ihex $(VX_MAIN).elf $(VX_MAIN).hex
|
||||
|
||||
ELF:
|
||||
$(COMP) $(CC_FLAGS) $(VX_STR) $(VX_VEC) $(VX_FIO) $(NEWLIB) $(VX_INT) $(VX_IO) $(VX_API) $(VX_TEST) $(VX_MAIN).c $(LIBS) -Iinclude -o $(VX_MAIN).elf
|
80
benchmarks/vector/sfilter/vx_vec_sfilter.c
Normal file
80
benchmarks/vector/sfilter/vx_vec_sfilter.c
Normal file
|
@ -0,0 +1,80 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "../../../runtime/intrinsics/vx_intrinsics.h"
|
||||
#include "vx_vec_sfilter.h"
|
||||
|
||||
#define NUM_DATA 66
|
||||
|
||||
int main()
|
||||
{
|
||||
vx_tmc(1);
|
||||
|
||||
int n = NUM_DATA*NUM_DATA;
|
||||
int ldc = NUM_DATA;
|
||||
|
||||
/*int m0 = 1;
|
||||
int m1 = 1;
|
||||
int m2 = 1;
|
||||
int m3 = 1;
|
||||
int m4 = 1;
|
||||
int m5 = 1;
|
||||
int m6 = 1;
|
||||
int m7 = 1;
|
||||
int m8 = 1;*/
|
||||
int m = 1;
|
||||
|
||||
int *a = (int*)malloc(sizeof(int) * n);
|
||||
int *b = (int*)malloc(sizeof(int) * n);
|
||||
int *c = (int*)malloc(sizeof(int) * n);
|
||||
|
||||
|
||||
for (int i = 0; i < n; ++i) {
|
||||
a[i] = i;
|
||||
b[i] = 0;
|
||||
c[i] = 0;
|
||||
}
|
||||
|
||||
int N = 32;
|
||||
for(int y = 1; y < (NUM_DATA-1); y++){
|
||||
for(int x = 1; x < (NUM_DATA-1); x = x+N) {
|
||||
vx_vec_sfilter(a, b, ldc, m, x, y, N);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for(int y = 1; y < (NUM_DATA-1); ++y)
|
||||
{
|
||||
for(int x = 1; x < (NUM_DATA-1); ++x){
|
||||
int i0 = a[(x-1)+(y-1)*ldc]*m;
|
||||
//printf("a[%d] = %d",((x-1)+(y-1)*ldc), a[(x-1)+(y-1)*ldc] );
|
||||
int i1 = a[(x) +(y-1)*ldc]*m;
|
||||
int i2 = a[(x+1)+(y-1)*ldc]*m;
|
||||
int i3 = a[(x-1)+(y) *ldc]*m;
|
||||
int i4 = a[(x) + y * ldc]*m;
|
||||
int i5 = a[(x+1)+(y) *ldc]*m;
|
||||
int i6 = a[(x-1)+(y+1)*ldc]*m;
|
||||
int i7 = a[(x) +(y+1)*ldc]*m;
|
||||
int i8 = a[(x+1)+(y+1)*ldc]*m;
|
||||
|
||||
c[x+y*ldc] = i0 + i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8;
|
||||
//printf("\nc[%d] = %d",(x+y*ldc), c[x+y*ldc] );
|
||||
//printf("\nb[%d] = %d",(x+y*ldc), b[x+y*ldc] );
|
||||
//printf("%d, %d, %d, %d, %d, %d, %d, %d, %d", i0, i1, i2, i3, i4, i5, i6, i7, i8);
|
||||
if(c[x+y*ldc] != b[x+y*ldc] )
|
||||
{
|
||||
printf("\n<saxpy> FAILED at <index: %d>! \n", x);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printf("\nPASSED.......................... <sfilter> \n");
|
||||
|
||||
|
||||
free(a); free(b); free(c);
|
||||
|
||||
vx_tmc(0);
|
||||
|
||||
return 0;
|
||||
}
|
87206
benchmarks/vector/sfilter/vx_vec_sfilter.dump
Normal file
87206
benchmarks/vector/sfilter/vx_vec_sfilter.dump
Normal file
File diff suppressed because it is too large
Load diff
BIN
benchmarks/vector/sfilter/vx_vec_sfilter.elf
Executable file
BIN
benchmarks/vector/sfilter/vx_vec_sfilter.elf
Executable file
Binary file not shown.
12
benchmarks/vector/sfilter/vx_vec_sfilter.h
Normal file
12
benchmarks/vector/sfilter/vx_vec_sfilter.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void vx_vec_sfilter(int* a, int* b, int ldc, int m, int x, int y, int N);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
5628
benchmarks/vector/sfilter/vx_vec_sfilter.hex
Normal file
5628
benchmarks/vector/sfilter/vx_vec_sfilter.hex
Normal file
File diff suppressed because it is too large
Load diff
111
benchmarks/vector/sfilter/vx_vec_sfilter.s
Normal file
111
benchmarks/vector/sfilter/vx_vec_sfilter.s
Normal file
|
@ -0,0 +1,111 @@
|
|||
.type vx_vec_saxpy, @function
|
||||
.global vx_vec_sfilter
|
||||
#vx_vec_sfilter(a, b, ldc, m, x, y, N);
|
||||
#a0 - a
|
||||
#a1 - b
|
||||
#a2 - ldc
|
||||
#a3 - m
|
||||
#a4 - x
|
||||
#a5 - y
|
||||
#a6 - N
|
||||
|
||||
vx_vec_sfilter:
|
||||
vsetvli t0, a6, e32
|
||||
|
||||
li t1, 1
|
||||
sub t2, a4, t1 #(x-1)
|
||||
add t3, a4, t1 #(x+1)
|
||||
sub t4, a5, t1 #(y-1)
|
||||
add t5, a5, t1 #(y+1)
|
||||
|
||||
#i0
|
||||
mul t6, t4, a2 #(y-1)*ldc
|
||||
add a7, t6, t2 #(x-1) + (y-1)*ldc
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v0, (a0)
|
||||
vmul.vx v0, v0, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#i1
|
||||
add a7, t6, a4 #(x + (y-1)*ldc)
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v1, (a0)
|
||||
vmul.vx v1, v1, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#i2
|
||||
add a7, t3, t6 #((x+1) + (y-1)*ldc)
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v2, (a0)
|
||||
vmul.vx v2, v2, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#i3
|
||||
mul t6, a5, a2 #y*ldc
|
||||
add a7, t6, t2 #(x-1) + y*ldc
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v3, (a0)
|
||||
vmul.vx v3, v3, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#i4
|
||||
add a7, t6, a4 #(x + y*ldc)
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v4, (a0)
|
||||
vmul.vx v4, v4, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#i5
|
||||
add a7, t6, t3 #((x+1) + (y*ldc))
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v5, (a0)
|
||||
vmul.vx v5, v5, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#i6
|
||||
mul t6, t5, a2 #(y+1)*ldc
|
||||
add a7, t6, t2 #(x-1) + (y+1)*ldc
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v6, (a0)
|
||||
vmul.vx v6, v6, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#i7
|
||||
add a7, t6, a4 #(y+1)*ldc + x
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v7, (a0)
|
||||
vmul.vx v7, v7, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#i8
|
||||
add a7, t6, t3 #(x+1) + (y+1)*ldc
|
||||
slli a7, a7, 2
|
||||
add a0, a0, a7
|
||||
vlw.v v8, (a0)
|
||||
vmul.vx v8, v8, a3
|
||||
sub a0, a0, a7
|
||||
|
||||
#c
|
||||
mul t6, a5, a2 #y*ldc
|
||||
add a7, t6, a4 # x + y*ldc
|
||||
vadd.vv v9, v0, v1
|
||||
vadd.vv v9, v9, v2
|
||||
vadd.vv v9, v9, v3
|
||||
vadd.vv v9, v9, v4
|
||||
vadd.vv v9, v9, v5
|
||||
vadd.vv v9, v9, v6
|
||||
vadd.vv v9, v9, v7
|
||||
vadd.vv v9, v9, v8
|
||||
slli a7, a7, 2
|
||||
add a1, a1, a7
|
||||
vsw.v v9, (a1)
|
||||
|
||||
ret
|
Loading…
Add table
Add a link
Reference in a new issue