缓存如何提高流水线处理器的性能?
How could cache improve the performance of a pipeline processor?
我知道访问缓存比访问主内存快得多,而且我对所有这些未命中率和未命中惩罚的内容有一个基本的了解。
但这只是我的想法:缓存如何在流水线处理器中发挥作用?
根据我的理解,单个时钟周期所花费的时间是所有进程中所花费时间最长的下限。比如访问cache需要1n,访问主存需要10n,那么时钟周期至少要大于10n。否则该任务无法在需要时完成。那么即使缓存访问完成,指令仍然必须等待到下一个时钟周期。
我正在想象一个基本的 5 级流水线过程,包括指令获取、解码、执行、内存访问和写回。
我是不是完全误解了什么?或者在现实中我们有一个非常复杂的管道,其中内存访问被分解成几个部分,比如缓存检查和主内存访问,这样如果我们命中了,我们可以以某种方式跳过下一个周期?但是如果前一个指令没有跳过一个周期而当前指令跳过一个周期也会有问题...
我正在挠头...任何解释将不胜感激!
循环时间不是所有进程中最长耗时的下限。
实际上,一次 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 将得到更好的利用:该算法将首先将数据提取到缓存中,算法的其余部分将只使用缓存来读取和写入数据值。
我知道访问缓存比访问主内存快得多,而且我对所有这些未命中率和未命中惩罚的内容有一个基本的了解。
但这只是我的想法:缓存如何在流水线处理器中发挥作用?
根据我的理解,单个时钟周期所花费的时间是所有进程中所花费时间最长的下限。比如访问cache需要1n,访问主存需要10n,那么时钟周期至少要大于10n。否则该任务无法在需要时完成。那么即使缓存访问完成,指令仍然必须等待到下一个时钟周期。
我正在想象一个基本的 5 级流水线过程,包括指令获取、解码、执行、内存访问和写回。
我是不是完全误解了什么?或者在现实中我们有一个非常复杂的管道,其中内存访问被分解成几个部分,比如缓存检查和主内存访问,这样如果我们命中了,我们可以以某种方式跳过下一个周期?但是如果前一个指令没有跳过一个周期而当前指令跳过一个周期也会有问题...
我正在挠头...任何解释将不胜感激!
循环时间不是所有进程中最长耗时的下限。 实际上,一次 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 将得到更好的利用:该算法将首先将数据提取到缓存中,算法的其余部分将只使用缓存来读取和写入数据值。