交叉编译支持SVE ACLE的gcc
时间:2019-09-22
本文章向大家介绍交叉编译支持SVE ACLE的gcc,主要包括交叉编译支持SVE ACLE的gcc使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最近在学习AArch64的SVE技术时,发现目前可以在网上找到的gcc版本都不支持SVE intrinsic方式调用,在看文档时发现,GCC要到2020年才会支持,在github上看到了gcc仓库里确实存在一个名为aarch64/sve-acle-branch的分支:
然后将这个分支的代码下载下来进行交叉编译,然后去编译用SVE intrinsic方式实现的SVE测试程序,发现果然可以编过,也可以运行。编译方法参考交叉编译用于生成aarch64指令的GCC (9.2),这里有一份已经编译好的:链接: https://pan.baidu.com/s/1utIj7f5kVCMYlE8BcBQ4DA 提取码: ew2b
测试程序:
#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 = 0; 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 = 0; 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); } } // Vector version void vla_add_arrays_2(double *dst, double *src, double c, const int N) { for (int i = 0; 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); } } int main(void) { double src[100]; double c; double dst_serial[100], dst_vla[100], dst_vla2[100]; for (int i = 0; i < 100; ++i) { src[i] = (double) i / ((double) i + 1); } c = src[rand() % 100]; add_arrays(dst_serial, src, c, 100); vla_add_arrays(dst_vla, src, c, 100); vla_add_arrays_2(dst_vla2, src, c, 100); for (int i = 0; i < 100; ++i) { printf("%f %f %f, %f, %f\n", dst_serial[i], dst_vla[i], dst_vla2[i], src[i], c); } return 0; }
编译:
CC=/home/pengdl/work/SVE/cross_compile/install/bin/aarch64-linux-gnu-gcc CFLAGS=-g -Wall -march=armv8.2-a+sve -O1 LDFLAGS=--static all:demo demo:demo.o %.o:%c clean: $(RM) *.o demo
测试运行:
$ make clean;make; rm -f *.o demo /home/pengdl/work/SVE/cross_compile/install/bin/aarch64-linux-gnu-gcc -g -Wall -march=armv8.2-a+sve -O1 -c -o demo.o demo.c /home/pengdl/work/SVE/cross_compile/install/bin/aarch64-linux-gnu-gcc --static demo.o -o demo pengdl@pengdl-dell:~/work/SVE/cross_compile/teset $ qemu-aarch64 ./demo 0.988095 0.988095 0.988095, 0.000000, 0.988095 1.488095 1.488095 1.488095, 0.500000, 0.988095 1.654762 1.654762 1.654762, 0.666667, 0.988095 1.738095 1.738095 1.738095, 0.750000, 0.988095 1.788095 1.788095 1.788095, 0.800000, 0.988095 1.821429 1.821429 1.821429, 0.833333, 0.988095 1.845238 1.845238 1.845238, 0.857143, 0.988095 1.863095 1.863095 1.863095, 0.875000, 0.988095 1.876984 1.876984 1.876984, 0.888889, 0.988095 1.888095 1.888095 1.888095, 0.900000, 0.988095 ... ...
完。
原文地址:https://www.cnblogs.com/pengdonglin137/p/11566864.html
- Numpy 修炼之道 (8)—— 常用函数
- Numpy 修炼之道 (7)—— 形状操作
- 洛谷P3391 【模板】文艺平衡树(Splay)(FHQ Treap)
- 12.python进程协程异步IO
- POJ3622 Gourmet Grazers(FHQ Treap)
- 洛谷P3201 [HNOI2009]梦幻布丁
- 洛谷P3374 【模板】树状数组 1(CDQ分治)
- 自然语言处理基础知识1. 分词(Word Cut)2. 词性标注(POS Tag)3.自动标注4.文本分类5.评估6.从文本提取信息7.分析句子结构《python自然语言处理》各章总结:
- 洛谷P3384 【模板】树链剖分
- 洛谷P2147 [SDOI2008]Cave 洞穴勘测
- linux基础
- 洛谷P3178 [HAOI2015]树上操作
- Numpy 修炼之道 (6)—— 复制和视图
- 事务日志已满,原因为“ACTIVE_TRANSACTION”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python数据库编程。
- ggplot2饼图和图注顺序不一致如何解决
- 基因集富集分析(Gene Set Enrichment Analysis, GSEA)
- R绘制甲基化和表达谱联合分析热图
- Python字符串操作--寻找所有匹配的位置
- java设计模式-工厂模式
- java设计模式-工厂方法模式
- java设计模式-抽象工厂模式
- Prometheus监控神器-Alertmanager篇(1)
- java设计模式-单例模式
- Spring事务专题(三)事务的基本概念,Mysql事务处理原理
- cocos creator使用protobuf实现网络模块
- 简单聊聊红黑树(Red Black Tree)
- cocos creator探照灯效果实现
- servlet/filter/listener/interceptor区别与联系