neon浮点运算_ARM 浮点运算详解

原标题:ARM 浮点运算详解

一:早期 上的浮点模拟器:

早期的ARM没有协处理器,所以是由CPU来模拟的,即所需浮点运算均在浮点运算模拟器(float math emulation)上进行,需要的浮点运算,常要耗费数千个循环才能执行完毕,因此特别缓慢。

直到今天,在ARM Kernel配置时,都有如下选项:

Floating point emulation --->

[ ] NWFPE math emulation

[ ] FastFPE math emulation (EXPERIMENTAL)

在这里,可以配置ARM 浮点模拟器。

浮点模拟器 模拟浮点是利用了undefined instrction handler,在运算过程中遇到浮点计算是产生异常中断,这么做带来的后果是带来极频繁的exception,大大增加中断延迟,降低系统实时性。

二:软浮点技术:

软浮点支持是由交叉工具链提供的功能,与Linux内核无关。当使用软浮点工具链编译浮点操作时,编译器会用内联的浮点库替换掉浮点操作,使得生成的机器码完全不含浮点指令,但是又能够完成正确的浮点操作。

三:浮点协处理器:

在较新版本的ARM中,可以添加协处理器。 一些ARM CPU为了更好的处理浮点计算的需要,添加了浮点协处理器。

并定义了浮点指令集。 如果不存在实际的硬件,则这些指令被截获并由浮点模拟器模块(FPEmulator)来执行。

四: 硬件浮点协处理器以及对应指令集的使用:

想要使用硬件浮点协处理器来帮助运算Application中的浮点运算。需要以下几个前提条件:

1. Kernel中设置支持硬件协处理器。

2. 编译器支持将浮点运算翻译成硬件浮点运算指令,或者在需要浮点运算的时候手动调用相应的浮点运算指令。

1. Kernle的支持:

如果Kernel不支持浮点协处理器,则因为协处理器寄存器等使用权限等问题,协处理器对应指令无法运行。

网络上有位高手指出:

CP15 c1 协处理器访问控制寄存器,这个寄存器规定了用户模式和特权对协处理器的访问权限。我们要使用VFP当然要运行用户模式访问CP10和CP11。

另外一个寄存器是VFP的FPEXC Bit30这是VFP功能的使用位。

其实操作系统在做了这两件事情之后,用户程序就可以使用VFP了。当然,Kernel 除了这2件事外,还处理了其他一些事情。

Floating point emulation --->

[*] VFP-format floating point maths

Include VFP support code in the kernel. This is needed IF your hardware includes a VFP unit.

2. 编译器指定浮点指令:

编译器可以显式指定将浮点运算翻译成何种浮点指令。

如果编译器支持软浮点,则其可能会将浮点运算翻译成编译器中自带的浮点库。则不会有真正的浮点运算。

否则,可以翻译成FPA(Floating Point Accelerator)指令。 FPA指令再去查看是否有浮点模拟器。

还可以将浮点运算指定为VFP(vector floating point)指令或者neon向量浮点指令。

五. 编译器指定编译硬浮点指令:

测试浮点加减乘除等运算的时间长度:

float src_mem_32[1024] = {1.024};

float dst_mem_32[1024] = {0.933};

for(j = 0; j < 1024; j++)

{

for(i = 0; i < 1024; i++)

{

src_32 = src_mem_32[i] + dst_mem_32[i];

}

}

通过printf 计算前后毫秒数的差值来看计算能力。

编译:

-hisiv200-linux-gcc -c -Wall fcpu.c -o fcpu.o

arm-hisiv200-linux-gcc fcpu.o -o FCPU -L./

运行,则得到32位浮点数加1024次所需要时间。

如果要使用VFP呢?

arm-hisiv200-linux-gcc -c -Wall -mfpu=vfp -mfloat-abi=softfp fcpu.c -o fcpu.o

arm-hisiv200-linux-gcc -Wall -mfpu=vfp -mfloat-abi=softfp fcpu.o -o FCPU -L./

则运行后发现,所需要时间几乎减小了一半。 说明还是非常有效果的。

关于-mfpu -mfloat-abi讲解:见附录2。

另外,如何才能在直观的检查出是否使用VFP呢?

可以通过察看编译出的ASM程序得到结论。

#arm-hisiv200-linux-objdump -d fcpu.o

00000000 :

