据我所知,访问缓存比访问主内存要快得多,而且我对所有那些未命中率和未命中惩罚内容有了基本的了解。
但这只是我的想法:缓存如何在管道处理器中有用?
根据我的理解,单个时钟周期所花费的时间受所有进程中所用时间最长的限制。就像访问缓存需要1n一样,访问主存储器需要10n,那么时钟周期时间应该至少大于10n。否则,该任务无法在需要时完成。然后即使缓存访问完成,指令仍然必须在那里等到下一个时钟周期。
我正在成像一个基本的5阶段流水线过程,包括指令获取,解码,执行,内存访问和回写。
我完全误解了什么吗?或者实际上我们有一个非常复杂的管道,其中内存访问被分解为几个部分,如缓存检查和主内存访问,这样如果我们得到一个命中,我们可以以某种方式跳过下一个周期?但是,如果当前指令没有跳过一个循环,那么也会出现问题......
我正在挠头......任何解释都会受到高度赞赏!
答案 0 :(得分:0)
循环时间不受所有过程中最长时间限制的限制。 实际上,RAM访问可能需要数百个周期。 有不同的处理器体系结构,但典型的数字可能是:
1 cycle to access a register.
4 cycles to access L1 cache.
10 cycles to access L2 cache.
75 cycles to access L3 cache.
hundreds of cycles to access main memory.
在极端情况下,如果计算是内存密集型的,并且不断丢失缓存,则CPU将非常缺乏利用,因为它请求从内存中获取数据并等待数据可用。另一方面,如果一个算法需要重复访问完全适合L1缓存的相同内存区域(比如反转一个不太大的矩阵),CPU将会得到更好的利用:算法将从获取数据进入缓存,其余的算法只使用缓存来读写数据值。