概述
近年来 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