正确使用ARM PLD指令(ARM11)

Mic*_*gan 4 assembly arm armv6

ARM ARM实际上没有在这条指令上使用正确的方法,但是我发现它在其他地方使用它来知道它需要一个地址作为读取下一个值的位置的提示.

我的问题是,给定一个256字节的紧密复制循环ldm/stm指令,例如r4-r11 x 8,最好在复制之前,在每个指令对之间预取每个缓存行,或者根本不执行它memcpy.问题不在于读取和写入相同的内存区域.我非常确定我的缓存行大小是64字节,但它可能是32字节 - 在此处编写最终代码之前等待确认.

Igo*_*sky 5

Cortex-A系列程序员指南,第17.4章(注意:ARM11的一些细节可能有所不同):

使用整个高速缓存行的LDM然后使用整个高速缓存行的STM写入这些值来实现memcpy()的最佳性能.商店的对齐比负载的对齐更重要.应尽可能使用PLD指令.加载/存储单元中有四个PLD插槽.PLD指令优先于自动预取器,并且在整数流水线性能方面没有成本.最佳memcpy()的PLD指令的确切时间在系统之间可能略有不同,但PLD到当前复制行之前的三个缓存行的地址是一个有用的起点.