0: e52db004 push {fp} ; (str fp, [sp, #-4]!)

4: e28db000 add fp, sp, #0

8: e24dd00c sub sp, sp, #12

c: e3a03000 mov r3, #0

10: e50b300c str r3, [fp, #-12]

14: e3a03000 mov r3, #0

18: e50b3008 str r3, [fp, #-8]

1c: e3a03000 mov r3, #0

20: e50b3008 str r3, [fp, #-8]

24: ea000017 b 88

28: e3a03000 mov r3, #0

2c: e50b300c str r3, [fp, #-12]

30: ea00000d b 6c

34: e51b200c ldr r2, [fp, #-12]

38: e59f3064 ldr r3, [pc, #100] ; a4

3c: e0831102 add r1, r3, r2, lsl #2

40: ed917a00 vldr s14, [r1]

44: e51b200c ldr r2, [fp, #-12]

48: e59f3058 ldr r3, [pc, #88] ; a8

4c: e0831102 add r1, r3, r2, lsl #2

50: edd17a00 vldr s15, [r1]

54: ee777a27 vadd.f32 s15, s14, s15

58: e59f304c ldr r3, [pc, #76] ; ac

5c: edc37a00 vstr s15, [r3]

60: e51b300c ldr r3, [fp, #-12]

64: e2833001 add r3, r3, #1

68: e50b300c str r3, [fp, #-12]

6c: e51b200c ldr r2, [fp, #-12]

70: e59f3038 ldr r3, [pc, #56] ; b0

74: e1520003 cmp r2, r3

78: daffffed ble 34

7c: e51b3008 ldr r3, [fp, #-8]

80: e2833001 add r3, r3, #1

84: e50b3008 str r3, [fp, #-8]

88: e51b2008 ldr r2, [fp, #-8]

8c: e59f301c ldr r3, [pc, #28] ; b0

90: e1520003 cmp r2, r3

94: daffffe3 ble 28

98: e28bd000 add sp, fp, #0

9c: e49db004 pop {fp} ; (ldr fp, [sp], #4)

a0: e12fff1e bx lr

这里明显包含vfp指令。 所以是使用vfp指令的:

arm-hisiv200-linux-gcc -c -Wall -mfpu=vfp -mfloat-abi=softfp fcpu.c -o fcpu.o

注意:VFP 指令指令在附录1中。

如果使用:

arm-hisiv200-linux-gcc -c -Wall fcpu.c -o fcpu.o

#arm-hisiv200-linux-objdump -d fcpu.o

00000000 :

0: e92d4800 push {fp, lr}

4: e28db004 add fp, sp, #4

8: e24dd008 sub sp, sp, #8

c: e3a03000 mov r3, #0

10: e50b300c str r3, [fp, #-12]

14: e3a03000 mov r3, #0

18: e50b3008 str r3, [fp, #-8]

1c: e3a03000 mov r3, #0

20: e50b3008 str r3, [fp, #-8]

24: ea000019 b 90

28: e3a03000 mov r3, #0

2c: e50b300c str r3, [fp, #-12]

30: ea00000f b 74

34: e51b200c ldr r2, [fp, #-12]

38: e59f3068 ldr r3, [pc, #104] ; a8

3c: e7932102 ldr r2, [r3, r2, lsl #2]

40: e51b100c ldr r1, [fp, #-12]

44: e59f3060 ldr r3, [pc, #96] ; ac

48: e7933101 ldr r3, [r3, r1, lsl #2]

4c: e1a00002 mov r0, r2

50: e1a01003 mov r1, r3

54: ebfffffe bl 0 <__aeabi_fadd>

58: e1a03000 mov r3, r0

5c: e1a02003 mov r2, r3

60: e59f3048 ldr r3, [pc, #72] ; b0

64: e5832000 str r2, [r3]

68: e51b300c ldr r3, [fp, #-12]

6c: e2833001 add r3, r3, #1

70: e50b300c str r3, [fp, #-12]

74: e51b200c ldr r2, [fp, #-12]

78: e59f3034 ldr r3, [pc, #52] ; b4

7c: e1520003 cmp r2, r3

80: daffffeb ble 34

84: e51b3008 ldr r3, [fp, #-8]

88: e2833001 add r3, r3, #1

8c: e50b3008 str r3, [fp, #-8]

90: e51b2008 ldr r2, [fp, #-8]

94: e59f3018 ldr r3, [pc, #24] ; b4

98: e1520003 cmp r2, r3

9c: daffffe1 ble 28

a0: e24bd004 sub sp, fp, #4

a4: e8bd8800 pop {fp, pc}

则不包含VFP指令。

且去调用 __aeabi_fadd

附录1 :VFP 指令

可以查看arm的realView文档。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/Bcffbdga.html

附录2:

-mfpu=name

-mfpe=number

-mfp=number

This specifies what floating point hardware (or hardware emulation) is available on the target. Permissible names are: fpa, fpe2, fpe3, maverick, vfp. -mfp and -mfpe are synonyms for -mfpu=fpenumber, for compatibility with older versions of GCC.

-mfloat-abi=name

Specifies which ABI to use for floating point values. Permissible values are: soft, softfp and hard.

soft and hard are equivalent to -msoft-float and -mhard-float respectively. softfp allows the generation of floating point instructions, but still uses the soft-float calling conventions.

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Serverless 工程实践 | 细数 Serverless 的配套服务

简介&#xff1a; 上文说到云计算的十余年发展让整个互联网行业发生了翻天覆地的变化&#xff0c;Serverless 作为云计算的产物&#xff0c;或者说是云计算在某个时代的表现&#xff0c;被很多人认为是真正意义上的云计算&#xff0c;关于“Serverless 是什么”这个问题&#x…

程序员在想些什么?拒绝盲猜,CSDN帮你精准洞察 Ta 们的心

CSDN 推出《开发者研究与洞察》服务。基于3200万开发者的资源&#xff0c;从开发者视角出发&#xff0c;聚焦开发者“关注”、“使用”、“体验”三方面&#xff0c;帮助技术推广者打造技术品牌、优化技术产品的市场投放策略、提升技术产品的开发者使用体验&#xff0c;直接聆听…

伴鱼:借助 Flink 完成机器学习特征系统的升级

简介&#xff1a; Flink 用于机器学习特征工程&#xff0c;解决了特征上线难的问题&#xff1b;以及 SQL Python UDF 如何用于生产实践。 本文作者陈易生&#xff0c;介绍了伴鱼平台机器学习特征系统的升级&#xff0c;在架构上&#xff0c;从 Spark 转为 Flink&#xff0c;解…

小型微型计算机系统退回修改,小型微型计算机系统

基本信息期刊名称小型微型计算机系统《中国计算机系统杂志》的英文名称出版周期每月发布了ISSN 1000-1220发布CN 21-1106 / TP邮政编码8-108组织者中国科学院沉阳计算技术研究所出版地: 辽宁省沉阳市期刊首页网址提交URL包含在中/荣誉CSCD核心期刊中国科学引文Pж(AJ)摘要杂志C…

coding ssh端口指定_443 端口的 SSH 服务

SSH 的默认端口是 22 &#xff0c;有时您或您的公司的防火墙会完全屏蔽掉这个端口。如果此时您不方便通过 HTTPS 方式进行 Git 操作&#xff0c;您可以使用 Coding.net 提供的 443 端口的 SSH 服务&#xff0c;您需要确保 SSH 已配置成功&#xff0c;然后执行&#xff1a;$ ssh…

亚信安全发布《2022年网络安全发展趋势及十大威胁预测》

回顾2021年&#xff0c;从防御的角度来看&#xff0c;仍然是充斥着压力和焦虑的一年。勒索软件攻击数量再破纪录、高危漏洞与供应链攻击所造成的持续威胁困扰着大家。 展望2022年&#xff0c;面对数字化、云化、智能化发展的当下&#xff0c;安全更应该放眼于未来。亚信安全期…

Flink 1.14 新特性预览

简介&#xff1a; 一文了解 Flink 1.14 版本新特性及最新进展 本文由社区志愿者陈政羽整理&#xff0c;内容源自阿里巴巴技术专家宋辛童 (五藏) 在 8 月 7 日线上 Flink Meetup 分享的《Flink 1.14 新特性预览》。主要内容为&#xff1a; 简介流批一体Checkpoint 机制性能与效率…

html查看程序魅族,怎么查看源代码(什么工具能查出一个程序的代码)

什么工具能查出一个程序的代码如果我理解正确&#xff0c;那么您正在寻找可以通过分析exe来启动源代码的程序。 这属于“逆向工程”类别。 一般来说&#xff0c;最好将exe反编译为程序集&#xff0c;但是查看已编译的代码非常麻烦。如果将其反编译为高级语言&#xff0c;则很有…

2021 年云原生技术发展现状及未来趋势

简介&#xff1a; 作者于雨担任了 2021 年 GIAC 会议云原生专场的出品人兼讲师&#xff0c;组织了前后四个场子的演讲&#xff0c;在这个过程中作者同时作为听众从这些同行的演讲中学到了很多非常有用的知识。本文算是对 2021 GIAC 云原生专场的侧记&#xff0c;管中窥豹&#…

像搭“乐高”一样实现整合式网络安全体系

部署多种防护产品&#xff0c;却无法形成防御合力&#xff0c;是当前很多企业网络安全建设都面临的挑战。网络安全能力整合是企业的刚需&#xff0c;也是行业发展的大势所趋。虽然Gartner 提出的网络安全网格架构&#xff08;CSMA&#xff0c;Cybersecurity Mesh Architecture …

python yaml读_python中读取yaml文件的方法是什么

python中读取yaml文件的方法是什么发布时间&#xff1a;2020-08-05 11:50:36来源&#xff1a;亿速云阅读&#xff1a;110作者&#xff1a;小新小编给大家分享一下python中读取yaml文件的方法是什么&#xff0c;希望大家阅读完这篇文章后大所收获&#xff0c;下面让我们一起去探…

合规安全大考核:移动应用安全策略全盘点

简介&#xff1a; 移动应用涵盖用户大量个人数据&#xff0c;一旦发生泄漏可能对个人、社会造成重大影响&#xff0c;同时对移动应用产业长远的发展来说也是毁灭性打击。移动应用开发者&#xff0c;也应注意开发过程中的规范性、安全性&#xff0c;敬畏安全问题&#xff0c;防范…

禁用计算机f1-f12,win10禁用F1至F12热键转为功能键的技巧

win10禁用F1至F12热键转为功能键的技巧介绍。有网友询问&#xff1a;Win10系统笔记本电脑上的F1-F12键上都变成了开关系统功能开关的快捷键&#xff0c;而失去了F1-F12键本身的快捷键的功能。因为编写程序运行的许多软件都需要使用Fn快捷功能键运行&#xff0c;还有制作Word文档…

Quick BI电子表格: 新手亦可表格自由

简介&#xff1a; 随着企业业务快速增长&#xff0c;单纯的表或交叉表展现的数据模式相对固定&#xff0c;已不能满足企业中不同角色用户、不同业务场景数据可视化分析展现的诉求。在满足业务人员可视化需求层面&#xff0c;Quick BI不仅提供了丰富的图表组件&#xff0c;也提供…

CSDN 十大技术主题盘点-云原生篇

关于2021&#xff0c;我们能看到的技术变化有很多。当云原生向下而生&#xff0c;当分布式数据库席卷而至&#xff0c;当低代码平台扩展了开发的边界&#xff0c;当万物互联蔚然成风……我们看到了太多在2021年形成的变化&#xff0c;但也能看到这些趋势非但没有结束&#xff0…

linux 拖动图标有拖影_想要实现元素拖动效果,但是一拖动出现禁止的图标

用jQuery实现可用鼠标创建窗口&#xff0c;用鼠标对窗口进行拖动。https://jsfiddle.net/r4x1toz3/7/但是有两个问题不知道怎么解决&#xff1a;1、创建完元素&#xff0c;&#xff0c;文字会呈被选中状态&#xff0c;每创建一个窗口&#xff0c;所有窗口都会变成选中状态(实际…

2019吉林大学计算机学硕考研,计算机科学与技术学院2019年硕士研究生复试基本要求...

1、考生的初试成绩必须符合吉林大学计算机科学与技术学院2019年硕士研究生复试的初试成绩基本要求&#xff1a;计算机系统结构专业&#xff1a;总分310分&#xff0c;英语50分&#xff0c;政治50分&#xff0c;数学75分&#xff0c;专业课90分&#xff1b;计算机软件与理论专业…

基于MaxCompute+PAI的用户增长方案实践

简介&#xff1a; 如何通过PAIMaxCompute完成用户增长模型AARRR全链路&#xff0c;包含拉新、促活、留存、创收、分享。 本文作者 李博 阿里云智能 高级产品专家 在过去一年阿里云PAI机器学习团队做了很多偏业务的实践&#xff0c;其中有一条就是基于 MaxComputePAI的产品方案…

Atmosic发布搭载能量收集技术的超低功耗蓝牙5.3 片上系统(SoC)高级产品系列

物联网&#xff08;IoT&#xff09;能量收集无线技术的全球领导者Atmosic今日宣布推出ATM33系列蓝牙5.3高性能片上系统&#xff08;SoC&#xff09;产品&#xff0c;该产品系列将Atmosic已获专利的先进能量收集及超低功耗技术推进到更高的水平。 为减少各种物联网产品高昂的电池…

基于 MaxCompute 的实时数据处理实践

简介&#xff1a; MaxCompute 通过流式数据高性能写入和秒级别查询能力(查询加速)&#xff0c;提供EB级云原生数仓近实时分析能力&#xff1b;高效的实现对变化中的数据进行快速分析及决策辅助。当前Demo基于近实时交互式BI分析/决策辅助场景&#xff0c;实现指标卡近实时BI分析…