RISC-Vのベクトルテストケースを試したくて、簡単なテストを探している。rvv-intrinsic-doc をチェックしている。
https://github.com/riscv-non-isa/rvv-intrinsic-doc
テストケースを試すためには、intrinsicをサポートしたGNU Toolchainを構築しなければならない。
git clone https://github.com/riscv-collab/riscv-gnu-toolchain.git -b rvv-next --depth 1 rvv-next cd rvv-next ./configure --prefix=${HOME}/riscv-rvvnext make -j10
このツールチェインを用いて、intrinsicのテストプログラムをコンパイルする。
BINARIES = \ rvv_branch.riscv \ rvv_index.riscv \ rvv_matmul.riscv \ rvv_memcpy.riscv \ rvv_reduce.riscv \ rvv_saxpy.riscv \ rvv_sgemm.riscv \ rvv_strcmp.riscv \ rvv_strcpy.riscv \ rvv_strlen.riscv \ rvv_strncpy.riscv SPIKE_LOG = $(subst .riscv,.spike,$(BINARIES)) all: $(BINARIES) $(MAKE) $(SPIKE_LOG) %.riscv: %.c riscv64-unknown-elf-gcc -march=rv64gcv -O3 $^ -o $@ %.spike: %.riscv spike --isa=rv64gcv pk $^
一つ、テストパタンを変更する必要がある。
diff --git a/examples/rvv_reduce.c b/examples/rvv_reduce.c index d42837b..68e9758 100644 --- a/examples/rvv_reduce.c +++ b/examples/rvv_reduce.c @@ -34,7 +34,7 @@ void reduce(double *a, double *b, double *result_sum, int *result_count, vbool64_t mask = vmfne_vv_f64m1_b64(vec_a, vec_zero, vl); vec_s = vfmacc_vv_f64m1_m(mask, vec_s, vec_a, vec_b, vl); - count = count + vpopc_m_b64(mask, vl); + count = count + vcpop_m_b64(mask, vl); } vfloat64m1_t vec_sum; vec_sum = vfredusum_vs_f64m1_f64m1(vec_zero, vec_s, vec_zero, vlmax);
これでテストパタンを実行する。
make riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_branch.c -o rvv_branch.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_index.c -o rvv_index.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_matmul.c -o rvv_matmul.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_memcpy.c -o rvv_memcpy.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_reduce.c -o rvv_reduce.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_saxpy.c -o rvv_saxpy.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_sgemm.c -o rvv_sgemm.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_strcmp.c -o rvv_strcmp.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_strcpy.c -o rvv_strcpy.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_strlen.c -o rvv_strlen.riscv riscv64-unknown-elf-gcc -march=rv64gcv -O3 rvv_strncpy.c -o rvv_strncpy.riscv make rvv_branch.spike rvv_index.spike rvv_matmul.spike rvv_memcpy.spike rvv_reduce.spike rvv_saxpy.spike rvv_sgemm.spike rvv_strcmp.spike rvv_strcpy.spike rvv_strlen.spike rvv_strncpy.spike make[1]: Entering directory '/home/msyksphinz/work/riscv/rvv-intrinsic-doc/examples' spike --isa=rv64gcv pk rvv_branch.riscv bbl loader pass spike --isa=rv64gcv pk rvv_index.riscv bbl loader pass spike --isa=rv64gcv pk rvv_matmul.riscv bbl loader pass spike --isa=rv64gcv pk rvv_memcpy.riscv bbl loader pass spike --isa=rv64gcv pk rvv_reduce.riscv bbl loader pass spike --isa=rv64gcv pk rvv_saxpy.riscv bbl loader passed spike --isa=rv64gcv pk rvv_sgemm.riscv bbl loader passed spike --isa=rv64gcv pk rvv_strcmp.riscv bbl loader pass spike --isa=rv64gcv pk rvv_strcpy.riscv bbl loader pass spike --isa=rv64gcv pk rvv_strlen.riscv bbl loader pass spike --isa=rv64gcv pk rvv_strncpy.riscv bbl loader pass