From aa3753d024e34fd45f23cfbbb3370071713792a7 Mon Sep 17 00:00:00 2001 From: Metehan Dundar Date: Thu, 8 May 2025 11:57:06 +0200 Subject: [PATCH] Add RISC-V vector add and triad benchmarks with corresponding Makefiles and assembly files --- examples/add/Makefile | 24 ++ examples/add/add_riscv.c | 54 +++ examples/riscy_asm_files/add_riscv.s | 178 ++++++++ examples/riscy_asm_files/add_riscv_vec.s | 225 ++++++++++ examples/riscy_asm_files/triad.s | 184 ++++++++ examples/riscy_asm_files/triad_vec.s | 234 ++++++++++ examples/triad/Makefile | 24 ++ examples/triad/triad.c | 55 +++ osaca/data/isa/riscv.yml | 516 +---------------------- osaca/data/rv64.yml | 4 +- osaca/osaca.py | 35 +- osaca/parser/base_parser.py | 14 +- osaca/parser/parser_RISCV.py | 89 +++- 13 files changed, 1103 insertions(+), 533 deletions(-) create mode 100644 examples/add/Makefile create mode 100644 examples/add/add_riscv.c create mode 100644 examples/riscy_asm_files/add_riscv.s create mode 100644 examples/riscy_asm_files/add_riscv_vec.s create mode 100644 examples/riscy_asm_files/triad.s create mode 100644 examples/riscy_asm_files/triad_vec.s create mode 100644 examples/triad/Makefile create mode 100644 examples/triad/triad.c diff --git a/examples/add/Makefile b/examples/add/Makefile new file mode 100644 index 0000000..1cdf2cd --- /dev/null +++ b/examples/add/Makefile @@ -0,0 +1,24 @@ +# Makefile for RISC-V add example + +CC = gcc +CFLAGS = -O3 +CFLAGS_VEC = -O3 -march=rv64gcv + +# Default target with -O3 +all: add_riscv add_riscv_vec + +# Build with -O3 optimization +add_riscv: add_riscv.c + $(CC) $(CFLAGS) -o add_riscv add_riscv.c + $(CC) $(CFLAGS) -S -o add_riscv.s add_riscv.c + +# Build with vector extensions +add_riscv_vec: add_riscv.c + $(CC) $(CFLAGS_VEC) -o add_riscv_vec add_riscv.c + $(CC) $(CFLAGS_VEC) -S -o add_riscv_vec.s add_riscv.c + +# Clean up +clean: + rm -f add_riscv add_riscv_vec add_riscv.s add_riscv_vec.s + +.PHONY: all clean \ No newline at end of file diff --git a/examples/add/add_riscv.c b/examples/add/add_riscv.c new file mode 100644 index 0000000..e584767 --- /dev/null +++ b/examples/add/add_riscv.c @@ -0,0 +1,54 @@ +// Vector add benchmark for RISC-V testing +// a[i] = b[i] + c[i] + +#include +#include + +#define DTYPE double + +void kernel(DTYPE* a, DTYPE* b, DTYPE* c, const int size) +{ + // OSACA start marker will be added around this loop + for(int i=0; i 1) { + size = atoi(argv[1]); + } + + printf("RISC-V Vector add: a[i] = b[i] + c[i], size=%d\n", size); + + // Allocate memory + DTYPE* a = (DTYPE*)malloc(size * sizeof(DTYPE)); + DTYPE* b = (DTYPE*)malloc(size * sizeof(DTYPE)); + DTYPE* c = (DTYPE*)malloc(size * sizeof(DTYPE)); + + // Initialize arrays + for(int i=0; i +#include + +#define DTYPE double + +void kernel(DTYPE* a, DTYPE* b, DTYPE* c, const DTYPE s, const int size) +{ + // OSACA start marker will be added around this loop + for(int i=0; i 1) { + size = atoi(argv[1]); + } + + printf("RISC-V STREAM triad: a[i] = b[i] + s * c[i], size=%d\n", size); + + // Allocate memory + DTYPE* a = (DTYPE*)malloc(size * sizeof(DTYPE)); + DTYPE* b = (DTYPE*)malloc(size * sizeof(DTYPE)); + DTYPE* c = (DTYPE*)malloc(size * sizeof(DTYPE)); + + // Initialize arrays + for(int i=0; i