PRFM预取指令中的目标高速缓存级别似乎没有任何作用

时间:2018-11-29 16:00:24

标签: arm64 gem5

我想测试先验已知访问模式的预取影响。第一步,我尝试在可执行文件中使用嵌入式汇编程序指令使用预取指令,并在此处找到适当的语法: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802b/PRFM_imm.html

由对象转储获取的产生的程序集对于这两个L1都是预期的:

0:  340000c1    cbz w1, 18 <_Z8prefetchPhj+0x18>
4:  52800002    mov w2, #0x0                    // #0
8:  f8a26800    prfm    pldl1keep, [x0, x2]
c:  11010042    add w2, w2, #0x40
10: 6b02003f    cmp w1, w2
14: 54ffffa8    b.hi    8 <_Z8prefetchPhj+0x8>  // b.pmore

和L2:

0:  340000c1    cbz w1, 18 <_Z8prefetchPhj+0x18>
4:  52800002    mov w2, #0x0                    // #0
8:  f8a26802    prfm    pldl2keep, [x0, x2]
c:  11010042    add w2, w2, #0x40
10: 6b02003f    cmp w1, w2
14: 54ffffa8    b.hi    8 <_Z8prefetchPhj+0x8>  // b.pmore

尽管预取确实可以减少执行时间(在系统仿真模式下使用次要CPU模型),但在两种情况下,输出统计在执行时间和缓存行为方面都是相同的。测试了不同的缓存配置,所有缓存都具有足够的容量来容纳预取的数据(当然,没有硬件预取,并且在确保数据不存在于任何缓存中之后)。根据缓存统计信息,似乎这两条指令都被视为都针对L1缓存。

针对不同的目标级别是否有不同的实现方式,还是gem5以相同的方式执行了两条指令?如果是后者,那么将来的计划中是否包括这样的扩展?

0 个答案:

没有答案