ARM技术论坛
直播中

chumowei

8年用户 703经验值
擅长:电源/新能源
私信 关注
[经验]

如何在x86环境下基于Qemu和Docker快速搭建AARCH64开发环境

概述

近年来 Arm 服务器的发展势头很猛,但大部分人的个人电脑还是 x86 环境,开发上存在不便。

从 docker-hub 可以下载到一个名字叫 dev4arm64/aarch64:ubuntu_19.04_sve 的 docker image,
读者可以通过 AARCH64 开发环境准备 这一节提供的命令进入 AARCH64 开发环境。
也可以通过 附录 提供的方法,手动创建开发环境。

到目前为止,官方 release 的 gcc 还不支持 SVE intrinsics ,
但 github上 的 gcc-mirror 仓包含了一个 aarch64/sve-acle-branch 的分支,
通过 sve acle 分支的源代码,可以手动编译出一个支持 SVE intrinsics 的 gcc 编译器,本文的 AARCH64 开发环境中内置了一个手动编译的 gcc,用来支持对 SVE intrinsics 的编译。

支持 SVE intrinsics 的编译器,放在了开发环境的 /home/dev/bin/gcc_sve/ 目录下面。
下文中提到的所有测试代码、支持 SVE intrinsics 的 gcc 编译器,
都已经内置在了 dev4arm64/aarch64:ubuntu_19.04_sve docker image 中。本文是 AARCH64 开发系列文章的第一篇。以下假定所有代码存放于 ~/work 目录下。

AARCH64 开发环境准备

准备一台安装有 ubuntu18.04 (更高版本或者近似版本都可以) 的 x86 电脑,运行如下命令进入 AARCH64 开发环境。

以下所有内容都是在 AARCH64 开发环境中的操作,

AARCH64 基本汇编编译运行

切换到目录 ~/work/aarch64_asm,有一个内置的 aarch64 的基本汇编测试程序,如下

执行 makefile 文件可以得到如下结果

AARCH64 Neon 编译运行

Neon 的测试代码在目录 ~/work/neon 下面。

AARCH64 Neon 汇编编译运行

这是一个批量处理16个 unsigned char 类型数据做加法运算的例子,运行 make run_asm clean 结果如下

AARCH64 Neon intrinsics 编译运行

这是一个用neon计算 1,2,3 ... 加到99 的例子,运行 make run_intrinsics clean 结果如下

AARCH64 SVE 编译运行

SVE 的测试代码在目录 ~/work/sve 下面。

AARCH64 SVE 汇编编译运行

这是通过sve指令计算字符串长度的例子,运行 make run_asm clean 结果如下

注意: arm sve 指令是 armv8.2 开始支持的,因此 -march 后面的参数是: armv8.2-a+sve

因为这个例子的代码量比较少,因此贴出 source code 的源代码,更多内容,

AARCH64 SVE intrinsics 编译运行

这是一个通过 sve intrinsics 做批量运算的例子,运行 make run_intrinsics clean 结果如下

附录

下载附件:ubuntu-19.04-dockerfile 和 docker-build.sh,
在命令行上输入如下命令,等待一段时间,环境就会创建成功。

原作者:Zhiyuan zhu

更多回帖

发帖
×
20
完善资料,
赚取积分