Riscv-V拓展的实验测试

目录

  • 实验测试环境说明
    • 工具链:riscv-gnu-toolchain rvv-0.8分支
    • 测试环境:spike(riscv ISA的模拟器) + pk(一个代理内核)
  • 工具链安装与测试
    • 测试文件:saxpy.s
    • 主文件:callsaxpy.c
    • 链接->out
  • spike安装
  • pk安装
  • 测试而执行二进制文件out
    • 测试结果:

实验测试环境说明

工具链:riscv-gnu-toolchain rvv-0.8分支

(由于RV-V拓展目前仍处于draft状态,该分支针对的0.8版的标准)
地址:https://github.com/riscv/riscv-gnu-toolchain/tree/rvv-0.8.x
用途:用于生成含RV-V拓展的二进制文件


测试环境:spike(riscv ISA的模拟器) + pk(一个代理内核)

spike地址:https://github.com/riscv/riscv-isa-sim
pk地址:https://github.com/riscv/riscv-pk
用途:测试运行含RV-V拓展的二进制文件


工具链安装与测试

#拉分支代码(需要科学上网,不然拉的很慢)
git clone -b rvv-0.8 [email protected]:riscv/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
git submodule update --init --recursive

#安装环境依赖
sudo apt-get install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

#设置RISCV环境变量并编译
mkdir build && cd build
export RISCV=/path/to/install
../configure --prefix=$RISCV
make linux
make install

如果之前安装过不含V拓展的riscv-gnu-toolchain工具链(即主分支),建议把之前的工具链的环境变量先去掉,否则可能编译失败(因为含V拓展的工具链名字一样,会冲突)。

同时该工具链目前只支持将含V拓展的汇编文件(.s)转化为二进制文件(.o)。

测试文件:saxpy.s

# void 
# saxpy(size_t n, const float a, const float *x, float *y) 
# { 
#    	size_t i;
#   	for (i=0; i

用as工具将汇编转化为可重定位的二进制文件(saxpy.o)
(注意添加参数-march制定使用的ISA,如rv64gv,其中64代表64位指令,G为general 包括IMAFD拓展的指令,v代表v拓展指令(默认是不包含v拓展指令的。))

riscv64-unknown-linux-gnu-as -march=rv64gcv --mabi=lp64d saxpy.s  -o saxpy.o

主文件:callsaxpy.c

加一个主文件去调用saxpy函数

#include 
#include
extern void  saxpy(size_t n, const float a, const float *x, float *y); 

int main(){
     
	size_t size=3;
	const float a=1.0;
	const float array1[]={
     1.0,2.0,3.0};
	float array2[]={
     1.0,2.0,3.0};
	for(int i =0;i<size;i++){
     
		printf("%f\n", array2[i]);
	}
	printf("----------------\n");
	//调用saxpy函数
	saxpy(size,a,array1,array2);
	
	for(int i =0;i<size;i++){
     
		printf("%f\n", array2[i]);
	}
	return 0;
}

链接->out

进行链接得到可执行二进制文件out

#将callsaxpy.c转化为可重定位的二进制文件
riscv64-unknown-linux-gnu-gcc  -c callsaxpy.c -o callsaxpy.o
#注意要静态链接(spike+pk目前仅支持运行静态链接的二进制文件)
riscv64-unknown-linux-gnu-gcc -static saxpy.o callsaxpy.o -o out

spike安装

($RISCV为上一步设置的RISCV环境变量)

git clone [email protected]:riscv/riscv-isa-sim.git
apt-get install device-tree-compiler
mkdir build
cd build
../configure --prefix=$RISCV
make
[sudo] make install

pk安装

($RISCV为上上步设置的RISCV环境变量)

git clone [email protected]:riscv/riscv-pk.git
mkdir build
cd build
../configure --prefix=$RISCV --host=riscv64-unknown-elf
make
[sudo] make install

测试而执行二进制文件out

spike --isa=RV64GCV pk out
#--isa指定使用的isa,默认是不带有V拓展的

测试结果:

Riscv-V拓展的实验测试_第1张图片

riscv-v拓展的官方说明地址(draft):https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc

你可能感兴趣的:(RISCV)