栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

RISC-V “V” 拓展—1.0版本环境搭建与测试

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RISC-V “V” 拓展—1.0版本环境搭建与测试

声明:RISCV具有多元、包容、普惠、开源的特点。作者本着RISC-V的特点,同意本内容允许任意转载,转载若修改,请先联系下面邮箱,本篇文章参考了很多方法,最下面有参考内容的链接,认为有侵权的地方,请联系,随时删。发本篇文章旨在帮助更多研究RISCV向量拓展的小白,内容写的比较白话,有需要的仔细阅读,看不懂的或者发现错误,欢迎发邮件至1416024711@qq.com。

下面是针对rvv1.0工具链安装的流程,中间踩了很多坑,按下面的方法完成了RISCV “V”拓展的环境搭建(针对1.0版本),ubuntu是20.04版本。Ubuntu我分配了16G内存,100G磁盘,如果内存太小在make的时候肯定会失败。

Ubuntu首先安装依赖:

apt-get  install git build-essential tcl expect flex texinfo bison libpixman-1-dev libglib2.0-dev pkg-config zlib1g-dev ninja-build autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk  gperf libtool patchutils bc  libexpat-dev python

第一步:因为网速的限制,又不能翻墙,所以我把本框的指令写进脚本,在华为云服务器上面跑了一遍下面的脚本,旨在下载riscv-gnu-toolchain所需要的模块(如果自己的网速不好,又没有其他服务器可用,可以联系上面邮箱,免费提供我已经下载好的,第一步就省去了),这一步消耗时间比较长。但是只要能下载下来各模块慢点也是可以的。

1首先在华为云服务器上新建目录RISCV(自己网速理想的可以直接在ubuntu里面进行,顺序都是一样的)

cd  RISCV  //打开该目录

2 在RISCV目录里跑脚本install.sh  //install.sh里面的内容就是本框的蓝色字体(如果你发现你的脚本无法执行,有可能是脚本执行权限没有修改,修改权限指令:chmod 754 install.sh,再次尝试,应该就可以了)

install.sh里面的内容:

#get source

git clone https://github.com/riscv/riscv-gnu-toolchain

cd riscv-gnu-toolchain

git submodule update --init

cd riscv-gcc

git fetch origin

git checkout origin/riscv-gcc-10.1-rvv-dev

cd ../riscv-binutils

git fetch origin

git checkout origin/rvv-1.0.x-zfh

cd ..

3 脚本跑结束,会在RISCV目录里看到riscv-gnu-toolchain目录,到此处第一步就完成了

第二步,因为我要在ubuntu20.04里面(下面简称ubuntu)安装工具链,所以我将上一步的整个RISCV目录从华为云服务器复制进了Ubuntu里面。(因为文件太大,建议先将华为服务器中的RISCV目录压缩,等放进ubuntu中之后再解压缩)

下面的步骤都是在ubuntu中进行

# make rv64  //安装rv64的

1 cd RISCV/riscv-gnu-toolchain  //进入目录

2 执行指令:./configure --prefix="$PWD/opt-riscv-rv64/" --with-arch=rv64gcv --with-abi=lp64d --with-multilib-generator="rv64gcv-lp64d--"

3执行指令:make -j $(nproc)  //如果make -j $(nproc) 失败,试试执行make -j 1,如果失败一般是内存的问题,这一步需要很大的内存,我给Ubuntu分配了16G,这一步执行完就执行结束了。安装完成。打开RISCV/riscv-gnu-toolchain/opt-riscv-rv64/bin目录就可以看到我们编译需要的工具,如下图

最后设置环境变量:

4 vim ~/.bashrc

进入之后在最下面添加两行:

5 export RISCV="/home/lifei/RISCV/riscv-gnu-toolchain/opt-riscv-rv64" 

   export PATH=$PATH:$RISCV/bin

//home/lifei/RISCV/riscv-gnu-toolchain/opt-riscv-rv64是我的路径,你自己的查看一下,在opt-riscv-rv64目录下输入pwd将显示出的路径就是你的,复制进去就行了。后面应该都是一样的,就/home/life/可能不一样。

保存退出

6 source ~/.bashrc  //使之生效,至此riscv-gnu-toolchain全部0k

下面的指令可以不执行,直接进入第三步。

# test rv64 //测试验证

make report-gcc-newlib -j $(nproc)  //可以不执行

make report-binutils-newlib -j $(nproc)  //可以不执行

安装32位的,和安装64位的一样,不再赘述,若不需要可以忽略。

# make rv32

make clean

