我发现SMLAxy在ARM分析器ARM1176 (RVDS4.0)下消耗了一个周期。
ARM1176
http://goo.gl/aS9N0t
但是在Cortex-A9MPx1.下,SMLAxy消耗了两个周期
CortexA9
http://goo.gl/1kNAoA
它与Cortex-A9的技术参考手册相冲突:
SMULxy,SMLAxy,SMULWy,SMLAWy: Cycles=1 & Result latency=3
谢谢你提前帮忙。
发布于 2013-11-28 05:36:01
这是正确的。SMLAxy在ARMv7上消耗两个周期。
但是,重要的是要知道SMULxy只消耗一个周期。
假设您通过展开来提高ILP,那么最好将SMLAxy分离到SMULxy中,并经常添加/订阅,因为SMULxy只能通过ALU指令双发。
例如:
loop
ldmia r0!, {r4,r5}
ldmia r1!, {r6,r7}
subs r3, #4
smlabb r9, r4, r6, r14
smlatt r10, r4, r6, r14
smlabb r11, r5, r7, r14
smlatt r12, r5, r7, r14
stmia r2!, {r9-r12}
bgt loop明显慢于:
loop
ldmia r0!, {r4,r5}
ldmia r1!, {r6,r7}
subs r3, #4
smulbb r9, r4, r6
smultt r10, r4, r6
smulbb r11, r5, r7
smultt r12, r5, r7
add r9, r14
add r10, r14
add r11, r14
add r12, r14
stmia r2!, {r9-r12}
bgt loop在CA9或以上。
然而,在CA8上,由于缺乏无序执行能力,您必须手动优化后者。
https://stackoverflow.com/questions/20256585
复制相似问题