How to use RISCV RVV in Gem5? #523
-
Currently I have been working with Gem5 for months. And now I want to use the support for RVV in RISCV isa after finding it in branch . I'm confused if I want to run some instructions like 512b SIMD to support 8 64b compute, what should I do with Gem5, and how to construct the binary which will be compiled into RVV instructions. Are there any test tutorials? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 2 replies
-
Hi there, OS support and compiler support for RVV are rather new so unfortunately, there are not many tutorials that I can refer to. Though, here are roughly the steps needed to be done to use RVV with gem5. Here are a few pointers on how to compiling RISC-V binaries with RVV instructions,
docker run -u $UID:$GID --volume $PWD:/workdir -w /workdir --rm -it gem5/llvm-rv64gcv
(docker) /riscv/_install/bin/clang++ rvv_test.cpp -o rvv_test.bin -O2 -march=rv64gcv -menable-experimental-extensions -mllvm --riscv-v-vector-bits-min=128 -mno-relax -static You can add more flags to the compilation command. It is important to use the
(docker) /riscv/_install/bin/riscv64-unknown-linux-gnu-objdump -D -j.text rvv_test.bin | grep -i "vset" If you binary has vector instructions, it should show some vsetvli instructions like this, 2a: 0d9076d7 vsetvli a3,zero,e64,m2,ta,ma
86: 0d907757 vsetvli a4,zero,e64,m2,ta,ma
f0: 0d907757 vsetvli a4,zero,e64,m2,ta,ma Here are a few pointers on how to use the binary with gem5 SE mode,
scons build/RISCV/gem5.opt -j`nproc`
# Copyright (c) 2023 The Regents of the University of California
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
Usage: ./build/RISCV/gem5.opt rvv_test.py
"""
import m5
from m5.objects import Root
from gem5.utils.requires import requires
from gem5.components.boards.simple_board import SimpleBoard
from gem5.components.memory import DualChannelDDR4_2400
from gem5.components.processors.simple_processor import SimpleProcessor
from gem5.components.processors.cpu_types import CPUTypes
from gem5.isas import ISA
from gem5.simulate.simulator import Simulator
from gem5.resources.resource import obtain_resource, FileResource
from gem5.components.cachehierarchies.classic.private_l1_private_l2_cache_hierarchy import (
PrivateL1PrivateL2CacheHierarchy,
)
requires(isa_required=ISA.RISCV)
cache_hierarchy = PrivateL1PrivateL2CacheHierarchy(
l1d_size="16kB", l1i_size="16kB", l2_size="256kB"
)
memory = DualChannelDDR4_2400(size="3GB")
processor = SimpleProcessor(
cpu_type=CPUTypes.TIMING, isa=ISA.RISCV, num_cores=2
)
board = SimpleBoard(
clk_freq="3GHz",
processor=processor,
memory=memory,
cache_hierarchy=cache_hierarchy,
)
board.set_se_binary_workload(
FileResource("rvv_test.bin"),
arguments = [] # add arguments here if the binary requires arguments
)
simulator = Simulator(board=board)
simulator.run()
for core in processor.cores:
core.core.isa[0].vlen = 512 You should also check the
RVV in FS mode.
gem5 should be able to support RVV instructions in FS mode from the v23.1.0.0 release. You can start from this configuration to run an example of running OpenSBI+Linux+Ubuntu20.04 in gem5. The |
Beta Was this translation helpful? Give feedback.
Hi there, OS support and compiler support for RVV are rather new so unfortunately, there are not many tutorials that I can refer to. Though, here are roughly the steps needed to be done to use RVV with gem5.
Here are a few pointers on how to compiling RISC-V binaries with RVV instructions,