IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> RISC-V “V” 拓展—1.0版本环境搭建与测试 -> 正文阅读

[Python知识库]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<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,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 <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;

}

保存

执行指令: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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:48:38  更:2021-10-01 16:50:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 5:53:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计