这是物理上独立的一个页面,但是在逻辑上他依附于从这篇文章开始的一系列文章。它的主要目的是澄清在我的翻译过程中令人望而生畏的体系结构中莫衷一是的术语。
1. dependency/hazard:这两个说法严格来讲是可以区分的,但是大多数情况下大家会混用。严格地说,dependency 是一个程序本身的特性,而 hazard 是由于对于 dependency 的不正当处理造成的处理器的混乱。
1. dependency/hazard:这两个说法严格来讲是可以区分的,但是大多数情况下大家会混用。严格地说,dependency 是一个程序本身的特性,而 hazard 是由于对于 dependency 的不正当处理造成的处理器的混乱。
2. in flight:In flight 的指令并非一定仅限于正在 FU 里面执行的指令。更广义地讲,他也包括已经执行完毕但是没有 retire 的指令和正在 reservation station 中等待的指令。从这个意义上讲,instruction window 包含的就是所有 in flight 的指令。
3. instruction window: 有两个截然不同的说法。比较常见的解释是,instruction window 中的指令是那些正在 functional unit 中执行的指令。或者也可以扩大一下,是在ROB中还没有 retire 的指令。在这个说法中,instruction window 其实只是一个逻辑上的概念。整本量化里面应该使用的是这个含义。另一种说法是指的在 instruction fetch 和 decode/renaming 之间的一个 buffer。当由于某种原因不能进行 decode 或者 rename 的时候,fetch 单元会把指令取到这个 buffer 里面而不停顿。不过通常这个 buffer 被称为 instruction queue。这个说法中,instruction window 是一个物理上存在的存储结构。
4. interlock/stall/bubble:interlock 和 stall 可以认为是一件事情,即使得流水线停顿。通常停顿流水线的方法是 clock gating,或者说关闭流水线寄存器的 load enable 信号。但是组合电路的特性是即使不往寄存器里写,每个周期仍然会有数据被读出,这些数据是无效的因为前半段的流水线正处于停顿状态。这时候我们需要一个 valid 位来告诉后半段的流水线级:现在给出的数据是无效的,不要处理它,直到 valid 位置 1。把 valid 置 0 的操作通常被称为插入了一个 bubble。
5. memory pipeline:概念上讲 memory pipeline 是指可以独立进行访存请求的通路。通常来讲,一个 memory system 有一条 memory pipeline,因为我们只有一条 address bus 和一条 data bus。因为在同一个时刻我们只能进行一个访存请求(虽然我们可以同时有多个 bank 在工作)。如果我们增加一组 bus,那么就可以说我们增加了一条 memory pipeline。有两种办法增加 memory pipeline。一种是现在所谓的多通道技术(multi-channel)。也即有两个独立的内存控制器(memory controller)。分别控制两套物理上独立的存储系统。另一种办法就是在向量处理器里面采用的,仍然只有一套物理上独立的存储系统,但是每个 memory bank 现在有多个端口,每个端口匹配一组 address 和 data bus。如果现在每个 bank 有两个端口,那么我们需要两组 address/data bus。这样我们可以同时发出两条访存请求,访问两个不同的 bank,并且可以在一个周期接受两个数据。在 Corinna Grace Lee 的 Ph.D. thesis 中提到说,相比于 superscalar 处理器而言,向量处理器需要的连接 CPU 和 memory system 的管脚数目明显要少,因为即使有多个 memory port,但是仍然可以只需要一组 bus,而不是想超标量处理器里那样每个端口都需要匹配一组 bus。她的意思应该是,对于向量处理器而言,访存地址的计算是在 memory system 中完成的,CPU 只需要一次性提供一组基本的访存模式的信息即可,因此虽然 memory controller 的设计是复杂的,但是一次 address bus 的使用就可以触发多个(同时的)访存请求。而对于超标量处理器而言,每一次访存请求的地址都需要 CPU 端首先计算出然后传送到 memory system。因此如果需要同时进行多个访存的话,就需要多条 address bus。Lee 也提到,在向量处理器中,gather/scatter 是一个特例,因为这类操作的地址没有固定模式,需要 CPU 端计算之后分别发送到内存系统。但是现在向量处理器完全有能力由内存系统完成这一计算过程。
No comments:
Post a Comment