FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

XuantieのRISC-V Vector向けリポジトリを試す (OpenBLASをベアメタルで動かす試行1)

OpenBLASのコンパイルをベアメタルで実行したいのだが、かなり壁があるようだ。メモリアクセスに関する関数がベアメタルだと上手く行かないので、その辺を何とかごまかす必要がある。

Pthreadのサポートなども使えないので、その辺を取り除いて試行しているが、まだ上手く行かない。

diff --git a/Makefile.prebuild b/Makefile.prebuild
index d6395da7..e774625b 100644
--- a/Makefile.prebuild
+++ b/Makefile.prebuild
@@ -42,7 +42,7 @@ TARGET_FLAGS = -mips64r6
 endif

 ifeq ($(TARGET), C910V)
-TARGET_FLAGS = -march=rv64gcvxthead -mabi=lp64v
+TARGET_FLAGS = -march=rv64gcvxthead -mabi=lp64
 endif

 all: getarch_2nd
diff --git a/Makefile.riscv64 b/Makefile.riscv64
index 15d7b059..6c3bacbd 100644
--- a/Makefile.riscv64
+++ b/Makefile.riscv64
@@ -1,4 +1,4 @@
 ifeq ($(CORE), C910V)
-CCOMMON_OPT += -march=rv64gcvxthead -mabi=lp64v
-FCOMMON_OPT += -march=rv64gcvxthead -mabi=lp64v -static
+CCOMMON_OPT += -march=rv64gcv -mabi=lp64
+FCOMMON_OPT += -march=rv64gcv -mabi=lp64 -static
 endif
diff --git a/common.h b/common.h
index 2825407c..c6e353cb 100644
--- a/common.h
+++ b/common.h
@@ -123,9 +123,9 @@ extern "C" {
 #undef  GOTO_ATOM
 #endif
 #else
-#include <sys/mman.h>
+    // #include <sys/mman.h>
 #ifndef NO_SYSV_IPC
-#include <sys/shm.h>
+    // #include <sys/shm.h>
 #endif
 #include <sys/time.h>
 #include <time.h>

メモリアクセス関連のインクルードファイルをひたすら取り除く。最終的にmemory.cのコンパイルを止めた。

diff --git a/driver/others/Makefile b/driver/others/Makefile
index d09444f5..250ee444 100644
--- a/driver/others/Makefile
+++ b/driver/others/Makefile
@@ -1,7 +1,7 @@
 TOPDIR = ../..
 include ../../Makefile.system

-COMMONOBJS      = memory.$(SUFFIX) xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_num_threads.$(SUFFIX) openblas_get_num_procs.$(SUFFIX) openblas_get_config.$(SUFFIX) openblas_get_parallel.$(SUFFIX) openblas_error_handle.$(SUFFIX) openblas_env.$(SUFFIX)
+COMMONOBJS      = xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_num_threads.$(SUFFIX) openblas_get_num_procs.$(SUFFIX) openblas_get_config.$(SUFFIX) openblas_get_parallel.$(SUFFIX) openblas_error_handle.$(SUFFIX) openblas_env.$(SUFFIX)

 #COMMONOBJS    += slamch.$(SUFFIX) slamc3.$(SUFFIX) dlamch.$(SUFFIX)  dlamc3.$(SUFFIX)

これでもまだリンクに到達できない。ベアメタルのRISC-Vコンパイラではベクトル系のマクロが登録されていないため、エラーとなってしまっている。

../kernel/riscv64/amax_vector.c: In function 'samax_k':
../kernel/riscv64/amax_vector.c:34:19: error: unknown type name 'float32xm8_t'
   34 | #define FLOAT_V_T float32xm8_t
      |                   ^~~~~~~~~~~~
../kernel/riscv64/amax_vector.c:64:9: note: in expansion of macro 'FLOAT_V_T'
   64 |         FLOAT_V_T v0, v1, v_max;
      |         ^~~~~~~~~
../kernel/riscv64/amax_vector.c:38:16: error: unknown type name 'e32xm8_t'
   38 | #define MASK_T e32xm8_t
      |                ^~~~~~~~
../kernel/riscv64/amax_vector.c:66:9: note: in expansion of macro 'MASK_T'
   66 |         MASK_T mask0, mask1;
      |         ^~~~~~
../kernel/riscv64/amax_vector.c:69:23: warning: implicit declaration of function 'vsetvli' [-Wimplicit-function-declaration]
   69 |                 gvl = vsetvli(n, RVV_EFLOAT, RVV_M);
      |                       ^~~~~~~
../kernel/riscv64/amax_vector.c:32:20: error: 'RVV_E32' undeclared (first use in this function); did you mean 'RVV_M'?
   32 | #define RVV_EFLOAT RVV_E32
      |                    ^~~~~~~
../kernel/riscv64/amax_vector.c:69:34: note: in expansion of macro 'RVV_EFLOAT'
   69 |                 gvl = vsetvli(n, RVV_EFLOAT, RVV_M);
      |                                  ^~~~~~~~~~
../kernel/riscv64/amax_vector.c:32:20: note: each undeclared identifier is reported only once for each function it appears in
   32 | #define RVV_EFLOAT RVV_E32
      |                    ^~~~~~~
../kernel/riscv64/amax_vector.c:69:34: note: in expansion of macro 'RVV_EFLOAT'
   69 |                 gvl = vsetvli(n, RVV_EFLOAT, RVV_M);
      |                                  ^~~~~~~~~~
../kernel/riscv64/iamax_vector.c: In function 'isamax_k':
../kernel/riscv64/iamax_vector.c:59:19: error: unknown type name 'float32xm8_t'