gpt4 book ai didi

assembly - ARM Cortex A8 基准测试 : can someone help me make sense of these numbers?

转载 作者:行者123 更新时间:2023-12-02 20:15:27 25 4
gpt4 key购买 nike

我正在努力在 Android 上编写几种实时 DSP 算法,因此我决定直接在 Assembly 中对 ARM 进行编程,以尽可能地优化所有内容,并使数学最大限度地轻量级。起初,我得到的速度基准没有多大意义,所以我开始阅读有关管道危险、双问题功能等的内容。我仍然对我得到的一些数字感到困惑,所以我将它们发布在这里,希望有人能够解释为什么我得到我得到的东西。我特别感兴趣的是为什么 NEON 需要不同的时间来对不同的数据类型运行计算,尽管它声称在一个周期内完成每一项操作。我的发现如下。

我使用一个非常简单的循环进行基准测试,并运行了 2,000,000 次迭代。这是我的功能:

hzrd_test:

@use received argument an number of iterations in a loop
mov r3 , r0

@come up with some simple values
mov r0, #1
mov r1, #2

@Initialize some NEON registers (Q0-Q11)
vmov.32 d0, r0, r1
vmov.32 d1, r0, r1
vmov.32 d2, r0, r1

...

vmov.32 d21, r0, r1
vmov.32 d22, r0, r1
vmov.32 d23, r0, r1

hzrd_loop:

@do some math
vadd.s32 q0, q0, q1
vadd.s32 q1, q0, q1
vadd.s32 q2, q0, q1
vadd.s32 q3, q0, q1
vadd.s32 q4, q0, q1
vadd.s32 q5, q0, q1
vadd.s32 q6, q0, q1
vadd.s32 q7, q0, q1
vadd.s32 q8, q0, q1
vadd.s32 q9, q0,s q1
vadd.s32 q10, q0, q1
vadd.s32 q11, q0, q1

@decrement loop counter, branch to loop again or return
subs r3, r3, #1
bne hzrd_loop

@return
mov r0, r3
mov pc, lr

注意指定为向量加法 (vadd) 和有符号 32 位 int (s32) 的计算操作和数据类型。此操作在一定时间内完成(见下面的结果表)。根据this ARM Cortex-A8 document在接下来的几页中,NEON 中几乎所有基本算术运算都应该在一个周期内完成,但这就是我得到的:

vmul.f32 ~62msvmul.u32 ~125msvmul.s32 ~125msvadd.f32 ~63msvadd.u32 ~29msvadd.s32 ~30ms

我通过简单地替换上述循环中所有内容的操作和数据类型来完成它们。 vadd.u32vadd.f32 快两倍并且 vmul.f32vmul.u32< 快两倍是否有原因?/

干杯! =)

最佳答案

哇,你的结果非常准确:

  • 32 位整数 Q 乘法需要 4 个周期,而 float 需要 2 个周期。
  • 32 位整数 Q 加法需要 1 个周期,而 float 则需要 2 个周期。

不错的实验。

也许您已经知道了,但是在为 NEON 编码时要小心:

  • 当 NEON 执行繁重工作时,不要使用 ARM 访问内存
  • 不要将 VFP 指令与 NEON 指令混合。 (共享的除外)
  • 不访问 S 寄存器。
  • 不要从 NEON 寄存器传输到 ARM 的

以上所有这些都会导致巨大的问题。

祝你好运!

PS:我宁愿针对 A9 进行优化(周期时间略有不同),因为几乎所有新设备都配备了 A9。 ARM 的 A9 时序图更具可读性。 :-)

关于assembly - ARM Cortex A8 基准测试 : can someone help me make sense of these numbers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8054259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com