gpt4 book ai didi

performance - ARM 程序集 : Absolute Value Function: Are two or three lines faster?

转载 作者:行者123 更新时间:2023-12-03 15:51:35 27 4
gpt4 key购买 nike

在我的嵌入式系统类(class)中,我们被要求将给定的 C 函数 AbsVal 重新编码为 ARM 汇编。
我们被告知我们能做的最好的是 3 行。我决心找到一个 2 线解决方案并最终做到了,但是 我现在的问题是我实际上是降低了性能还是提高了性能 .

C 代码:

unsigned long absval(signed long x){
unsigned long int signext;
signext = (x >= 0) ? 0 : -1; //This can be done with an ASR instruction
return (x + signet) ^ signext;
}

助教/教授的三线解决方案
ASR R1, R0, #31         ; R1 <- (x >= 0) ? 0 : -1
ADD R0, R0, R1 ; R0 <- R0 + R1
EOR R0, R0, R1 ; R0 <- R0 ^ R1

我的 2 线解决方案
ADD R1, R0, R0, ASR #31 ; R1 <- x  + (x >= 0) ? 0 : -1
EOR R0, R1, R0, ASR #31 ; R0 <- R1 ^ (x >= 0) ? 0 : -1

有几个地方我可以看到潜在的性能差异:
  • 添加一个额外的算术右移调用
  • 删除一次内存获取

  • 那么,哪一个实际上更快?它取决于处理器或内存访问速度吗?

    最佳答案

    这是另外两个指令版本:

        cmp     r0, #0
    rsblt r0, r0, #0

    转换为简单的代码:
      if (r0 < 0)
    {
    r0 = 0-r0;
    }

    该代码应该非常快,即使在 Cortex-A8 和 A9 等现代 ARM-CPU 内核上也是如此。

    关于performance - ARM 程序集 : Absolute Value Function: Are two or three lines faster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499475/

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