提问者:waynehao 2020-7-19
老师您好,有几个问题想请教下。1.如何保证transmitter访问vaddr会在L3 cache留下痕迹?是如何保证该痕迹不会在L1 L2 cache留下?
2.请问receiver为什么要计算出16个虚拟地址?16是如何得来的?
3.如何保证计算的16个虚拟地址都能映射到同一个L3 cache中?谢谢老师!
第一个问题,循环,循环里面就一个访存语句mov [vaddr],eax可以保证vaddr在L3留下cache entry。会在L1、L2中也留下,这是肯定的,对于transmitter不需要考虑这个问题,因为他只需要确保把receiver填充的16个entry任意踢出去一个就行了,在L1、L2留下痕迹也无所谓。真正有影响的是receiver,因为他有一个很重要的步骤是判断自己之前填充的entry是否被从L3中踢出去了一个,这个步骤是通过测量16个虚拟地址的遍历时间判断的,L1、L2的存在会对这个测量过程引入噪声,假设地址a和地址b都缓存在L3,a同时也出现在L2和L1,b只存在于L3,那么a和b的访存延迟就相差很大,这就是噪声
第二个问题,16是L3的缓存相联度,这个可以通过cpuz工具查看
第三个问题,我在第一章节的最后一课会讲解具体算法,现在应该还看不到