当应用于注册时,银行业务是什么意思?


13

关于StackOverflow的一个问题的答案是,在ARM的存储寄存器中,存储是什么意思,这表明在应用于寄存器时,存储的含义有些混乱。

银行业务对注册人意味着什么?

Answers:


16

当应用于银行时,银行有两个不同的含义。

银行注册的中断处理

与StackOverflow问题有关的意义类似于在函数中的(内存)存储区切换(由某些8位和16位处理器使用)中的使用。寄存器集合的名称映射到物理寄存器的不同集合。ARMv7为其16个GPR中的7个提供了一个额外的存储体,并为堆栈指针寄存器和链接寄存器提供了另外5个存储体(ARM使用链接寄存器来保存PC,以用于从中断返回)。安腾为其31个静态GPR中的16个提供了一个额外的存储库。(MIPS提供了全部31个GPR的集合,称它们为“影子寄存器集”。)

与内存库切换不同,这种类型的寄存器库的主要目的(通常)不是扩展可寻址的存储,而是通过避免保存寄存器值,装入中断处理程序使用的值以及恢复原始值来提供更快的中断处理。寄存器值并简化中断处理。

(使用应用程序的堆栈保存寄存器状态可能会使为该堆栈分配的内存溢出,并产生一个异常,然后必须以某种方式处理状态保存。更糟糕的是,如果紧随堆栈限制超出的内存页可以被写入升级了中断处理程序的特权,但不是应用程序的特权,那么应用程序将有效地写入其没有写许可权的页面。一些ABI通过将一个或多个寄存器定义为跨中断易失性来避免了此问题。处理程序加载指针以保存状态,而不会破坏应用程序状态,但是与存储寄存器不同,此类软件定义的中断易失性寄存器不能被应用程序软件信任为不变。)

(已建议使用这类寄存器组作为固定窗口来扩展可用的寄存器数量,例如,Rajiv A. Ravindran等人提出的“使用窗口寄存器文件增加低功耗处理器中有效寄存器的数量”, 2003。也许还会注意到与寄存器栈的相似之处,如Itanium和SPARC(使用术语“寄存器窗口”),它避免了函数保存的寄存器保存和恢复开销,尽管这些机制通常会移动寄存器名称而不是交换它们出来)

在硬件方面,可以通过在指令解码中重命名寄存器来实现存储区寄存器。对于ARM相对复杂的银行系统,这可能是首选的机制。对于像Itanium所使用的那样具有一个具有两个寄存器数量的能力的单个额外存储体的更简单的银行系统,将重命名合并到寄存器文件本身的索引中可能是可行的。(当然,这与用于支持乱序执行的某些重命名形式不兼容。)

通过认识到不同的存储体不能同时访问,使用此机制的巧妙优化可以通过使用“ 3D寄存器”来减少高度移植的寄存器文件的(线路受限)区域开销。(此技术是在SPARC的寄存器窗口的上下文中提出的-Tremblay等人,“用于超标量处理器的三维寄存器文件”,1995年-英特尔在SoEMT中使用了一种变体-“多线程,具有奇偶校验的双核Itanium系列处理器上的128字寄存器文件”,Fetzer等人,2005年。)

银行业务以增加可能的访问次数

术语“银行”用于寄存器的第二种含义是指将一组寄存器分为若干组(组),每个组可以并行访问。使用四个存储库可将最大访问次数增加四倍,从而在给定有效访问数的情况下,每个存储库可支持更少的访问端口(减少面积和能源消耗)。但是,如果给定周期内的访问次数未均匀分布在存储体中,则将无法实现最大访问次数。即使相对于所需的访问数量有大量的存储区,在最坏的情况下,存储区冲突也可能将实际访问计数限制为单个存储区提供的端口数。

关于银行注册文件的学术论文很多(Google学术搜索),并已提出了几种通用技术来减少银行冲突的影响。最明显的技术是对指令进行缓冲(就像对无序执行一样),提供了一些银行冲突的统计平均值。还可以在指令准备执行之前读取寄存器操作数(例如,如果另一个操作数尚未准备好或结构性危险延迟了执行)。将寄存器分配给银行可以利用有关预期用途的信息,以减少冲突的可能性。(软件可以通过按预期方式优先使用寄存器来提供帮助。)使用虚拟物理寄存器名称,可以延迟分配物理寄存器名称(并因此分配存储区),直到将值存储在寄存器中为止。

这种类型的银行业务有时称为伪多端口,因为它提供了大量访问端口的错觉。此技术通常用于高速缓存,因为由于其他原因,物理结构经常被划分为单独的内存阵列。

(这种存储的一种替代方法是复制寄存器文件。使用寄存器文件的两个副本可以使每个副本需要一半的读取端口,尽管需要相同数量的写入端口。此技术在POWER2和Alpha 21264中使用并且通常用于高性能处理器。)

摘要

将这两种类型的存储区分开来可能是有帮助的,例如临时存储区(其中存储区选择在整个时间范围内分布)(例如ARM的用于快速中断的存储区寄存器)和空间存储区(其中存储区访问可以在时间上并发但在空间上分布)。

时间存储通常会暴露给软件,并用于减少中断的开销(和复杂性)。(从概念上讲,“事件多线程切换”处理器中的线程切换与中断处理非常相似,并且可以使用类似的机制来减少开销。)

空间存储不是ISA的一部分(尽管Itanium要求加载和存储浮点寄存器对以使用偶数和奇数寄存器号-如果使用寄存器轮换不能保证这一点-允许简单的两行设计提供额外的功能)寄存器文件访问要求),并用于降低每个周期提供大量寄存器访问次数的成本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.