在A15上使用PLD 指令比不用PLD指令优化效果差,为什么会出现这种情况? 按理说,PLD是提升cache hit的概率, 这样的话,CPU处理的性能应该会提升,但是测试的情况是没有提升。
以下是我编写的memcpy汇编代码:
loop:
vldm r1!, {d0-d7}
vldm r1!, {d16-d23}
pld [r1, #0x0]
pld [r1, #0x40]
vstm r0!, {d0-d7}
vstm r0!, {d16-d23}
subs r2, #0x80
bgt loop
bx lr
建议PLD指令写到loop开始,跨地址尽量大,比如偏移0x80。还有PLD指令只能用于cacheable属性空间。
loop中每次使用load指令前,必须确保pld已经将要访问的地址数据load到cache中,如果放到loop外,不可能保证loop内每次load的数据都在cache中吧??
另外,我不是很明白你说的跨地址尽量大,因为A15的L2 和L1 cache line都是64字节,vldm 每次load的就是64bytes,所以,pld每次preload的时候只需要将一个cache line load到cache即可,因为CPU访问memory的是按照cache line来访问的。
谁能解答下疑惑,帮忙解答写,谢谢。
已经请软件的工程师帮忙看了,请耐心等候工程师回答
问了工程师,这个问题有点复杂,需要多些时候才能回复你,不好意思
这个问题讨论的非常好,中国外国的朋友们都积极参与了。赞一下。大家多多交流,真理越辩越明
这个问题因为长期无人更新,我暂时标记为解决,如果要继续讨论,可以在下方继续留言
I've seen preloading xc0 in front but not x100, one thing that worries me is that extra unnecessary fetches are done, I'd put in a check that the data will be required.