关于 ARM NEON 周期的一些疑问

     2023-02-16     245

关键词:

【中文标题】关于 ARM NEON 周期的一些疑问【英文标题】:some doubts regarding cycles of ARM NEON 【发布时间】:2014-06-13 06:33:22 【问题描述】:

我在汇编中编写了一些霓虹灯代码,旨在最大限度地优化。尽管由于寄存器冲突和流水线导致的延迟减少了,但它只显示了 1 个周期差异,即在 n.70-0 之前,在 n.69-0 之后。为什么它显示这样我不明白。 这是我的示例代码

优化前http://pulsar.webshaker.net/ccc/sample-6b7ba7c2 优化后http://pulsar.webshaker.net/ccc/sample-d59091b4

我对脉冲星计算器有很多疑问。 1. n.16-0 1c d0:1 这里 n 代表什么? 2. a.23-0 2c q6l:1 VMLA.I16 q6、q9、D0[2] 代表什么? l:1 是什么意思? 23 是周期数吗? 3. count Time 是指执行代码的总时间吗? 希望有人能帮助我解决这些疑问....

【问题讨论】:

您可以通过google translator 运行网页,底部的图例试图像亚历山德罗那样解释事情。 谢谢。其实我也试过谷歌翻译,但他没有解释这些事情。因此,只有我通过 *** 接近。 【参考方案1】:

这是我对这个循环计数器的记忆:

“n”代表 Neon 管道,“a”代表 ARM 管道。实际上,您正在混合使用 ARM 和 NEON 指令。

关于“q6l:1”:q6l 是导致当前指令等待的寄存器,而 1 是该寄存器/结果可用于指令所需的额外半周期数,因此是半个周期指令必须等待他的输入。我不确定,但我认为“q6l”是 q6 寄存器的下部。

您示例中的数字“23”是指令可以开始执行的周期数。

计数时间与您的代码无关。解析时间是工具解释您提供的说明所花费的时间。计数时间是工具分析您的指令并提供周期信息所花费的时间。

我会解释更多结果,例如:

n.18-0   1c n0 q10:8

“n”代表执行单元(n = neon,a = arm,v = vfp)。

“18”是指令可以开始执行的周期数。

“0”是管道的编号。

“1c”是指令的执行周期数。请注意,这与指令结果可用于进一步指令之前所需的周期数不同。

“n0”是导致当前指令等待结果的流水线。 n0 = 霓虹管道编号 0。

“q10”是导致指令等待结果的寄存器。

“8”与指令等待结果的时间有关。如果我没记错的话是半周期数。

此计数器不考虑编译器可以重新排列指令的事实,即推迟等待结果的指令。但是,如果您强制编译器不重新排列汇编指令,当一条指令必须等待结果时,即使它们不必等待结果,其他指令也无法开始执行,因此这会导致执行停顿,其中CPU 不能执行任何指令。

此外,我不会将这种类型的计数器用于带有循环的代码。我建议您将代码拆分为不同的部分并分别优化每个循环。

【讨论】:

a.22-0 2c VMLA.I16 q6、q10、D0[3]。你说'a'代表手臂,但上面的说明指的是霓虹灯而不是手臂,那么'a'如何?? 感谢您的回复。你知道为什么pulsar.webshaker.net 站点不支持 VMOV.I8 D0,#8(将立即值移动到霓虹灯寄存器)吗?

ARM 中的 NEON 实现

