FPGA開発日記

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

Gem5のインストール試行とベンチマーク実行 (ベクトル命令実行試行)

Gem5のサイクルモードについて基本をつかんだので、次は問題となるベクトル命令を動かしてみたい。ユーザモードで以下のようなmemcpyのコードを含む プログラムをコンパイルして、main()で囲んで実行してみた。

    .text
    .global     copy_data_vec
# void copy_data_vec(int8_t *dest_data, int8_t *source_data, int data_num);
# a0=dest, a1=src, a2=n
#
copy_data_vec:
    mv      a3, a0          # Copy destination
.loop:
    vsetvli t0, a3, e8,m1   # Vectors of 8b
    vle8.v  v0, (a1)        # Load bytes
    add     a1, a1, t0          # Bump pointer
    sub     a2, a2, t0          # Decrement count
    vse8.v  v0, (a3)            # Store bytes
    add     a3, a3, t0          # Bump pointer
    bnez    a2, .loop           # Any more?
    ret                         # Return


    .global     copy_data_mask_vec
# void copy_data_mask_vec(int8_t *dest_data, int8_t *source_data, int8_t *mask, int data_num);
# a0=dest, a1=src, a2=n
#
copy_data_mask_vec:
    li      t1, 8           # calculate element length of mask, VLEN=512 / ELEN=8 / 8-bit
_loop:
    vsetvli t0, t1, e8,m1   # Vectors of 8b
    vle8.v  v0, (a2)
    add     a2, a2, t0

    vsetvli t0, a3, e8,m1   # Vectors of 8b
    vle8.v  v1, (a1), v0.t  # Load bytes
    add     a1, a1, t0          # Bump pointer
    sub     a3, a3, t0          # Decrement count
    vse8.v  v1, (a0), v0.t      # Store bytes
    add     a0, a0, t0          # Bump pointer
    bnez    a3, _loop           # Any more?
    ret                         # Return

結果は以下の通りだ。やはりだめらしい。

./build/RISCV/gem5.debug --debug-flags=O3PipeView --debug-file=printf.out configs/example/se.py --cpu-type=DerivO3CPU --caches -c /home/msyksphinz/work/gem5/gem5_test/memcpy_vector/memcpy_vector
build/RISCV/sim/simulate.cc:194: info: Entering event queue @ 0.  Starting simulation...
build/RISCV/sim/mem_state.cc:443: info: Increasing stack size by one page.
build/RISCV/sim/syscall_emul.cc:74: warn: ignoring syscall mprotect(...)
build/RISCV/arch/riscv/faults.cc:188: panic: Unknown instruction 0x0006f2d7 at pc (0x10922=>0x10926).(0=>1)
Memory Usage: 640732 KBytes
Program aborted at tick 11481000
--- BEGIN LIBC BACKTRACE ---
./build/RISCV/gem5.debug(+0x62dfa1)[0x564cbad08fa1]
./build/RISCV/gem5.debug(+0x6563c2)[0x564cbad313c2]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x14420)[0x7fc896ac1420]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7fc89606300b]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7fc896042859]