本帖最后由 kongqijin 于 2017-8-30 19:58 编辑
我用STM32F746NG的浮点加法器,然后用for循环运行八百个数的单精度加法。 然后把这个循环执行一万次取平均值。平均大概是五千左右。
void LK_ADDr(LK_Data * input, LK_Data * ZeroCenterParameter)
{
while (Size--)
{
*im = *im + *meanParameter;
im++;
meanParameter++;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
您好,汇编显示是这样的
182:
0x08002198 BD70 POP {r4-r6,pc}
78: {
79: int Size = input->Size;
80: LK_Accuarcy_Data *im=input->Matrix;
0x0800219A B510 PUSH {r4,lr}
81: LK_Accuarcy_Data *meanParameter=ZeroCenterParameter->Matrix;
82:
83: while (Size--)
84: {
0x0800219C 690A LDR r2,[r1,#0x10]
0x0800219E E9D01003 LDRD r1,r0,[r0,#0x0C]
0x080021A2 E003 B 0x080021AC
85: *im = *im + *meanParameter;
86: im++;
87: meanParameter++;
88: }
89:
0x080021A4 CA10 LDM r2!,{r4}
0x080021A6 6803 LDR r3,[r0,#0x00]
0x080021A8 4423 ADD r3,r3,r4
0x080021AA C008 STM r0!,{r3}
0x080021AC 1E49 SUBS r1,r1,#1
83: while (Size--)
84: {
85: *im = *im + *meanParameter;
86: im++;
87: meanParameter++;
88: }
89:
0x080021AE D2F9 BCS 0x080021A4
90: }
0x080021B0 BD10 POP {r4,pc}
然后我用int又试了试,还是一样的情况
我是这么获得时间值的:
//--------------------------------DWT REST
uint32_t DWT_Counter;
DWT->CYCCNT = 0; // sub 6
DWT->CPICNT = 0; // sub 2
DWT->EXCCNT = 0; // sub 0
DWT->SLEEPCNT = 0; // sub 0
DWT->LSUCNT = 0; // sub 0
DWT->FOLDCNT = 0; // sub 0
//--------------------------------DWT
LK_ADDr(&T1, &T2);//H1
//--------------------------------DWT OUTPUT
DWT_Counter=DWT->CYCCNT; printf_s(" %d ",DWT_Counter);
//--------------------------------DWT END
改变数组大小,从0增加到10000,其中平均loop耗时从8减到4又加到7. 这个数据是我随机生成的0~1024大小的int型,仍然是这种情况。看来是与数据关系不大。难道真是分支预测器在起作用?
一周热门 更多>