在翻看了pld文档,又百度后,对于 PLtype{cond} [Rn {, #offset}] 这个后面的offset 不理解,到底指的是byte 还是bit了
类似于下面这段代码, 想理解 pld [r1,#0xc0] 这个是希望将r1指向的后面192个字节加载到cache line当中,还是指的是192bit相应的24字节加载到cache line当中
而后面的 subs r2,r2,#0x40,表达 的是上面的64字节进行了复制,不太理解,如果是pld后面的那个0XC0是字节的话,为什么,不一次预加载128个字节,这样,每次预加载后
第二次在使用的时候,前一次已经有64字节一半在里面了。为什么是192字节效率最高,如果是代表bit的话,为啥是预加载24字节,按理说一次是加载一个cache line 64字节才对
还有一个pld,一般情况下会吃几个cycle cpu呢, 想写一个性能好的点积。求指教
NEONCopyPLD PLD [r1, #0xC0] VLDM r1!,{d0-d7} VSTM r0!,{d0-d7} SUBS r2,r2,#0x40 BGE NEONCopyPLD
PLD的offset是byte。它和Rn组成一个地址。地址都是以byte为单位的。
192字节是一个经验数据。可能在不同的CPU上可能会不太一样。有一个准则是这个offset不能太小。因为太小的话,比如64字节,那么当PLD指令的预加载生效时(如果是从L2 Cache里面加载数据,那也需要几十个Cycle。这个不同CPU不一样。比如 https://www.7-cpu.com/cpu/Cortex-A15.html),下面的VLDM指令已经运行完毕了。这个预加载的64字节也就没有用到。