FPGA開発日記

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

GAP BenchmarkのRISC-V環境でのコンパイル方法

gap.cs.berkeley.edu

github.com

RISC-V でのGAP Benchmark Suiteのコンパイル方法

RISC-V向けにコンパイルするためには、コンパイルオプションを以下のように変更する。

$ CXX=riscv64-unknown-elf-g++ make PAR_FLAG=

ただし、Spikeで実行しようとするとどこかでbad_allocが発生した。おそらくメモリの確保量が足りない。

Clang++でのコンパイル方法は以下のようにコンパイルオプションを変更する。

clang++ --target=riscv64-unknown-elf \
    -march=rv64gcv \
    --sysroot=/riscv/riscv64-unknown-elf/ \
    --gcc-toolchain=/riscv/ src/bfs.cc -o bfs
CXX=clang++ make PAR_FLAG= -j$(nproc)
clang++ --target=riscv64 -menable-experimental-extensions -O3 -march=rv64gcv -mllvm -scalable-vectorization=on --sysroot=/riscv//riscv64-unknown-elf --gcc-toolchain=/riscv/ -std=c++11 -O3 -Wall  src/cc.cc -o cc
clang++ --target=riscv64 -menable-experimental-extensions -O3 -march=rv64gcv -mllvm -scalable-vectorization=on --sysroot=/riscv//riscv64-unknown-elf --gcc-toolchain=/riscv/ -std=c++11 -O3 -Wall  src/cc_sv.cc -o cc_sv
clang++ --target=riscv64 -menable-experimental-extensions -O3 -march=rv64gcv -mllvm -scalable-vectorization=on --sysroot=/riscv//riscv64-unknown-elf --gcc-toolchain=/riscv/ -std=c++11 -O3 -Wall  src/pr.cc -o pr
clang++ --target=riscv64 -menable-experimental-extensions -O3 -march=rv64gcv -mllvm -scalable-vectorization=on --sysroot=/riscv//riscv64-unknown-elf --gcc-toolchain=/riscv/ -std=c++11 -O3 -Wall  src/pr_spmv.cc -o pr_spmv
clang++ --target=riscv64 -menable-experimental-extensions -O3 -march=rv64gcv -mllvm -scalable-vectorization=on --sysroot=/riscv//riscv64-unknown-elf --gcc-toolchain=/riscv/ -std=c++11 -O3 -Wall  src/sssp.cc -o sssp
clang++ --target=riscv64 -menable-experimental-extensions -O3 -march=rv64gcv -mllvm -scalable-vectorization=on --sysroot=/riscv//riscv64-unknown-elf --gcc-toolchain=/riscv/ -std=c++11 -O3 -Wall  src/tc.cc -o tc

ベクトル命令は抽出できるかな?

   11308: b3 02 09 41   sub     t0, s2, a6
   1130c: d7 75 80 0d   vsetvli a1, zero, e64, m1, ta, ma
   11310: d7 64 04 42   vmv.s.x v9, s0
   11314: 93 95 06 02   slli    a1, a3, 32
   11318: 81 91         srli    a1, a1, 32
   1131a: 13 86 15 00   addi    a2, a1, 1
   1131e: 57 70 86 0d   vsetvli zero, a2, e64, m1, ta, ma
   11322: 57 c4 95 3a   vslideup.vx     v8, v9, a1
   11326: 93 85 88 00   addi    a1, a7, 8
   1132a: 93 d4 17 00   srli    s1, a5, 1
   1132e: 16 86         mv      a2, t0
   11330: 2a 87         mv      a4, a0
   11332: d7 34 80 9e   vmv1r.v v9, v8
   11336: 07 f4 85 02   vl1re64.v       v8, (a1)
   1133a: 57 f0 80 cd   vsetivli        zero, 1, e64, m1, ta, ma
   1133e: d7 c4 96 3e   vslidedown.vx   v9, v9, a3
   11342: 57 74 80 0d   vsetvli s0, zero, e64, m1, ta, ma
   11346: d7 b4 80 3a   vslideup.vi     v9, v8, 1
   1134a: 57 85 84 0a   vsub.vv v10, v8, v9
   1134e: 57 80 84 62   vmseq.vv        v0, v8, v9
   11352: 57 70 70 0d   vsetvli zero, zero, e32, mf2, ta, ma
   11356: d7 34 a1 b2   vnsrl.wi        v9, v10, 2
   1135a: d7 34 90 0e   vrsub.vi        v9, v9, 0
   1135e: d7 b4 9f 5c   vmerge.vim      v9, v9, -1, v0
   11362: a7 64 07 02   vse32.v v9, (a4)
   11366: be 95         add     a1, a1, a5
   11368: 33 06 66 40   sub     a2, a2, t1
   1136c: 26 97         add     a4, a4, s1
   1136e: 71 f2         bnez    a2, 0x11332 <_Z10InitParentRK8CSRGraphIiiLb1EE+0x7e>
   11370: 63 06 08 04   beqz    a6, 0x113bc <_Z10InitParentRK8CSRGraphIiiLb1EE+0x108>
   11374: 7d 33         addiw   t1, t1, -1
   11376: 02 13         slli    t1, t1, 32
   11378: 93 55 03 02   srli    a1, t1, 32
   1137c: 57 f0 80 cd   vsetivli        zero, 1, e64, m1, ta, ma
   11380: 57 c4 85 3e   vslidedown.vx   v8, v8, a1
   11384: 57 24 80 42   vmv.x.s s0, v8
   11388: 93 95 22 00   slli    a1, t0, 2

一応生成されているみたいだ。

msyksphinz.hatenablog.com