作者回复: 第一个问题,是物理地址,其实你后面第二题的分析差不多就能推导出来这里必须用物理地址了。你的第二和第三问,猜想都是对的。你掌握得很好嘛!
作者回复: 1. 你的猜想是对的。如果读取的时候缓存不命中,这一次读数据往往都要上百年时钟周期。但是访存却不必要等cache line全部填完,它只要拿到自己想要的数据就可以了,cache line可以交给其他模块继续填充。CPU的模块之间是并行的。还有一点,如果是连续的内存读取的话,内存控制器这个模块是可以做加速的,这种优化就可以让访存和总线传输足够快。 2. 一般来说,L1/L2是SRAM,L3常见的是STT-MRAM或者是eDRAM。价格是一方面吧,关键是CPU的面积,就算你不计成本的话,功耗,散热都会受面积的影响,我们不可能无限制地增加电路面积。制程的缩小有利于在同样面积的芯片上刻录更多的电路。 3. 确实,你学习得很深入。我们课里没有提icache,是觉得概念比较多,我希望尽量简化。没有更多的icache缓存是因为没有必要,因为指令毕竟还是顺序执行的最多。不像数据cache,访问哪个内存块随机性大一些。
作者回复: 有专门的电路呀。它不占据缓存块的空间哈。你后面引用的那个公式里是不包含这几个字段的。
作者回复: 其实核心点不在于读和写,而在于是否在多线程之间共享。单线程的话,读写都可以加速。多线程就要小心了,如果都有写操作的话,要注意伪共享的情况。
作者回复: 谢谢~其实我们第15节课就已经解释了,你可以对照一下~
作者回复: 对的,是啊:)
作者回复: 不是吧。我的原文里是写cache的大小是组数,路数和cache line size的乘积。这句话你明白了吗?那么一个cache line就是64字节,我们看到总共有8路,所以算的是64组呀。我觉得这里写得还算清楚,你再看一下原文?
作者回复: OK。我们第15节课也有解释,可以对照着理解一下。