RISC-V 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 git@github.com: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
工具链的外网下载问题可以通过国内的码云(Gitee)镜像来解决,细节可以参考我的另一篇博客:利用码云镜像快速拉取riscv-gnu-toolchain工具链
如果之前安装过不含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<n; i++) y[i] = a * x[i] + y[i];# }
#
# register arguments:
# a0 n
# fa0 a
# a1 x
# a2 y .global saxpy
saxpy:
vsetvli a4, a0, e32, m8
vlw.v v0, (a1)
sub a0, a0, a4
slli a4, a4, 2
add a1, a1, a4
vlw.v v8, (a2)
vfmacc.vf v8, fa0, v0
vsw.v v8, (a2)
add a2, a2, a4
bnez a0, saxpy
ret
用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 <stddef.h>
#include<stdio.h>
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 git@github.com: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 git@github.com: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拓展的官方说明地址(draft):https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc
RISC-V V拓展的实验测试相关推荐
- 先睹为快 | 卓越示范中心 ETB003 云原生安全实验测试床
当前,我国数字化发展步伐不断加快,数字技术在全社会各行业融合应用持续深化,以容器.微服务.Serverless为代表的云原生技术凭借其快速部署.弹性.可扩展性等特性,成为数字经济与实体经济深度融合过程 ...
- MicroBlaze:Xilinx官方软核学习与一些实验测试
目录 一.引言 二.HelloWorld实验 三.AXI_GPIO实验 四.一些注意 一.引言 1.MicroBlaze简介. 用于做嵌入式处理操作的软核,来加速系统设计.与传统独立CPU相比,软核嵌 ...
- 在一台物理服务器上搭建VSAN实验测试
在一台物理服务器上搭建VSAN实验测试 https://blog.51cto.com/4964151/2333749 VSAN要求: 1.至少3台以上的vSphere ESXi 主机 2.每台主机需要 ...
- MPLS ××× 基本实验测试
MPLS ××× 基本实验测试 实验拓扑如下图所示 这次我们我测试的是3层的mpls *** R1和R5模拟同一公司的总部和分部,R6和R7模拟另一公司的总部和分部,中间的R2,R3和R4模拟运营商的 ...
- 关于星巴克推广活动的实验测试
项目源码链接:Github Repo ## 下载源码,请使用以下命令在你的本地上克隆repogit init git clone [项目源码链接] 背景信息 该项目将提供一个数据集,星巴克原先使用该数 ...
- 螺栓与螺栓组联接实验测试分析装置,QY-JXSX26
螺栓组联接结构设计的主要目的,在于合理地确定联接接合面的几何形状和螺栓的布置形式,力求各螺栓和联接接合面间受力均匀,便于加工和装配.为此,设计时应综合考虑以下几方面的问题: 1)联接接合面的几何形状通 ...
- L3级自动驾驶接管实验测试平台及其应用研究
来源:北京交通工程学会 01 前言 北京工业大学驾驶行为实验室赵晓华教授带领团队完成基于驾驶模拟技术的L3级自动驾驶接管实验测试.团队面向驾驶人和自动驾驶车辆提出自动驾驶接管实验测试研究框架,基于驾驶 ...
- v+=e不等于v=v+e
当v有副作用时,其实v+=e不等于v=v+e 计算v+=e只会求一次v的值,而计算v=v+e则会求两次v的值.在后一种情况下,对v求值可能引起的任何副作用也都会出现两次. a[i++] += 2; ...
- 联合体(共同体)union V{...}v;
void test () { union V { struct X { unsigned char s1:2; // :2 指 占两个字符? 是两个bit.若是int 占多少? unsi ...
最新文章
- 社团部部长工作计划计算机学院,社团部部长工作计划(共8篇).doc
- 机器学习(MACHINE LEARNING)种群竞争模型
- jetty 添加basic auth
- 为什么Redis是单线程?为什么能处理大并发量?(举例不错)
- java如何保证mq一定被消费_消费端如何保证消息队列MQ的有序消费
- Apache VFS:基本介绍
- 一天掌握Android JNI本地编程 快速入门
- java空心菱形_java 空心菱形
- javascript “||”、“”的运用
- 【kafka】kafka 时间轮 TimingWheel
- Cookie,Session解决用户的会话跟踪问题
- ArcGIS学习总结(四)——缓冲区分析应用
- python第三项开始每一项都等于前两项的积_Python二十九个常见的脚本汇总!
- Linux之shell命令
- 计算机技术与软件专业技术资格 (水平) 考试 - 报考指南
- Fantastic-Matplotlib 第一回
- Linux即时通讯软件都有哪些?政企要怎么挑选?
- 人类小行星探测任务回顾
- 字节跳动面试总结-3.18
- sqlmap详细教程