This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
测试 cache hit ratio 的时候可以用while(1);函数来代替 100% hit ratio 吗?
CPU 硬件不能識別 c 代碼, 真正重要的是機器內碼.
但是 "while (1) ;" 這句 c 代碼,我們可以合理的預期機器代碼將是 0x3FFF; 從而達到100%的命中率。
我覺得以下順序機器代碼將有0%的命中率。
3C04 m0: jmp m1
4303 nop
4303 nop
4303 nop
4303 nop
3C04 m1: jmp m2
4303 nop
4303 nop
4303 nop
4303 nop
3C04 m2: jmp m3
4303 nop
4303 nop
4303 nop
4303 nop
3C04 m3: jmp m4
4303 nop
4303 nop
4303 nop
4303 nop
3C04 m4: jmp m5
4303 nop
4303 nop
4303 nop
4303 nop
3FE6 m5: jmp m0
4303 nop
4303 nop
4303 nop
4303 nop
MCU这个预读取机制非常简单直接,是否能够hit和编译器生成的代码和cache的大小有关,所以如果你的跳转超出了范围,那就是完全无法hit。如果你的下一条指令总是在接下来的cache大小范围内,那就总是能hit.
楼上的代码,你看到的是汇编的结果。你自己的话可以用汇编语言做这样的函数比较方便,因为用label直接指定地址比较方便,用c语言和link script也可以指定函数的地址。只要保证这些跳转(函数的调用)之间的地址(距离),超出了cache的大小,就能做到0%的hit ratio.