在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来访问的。