使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)
开发环境
PC:ubuntu18.04
Qemu:4.1
Kernel:Linux-5.2
概述
由于要学习ARM的SVE技术,但是目前还没有支持SVE指令的板子,所以只能用Qemu来模拟,但是发现Qemu在用户模式下无法设置SVE的位宽,在浏览ARM官网资料时发现,ARM提供了Arm Instruction Emulator(下载链接)可以用来模拟SVE指令,并且可以设置SVE位宽,遗憾的是该模拟器只能运行在AArch64机器上,并且提供了基于ubuntu16.04的安装包。所以,需要先在qemu上运行一个ubuntu系统,然后再在其中安装Arm Instruction Emulator。
正文
1、参考博客:使用Qemu运行Ubuntu文件系统(1)
2、参考博客:用Qemu搭建aarch64学习环境
3、参考博客:Qemu-4.1 桥接网络设置
4、参考博客:安装docker后,导致qemu的桥接网络出现问题
5、下面是与上面不同的地方
- 使用的是qemu-aarch64-static
- 下载的ubuntu镜像是:ubuntu-base-16.04.6-base-arm64.tar.gz
6、在运行时,使用如下命令:(下面用到的制作好的ubuntu16.04镜像可以到这里下载,用户名"pengdl",密码是一个空格)
sudo qemu-system-aarch64 \
-M virt \
-cpu cortex-a57 \
-smp \
-m 2048M \
-kernel ./linux-5.2/arch/arm64/boot/Image \
-nographic \
-append "noinitrd root=/dev/vda rootfstype=ext4 rw" \
-nic tap \
-fsdev local,security_model=passthrough,id=fsdev0,path=/nfsroot \
-device virtio-9p-pci,id=fs1,fsdev=fsdev0,mount_tag=hostshare \
-drive if=none,file=./ubuntu_rootfs/ubuntu.ext4,id=hd0 \
-device virtio-blk-device,drive=hd0
7、系统运行起来后,可以用使用串口或者telnet以普通用户登录虚拟机,然后再用mount -t nfs 或者 mount -t 9p的方式将Host上的目录挂载到虚拟机中,来安装ARMIE。
8、可以参考前一篇交叉编译支持SVE ACLE的gcc,对测试程序稍作修改,来看看修改SVE位宽的运行效果:
#include <stdlib.h>
#include <stdio.h>
#include <arm_sve.h> // Scalar version.
void add_arrays(double * restrict dst, double *src, double c, const int N) {
for (int i = ; i < N; i++)
dst[i] = src[i] + c;
} // Vector version
void vla_add_arrays(double * restrict dst, double *src, double c, const int N) {
int64_t i = ; svbool_t pg = svwhilelt_b64(i, (int64_t)N);
while (svptest_any(svptrue_b64(), pg)) {
svfloat64_t vsrc = svld1(pg, src + i);
svfloat64_t vdst = svadd_x(pg, vsrc, c);
svst1(pg, dst + i, vdst); i += svcntd();
pg = svwhilelt_b64(i, (int64_t)N);
printf("# %ld\n", i);
}
} // Vector version
void vla_add_arrays_2(double *dst, double *src, double c, const int N) {
for (int i = ; i < N; i += svcntd()) {
svbool_t Pg = svwhilelt_b64(i, N);
svfloat64_t vsrc = svld1(Pg, &src[i]);
svfloat64_t vdst = svadd_x(Pg, vsrc, c);
svst1(Pg, &dst[i], vdst);
printf("* %d\n", i);
}
} int main(void) {
double src[];
double c;
double dst_serial[], dst_vla[], dst_vla2[];
for (int i = ; i < ; ++i) {
src[i] = (double) i / ((double) i + );
} c = src[rand() % ]; add_arrays(dst_serial, src, c, );
vla_add_arrays(dst_vla, src, c, );
vla_add_arrays_2(dst_vla2, src, c, ); for (int i = ; i < ; ++i) {
printf("%f %f %f, %f, %f\n", dst_serial[i], dst_vla[i], dst_vla2[i], src[i], c);
}
return ;
}
运行时,可以设置不同的SVE位宽:
2048:
1024:
128:
完。
使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)的更多相关文章
- 使用Qemu运行Ubuntu文件系统(1)
参考 https://blog.csdn.net/mountzf/article/details/51707853 https://blog.csdn.net/stephen_lu_fahai/art ...
- 用Qemu搭建x86_64学习环境
作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linux内核 ...
- 用Qemu搭建x86学习环境
作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linux内核 ...
- 用Qemu搭建aarch32学习环境
作者信息 作者: 彭东林 邮箱: pengdonglin137@163.com QQ: 405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linu ...
- 基于Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度学习环境
基于Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度学习环境 前言一.环境准备环境介绍软件下载VMware下安装UbuntuUbuntu下Anaconda的安 ...
- ubuntu下搭建android开发环境之超顺畅模拟器
如果说android系统的卡,像耳边蚊子让人抓狂,那么android模拟器的卡,那就像午睡时的苍蝇.大概就是一样的恶心~~ 那么,这样的问题对于开发者肯定忍无可忍,我也一样,虽然我还没有入门,但我也一 ...
- 云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 (阿里云ECS服务器 )课堂
云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 1. 开通云服务器 2 1.包年包月 按量付费(适合测试数据的时候) 2 2.地域 服务器数 ...
- ubuntu16.04+七彩虹GTX1060的NVIDIA驱动+Cuda8.0+cudnn5.1+tensorflow+keras搭建深度学习环境【学习笔记】【原创】
平台信息:PC:ubuntu16.04.i5.七彩虹GTX1060显卡 作者:庄泽彬(欢迎转载,请注明作者) 说明:参考了网上的一堆的资料搭建了深度学习的开发环境,下班在宿舍折腾了好几个晚上才搞定,写 ...
- 教你如何用Docker快速搭建深度学习环境
本教程搭建集 Tensorflow.Keras.Coffe.PyTorch 等深度学习框架于一身的环境,及jupyter. 本教程使用nvidia-docker启动实例,通过本教程可以从一个全新的Ub ...
随机推荐
- 前端性能优化&&网站性能优化
加载优化:1.合并css.JavaScript 2.合并小图片,使用精灵图 3.缓存一切可缓存的资源 4.使用长cache 5.使用外联式引用css.JavaScript 6.压缩HTML.CSS.J ...
- Kubernetes 学习(八)Kubernetes 源码阅读之初级篇------源码及依赖下载
0. 前言 阅读了一段时间 Golang 开源代码,准备正式阅读 Kubernetes 项目代码(工作机 Golang 版本为 Go 1.12) 参照 <k8s 源码阅读> 选择 1.13 ...
- express常见获取参数的方法
1.req.query 处理get请求 // GET /search?q=tobi+ferret req.query.q // => "tobi ferret" // GET ...
- SpringBoot第八篇:整合MyBatis-Generator
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10894278.html 版权声明:本文为博主原创文章,转载请附上博文链接! 注意:本章有大量代码 ...
- Java中json使用与问题汇总
一.JSON 解析类库 FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀. 在maven项目的pom文件中以下依赖 <dependency> <groupId>c ...
- laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法
laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容. ...
- luogu P3853 [TJOI2007]路标设置 |二分
题目背景 B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离.为了便于研究这个问题,我们把公路上相邻路标的最大距离定 ...
- Java代码质量检查checkstyle, pmd, cpd, p3c,findbugs, jacoco, sonarquebe以及和Jenkins集成
概述 又搞一边质量扫描插件,之前做过一遍,然后后面各种忽略,然后就放弃了,所以,应该寻找一种方法,循序渐进的实施.本次将实施一个基本的打包扫描方案,包含 checkstyle 固定团队编码风格,固定命 ...
- AtomicReference示例
对引用类型的原子性操作 /** * *对引用变量的原子操作 note: *在java中对引用类型的变量,赋值是原子性的,为什么还要有atomicReference,假如要对一个引用类型进行比较,设置等 ...
- Rabbit MQ 学习参考
网上的教程虽然多,但是提供demo的比较少,或者没有详细的说明,因此,本人就照着网上的教程做了几个demo,并把代码托管在码云,供有需要的参考. 项目地址:https://gitee.com/dhcl ...