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
一応生成されているみたいだ。