...有助于对连续数据块进行操作,所以我希望在执行时间和周期方面有所改进。我做错了什么?我正在Ubuntu12.04上使用-03级别优化的gcc普通的c实现for(i=0;i<9 查看详情

ARM-NEON 用于视频格式转换

...正在尝试使用基于ARM的嵌入式系统(GumstixOvero)的NEON来加速一些视频帧转换。源为单色(Y12或Y10),目标为RGB565、RGB888或RGB32。是否有一些特定的技术/技巧可供学习和使用ARMNEON来加速这种转换并将其与标准C实现进行基准 查看详情

ARM NEON 上的最佳指令吞吐量

...法,那么在以下情况下可以维持的最快执行速度(以每个周期8位操作衡量)是多少?我们假设所有内存I/O都完全隐藏延迟。我最初 查看详情

从 SSE 到 ARM Neon 的指令转换

...ARMNeon以进行优化。对于代码的大多数SSE指令,我发现了一些明显等效的Neon指令。不过,我遇到了一些问题:result1_shifted=_mm_srli_si128(result1,1);result=_m 查看详情

带有 NEON 的 ARM 汇编中的高级数学函数

...述】:您好,我对组装有点陌生,我开始熟悉ARM组装以及一些新ARM芯片中的NEON协处理器。我不知道该怎么做的一件事是高级数学函数,如sin、cos、tan、exp等。如果我反汇编具有这些数学函数的C代码,它们似乎是外部的。【问题... 查看详情

ARM-NEON:基于参数的条件寄存器交换

...组中顺序加载R、G、B通道,并根据某些配置,置换其中的一些通道。最多有6个排列(RGB)->(RGB),(RBG),(GRB),(GB 查看详情

使用 ARM neon 内部函数进行深度转换

...内在函数展开思考,并认为我可以从一个示例开始并提出一些问题。在这个实验中,我想将32位RGB转换为16位BGR。将以下代码转换为使用NEON内在函数是一个好的开始?我在这里遇到的问题是16位与我可以看到的任何内在内容都不 查看详情

SSE (Intel) 到 NEON (ARM) 数据类型类似物

...peanalogs【发布时间】:2013-10-2403:06:05【问题描述】:我有一些内在数据类型__m128、__m128i,它们要么位于赋值的左侧,要么作为参数。我正在将SSE代码转换为NEON(用于在iOS上部署),但我无法找到这些(和其他)SSE数据类型的类... 查看详情

在 ARM NEON 中的数组边界上加载向量

...11:07:36【问题描述】:我尝试使用NEON内在函数来优化ARM的一些图像处理算法。对于某些过滤器,它需要加载该点附近的元素。例如,要以像素p[x]过滤图像,我需要加载p[x-1]、p[x]和p[x+1]。如果x=0,那么我加载p[0]、p[0]和p[1] 查看详情

Qualcomm Scorpion 双核 ARM NEON 代码有问题?

...程,以便在双核ARM芯片组MSM8660上获得最佳性能。在进行一些测量时,我注意到以下几点:具有NEON优化的单线程库比具有的单 查看详情

ARM NEON 数据类型导致编译器崩溃

...题描述】:我正在尝试使用NEON数据类型与g++4.9.1交叉编译一些代码,但我一直在使编译器崩溃。是不允许这种类型的操作,还是编译器的问题?我的操作系统是Ubuntu12.04,我正在使用arm-gcc"gccversion4.9.1(Ubuntu/Linaro4. 查看详情

ARM Neon:用于减法的 VPADAL

...高我的加法代码速度。但是,我需要用累积和进位来减去一些东西(正是我得到的加法)。一厢情愿还是真的有可能?据我所知,我需要减少我的第二个操作数,而不是它的位...执行VPADAL,然后对1进行位测试,并从结果进位中... 查看详情

ARM NEON 中的指令调度

】ARMNEON中的指令调度【英文标题】:InstructionschedulinginARMNEON【发布时间】:2014-09-1106:26:35【问题描述】:如果我的代码执行大约30条ARM指令,然后执行20条NEON指令。NEON协处理器会因为指令队列有限而停顿到30条ARM指令完成吗?那... 查看详情

关于arm指令时序

】关于arm指令时序【英文标题】:Regardingarminstructiontiming【发布时间】:2014-06-0703:49:32【问题描述】:在arm网站上,提供了Cortex-a9处理器的指令时序。InstructionLink对于每条指令(具体来说,我说的是NEON向量指令),时序是以表格... 查看详情

优化 neon 代码的一些疑惑

...。然后我遇到了一个在线工具,可以帮助计算每条指令的周期。这里是我的代码的链接:http://pulsar.webshaker.net/ccc/sample 查看详情

如何使用 Neon Extension 有效地反转汇编语言 ARM 中的数组?

...【发布时间】:2017-10-2910:13:32【问题描述】:我正在使用一些图像处理功能,我需要以最快的方式反转字节数组。如果我试图解释我的实际功能,那将是不合适的。这就是我要简化问题标准的原因。InputArray 查看详情

使用 arm neon 进行 Rgb 到灰度转换

...。现在我正在尝试做同样的事情,但只使用rgb。我改变了一些东西,但似乎效果不佳。我不知道为什么,有人看到我的错误吗?voidneon_asm_conve 查看详情

关于video.js的一些普遍疑问[关闭]

】关于video.js的一些普遍疑问[关闭]【英文标题】:Somegeneraldoubtsaboutvideo.js[closed]【发布时间】:2012-12-0119:44:10【问题描述】:我对播放器有一些普遍的疑问。我会列出它们:video.js是否支持HLS视频格式?如果是这样,在什么平台... 查看详情