sfilter working

This commit is contained in:
proshan3 2019-11-25 11:53:02 -05:00
parent ea53554215
commit 2fb1a0a1da
7 changed files with 93070 additions and 0 deletions

View 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

View 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;
}

File diff suppressed because it is too large Load diff

Binary file not shown.

View 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

File diff suppressed because it is too large Load diff

View 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