使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)

时间:2022-08-24 08:41:21

开发环境

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

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:

使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)

1024:

使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)

128:

使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)

完。

使用Qemu运行Ubuntu文件系统 —— 搭建SVE学习环境(2)的更多相关文章

  1. 使用Qemu运行Ubuntu文件系统(1)

    参考 https://blog.csdn.net/mountzf/article/details/51707853 https://blog.csdn.net/stephen_lu_fahai/art ...

  2. 用Qemu搭建x86&lowbar;64学习环境

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linux内核 ...

  3. 用Qemu搭建x86学习环境

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linux内核 ...

  4. 用Qemu搭建aarch32学习环境

    作者信息 作者: 彭东林 邮箱: pengdonglin137@163.com QQ: 405728433 软件平台 主机: Ubuntu14.04 64位版本 模拟器:Qemu-2.8.0 Linu ...

  5. 基于Ubuntu&plus;Python&plus;Tensorflow&plus;Jupyter notebook搭建深度学习环境

    基于Ubuntu+Python+Tensorflow+Jupyter notebook搭建深度学习环境 前言一.环境准备环境介绍软件下载VMware下安装UbuntuUbuntu下Anaconda的安 ...

  6. ubuntu下搭建android开发环境之超顺畅模拟器

    如果说android系统的卡,像耳边蚊子让人抓狂,那么android模拟器的卡,那就像午睡时的苍蝇.大概就是一样的恶心~~ 那么,这样的问题对于开发者肯定忍无可忍,我也一样,虽然我还没有入门,但我也一 ...

  7. 云端搭建Linux学习环境 链接https&colon;&sol;&sol;edu&period;aliyun&period;com&sol;article&sol;19 (阿里云ECS服务器 )课堂

    云端搭建Linux学习环境 链接https://edu.aliyun.com/article/19 1. 开通云服务器 2 1.包年包月   按量付费(适合测试数据的时候) 2 2.地域   服务器数 ...

  8. ubuntu16&period;04&plus;七彩虹GTX1060的NVIDIA驱动&plus;Cuda8&period;0&plus;cudnn5&period;1&plus;tensorflow&plus;keras搭建深度学习环境【学习笔记】【原创】

    平台信息:PC:ubuntu16.04.i5.七彩虹GTX1060显卡 作者:庄泽彬(欢迎转载,请注明作者) 说明:参考了网上的一堆的资料搭建了深度学习的开发环境,下班在宿舍折腾了好几个晚上才搞定,写 ...

  9. 教你如何用Docker快速搭建深度学习环境

    本教程搭建集 Tensorflow.Keras.Coffe.PyTorch 等深度学习框架于一身的环境,及jupyter. 本教程使用nvidia-docker启动实例,通过本教程可以从一个全新的Ub ...

随机推荐

  1. STM32之独立看门狗与窗口看门狗总结

    一.独立看门狗 STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路 ...

  2. 定时器的应用---中断方式---让8个LED灯,左右各4个来回亮

    定时器的应用---中断方式---让8个LED灯,左右各4个来回亮 /*************************** 中断方式 是主程序专注于其他的事情, 待定时器中断时才执行中断子程序. ** ...

  3. 【USACO 2&period;1】The Castle

    /* TASK: castle LANG: C++ SOLVE: 深搜,注意每个方向对应值.枚举去掉的墙,然后再dfs,注意墙要复原,并且dfs里要判断是否超出边界. */ #include<c ...

  4. Consumer Client Re-Design &lpar;翻译&rpar;

    注:0.9版本Kafka的一个重大改变就是consumer和producer API的重新设计. 这篇Kafka的文档大致介绍了对于consumer API重新设计时想要实现的功能.0.9版本的确实现 ...

  5. Linux 的使用基础---Shell程序设计

    Shell是Linux系统中的一个重要的层次,它是用户与系统交互作用的界面.Shell除了作为命令解释程序以外,还是一种高级程序设计语言.利用Shell程序设计语言可以编写出功能很强.但代码简单的程序 ...

  6. Android--应用开发1(应用程序框架)

    应用程序的框架,就是所有开发者共同是有和遵循的约定,大家在约定上进行必要的扩展,但程序的主体结构是一致的. Android系统提供给开发者一个框架,我们所有的应用开发就是在这个框架上进行扩展,下来看看 ...

  7. &period;net mvc mssql easyui treegrid 及时 编辑 ,支持拖拽

    这里提到了,1个问题,怎么扩展 Easyui 参见: http://blog.csdn.net/chenkai6529/article/details/17528833 @{ ViewBag.Titl ...

  8. 安卓activity之间值共享解决办法,tabhost之间共享父类值,字符串类型的转换,获取每一个listview的item

    1.tabhost父类值共享的解决办法 dianzhanliebiao.java是传值页面,zhuyemian.java放的是tabhost,dianzhangaikuang.java是tabhost ...

  9. 一次搞懂 Generator 函数

    1.什么是 Generator 函数 在Javascript中,一个函数一旦开始执行,就会运行到最后或遇到return时结束,运行期间不会有其它代码能够打断它,也不能从外部再传入值到函数体内 而Gen ...

  10. MySQL-每日定点运行

    最近做项目的时候设计每天定点执行的脚本,所以在这 马克一下,方便查找 set time_zone = '+8:00';      set GLOBAL event_scheduler = 1;     ...