./configure --prefix="$PWD/opt-riscv-rv32/" --with-arch=rv32gcv --with-abi=ilp32d --with-multilib-generator="rv32gcv-ilp32d--"

make -j $(nproc)

make report-gcc-newlib -j $(nproc)

make report-binutils-newlib -j $(nproc)

第三步:安装spike

进spike链接下载压缩包https://github.com/riscv/riscv-isa-sim.git    //网速不好,下载压缩包

将下载好的压缩包放进ubuntu的RISCV目录里,进行解压缩。解压缩之后按下面进行。

cd RISCV

RISCV$ cd riscv-isa-sim-master

riscv-isa-sim$ mkdir build

riscv-isa-sim$ cd build

build$ ../configure --prefix=$RISCV/newlib  #linux版为$RISCV/linux

build$ make -j $(nproc)  //如果失败,尝试执行 make -j 1

build$ make install  //如果失败,尝试 sudo make install

上面执行完spike就安装完成了,进入目录/home/lifei/RISCV/riscv-isa-sim-master/newlib/bin就可以看到如下图一样。

设置环境变量

vim ~/.bashrc

进入之后在最下面添加两行:

export SPIKE="/home/lifei/RISCV/riscv-isa-sim-master/newlib" //路径写自己的,参考上面。

export PATH=$SPIKE/bin:$PATH

保存退出

source ~/.bashrc  //使之生效,至此spike全部0k

第四步:安装pk

进pk链接https://github.com/riscv/riscv-pk.git 下载压缩包   //网速不好,下载压缩包

将下载好的压缩包放进ubuntu的RISCV目录里,进行解压缩。解压缩之后按下面进行。

cd RISCV

RISCV$ cd riscv-pk-master

riscv-pk$ mkdir -p build/newlib

riscv-pk$ cd build/newlib

newlib$ ../../configure --prefix=$RISCV/newlib --host=riscv64-unknown-elf #linux版为$RISCV/linux/bin/riscv64-unknown-linux

newlib$ make -j $(nproc)  //如果失败试试 make -j 1

newlib$ make install //如果失败试试sudo make install

进入RISCV/riscv-pk-master/newlib/riscv64-unknown-elf/bin里面就可以看到pk的文件

不用添加环境变量,至此pk安装ok

第五步:测试(测试参考了下面的声明链接,只将v_test.s 里面的向量指令修改成了0.10版本对应的指令)

在桌面上新建v_test.s文件里面的内容为

#void

#saxpy(size_t n, const float a, const float *x, float *y)

# {

#       size_t i;

#       for (i=0; i

# }

#  register arguments:

#      a0      n

#      fa0     a

#      a1      x

#      a2      y

.global saxpy

saxpy:

        vsetvli a4, a0, e32, m8,ta,ma

        vle32.v v0, (a1)

        sub a0, a0, a4

        slli a4, a4, 2

        add a1, a1, a4

        vle32.v v8, (a2)

        vfmacc.vf v8, fa0, v0

        vse32.v v8, (a2)

        add a2, a2, a4

        bnez a0, saxpy

        ret

保存

在桌面目录执行指令:riscv64-unknown-elf-as -march=rv64gcv --mabi=lp64d v_test.s -o v_test.o

会在桌面上看到生成的v_test.o文件

然后新建callsaxpy.c内容为:

#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

                printf("%fn", array2[i]);

        }

        printf("----------------n");

        //调用saxpy函数

        saxpy(size,a,array1,array2);

        for(int i =0;i

                printf("%fn", array2[i]);

        }

        return 0;

}

保存

执行指令:riscv64-unknown-elf-gcc -c callsaxpy.c -o callsaxpy.o

会在桌面上看到生成的callsaxpy.o文件

接着在桌面目录下执行:riscv64-unknown-elf-gcc -static v_test.o callsaxpy.o -o out

在桌面会看到生成的out可执行文件

最后:进入显示右边内容的目录

在此目录下执行:spike --isa=RV64GCV pk ../../../../../Desktop/out   //其实就是pk桌面目录的out文件

可以看到输出:

完成,测试证明支持rvv1.0版本指令。

参考链接:

https://github.com/sunshaoce/learning-riscv/blob/b5e2d024dde351e642ae359799853bf7119f6b96/2/2.md

https://github.com/mollybuild/RISCV-Measurement/blob/master/run-riscv-gnu-toolchain-testsuite-for-BKV-extension.md

https://blog.csdn.net/ALLap97/article/details/106246395?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-8.control&dist_request_id=1328641.26139.16156374009989455&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-8.control

https://github.com/plctlab/riscv-ci/blob/main/gnu-toolchan-rvv-1.0.sh

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/280279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号