ARM没有ALU多少运算量

ARM without ALU how much for operations

本文关键字:运算 多少 ALU 没有 ARM      更新时间:2023-10-16

我在ARM Cortex M3上遇到问题具有一些需要对自然数进行乘法和除法运算的功能。关键是:如果可以在128位数字之间进行计算?我需要知道有多少组装操作需要软件模拟多个两个32位的数字并除以两个32位数,然后我将计算计算的时间消耗。我坚持了一些计算,我需要帮助,因为也许我必须用硬件ALU将我的uC更改为cortex M4。

你能帮我吗?

给定简单的C代码:

uint32_t var1 = 12304;
uint32_t var2 = 1892637198;
uint64_t result = var1*var2;

和objdump汇编程序:

   0:   b480            push    {r7}
   2:   b085            sub     sp, #20
   4:   af00            add     r7, sp, #0
        uint32_t var1 = 12304;
   6:   f243 0310       movw    r3, #12304      ; 0x3010
   a:   60fb            str     r3, [r7, #12]
        uint32_t var2 = 1892637198;
   c:   f645 230e       movw    r3, #23054      ; 0x5a0e
  10:   f2c7 03cf       movt    r3, #28879      ; 0x70cf
  14:   60bb            str     r3, [r7, #8]
        uint64_t result = var1*var2;
  16:   68fb            ldr     r3, [r7, #12]
  18:   68ba            ldr     r2, [r7, #8]
  1a:   fb02 f103       mul.w   r1, r2, r3
  1e:   460a            mov     r2, r1
  20:   f04f 0300       mov.w   r3, #0
  24:   e9c7 2300       strd    r2, r3, [r7]

因此,如果我计算倍数乘法,我可以得到整个指令(因为将值加载到寄存器中,每次加载加上3条指令)还是只乘法(在这种情况下是6条指令)

因为乘以两个格式化为(x^5+x)的128位变量,其中x是32位变量,给我(a+b)(c+d)ab+ad+bc+bd 4乘(或使用算法3乘)。所以,如果我应该计算4*(3+3+6)或4*(6+?+?)。

ARM指令

此页面包含ARM M系列处理器每条指令的所有周期计数。如果你有汇编代码(听起来像你做的?),那么把所有的周期加起来,乘以1/clock_freq,得到你在不同场景中花费的总时间应该足够容易。

另一个解决方案是使用systick来测量周期计数。

请参阅ARM 的链接

编辑:您可以将Counter设置为max,并在计数器值达到0后强制重新加载计数器值。

//配置系统
*STRVR=0xFFFFFF;//最大计数*STCVR=0;//强制重新加载计数器值寄存器*STCSR=5;//启用FCLK计数而不中断

您可以读取STCVR reg,它是函数前后的向下寄存器,然后删除开销周期(读取STCVR寄存器)。