ARM没有ALU多少运算量
ARM without ALU how much for operations
我在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寄存器)。
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- GCC本机矩阵运算库
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 位阵列上的快速AND运算
- 字符串中int的加法运算
- 算术运算的结果类似于:C浮点变量中的1/3
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 如何在两个 boost::multi_arrays (C++) 之间执行数学运算?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- C++中变量定义运算的值是多少
- 浮点算术运算的精度是多少?
- 在现代x86_64 CPU上进行AVX/SSE幂运算需要多少时钟周期?