相联一词通常用于存储器和缓存等计算机组件中。在存储器中,相联指通过存储地址在存储器中找到相关数据的过程。在缓存中,相联则指在缓存中查找数据的方式。全相联是其中一种特殊的相联结构,它与其他相联结构的不同点在于,每个存储地址或数据块在缓存中都可以存储在任何一个位置上,没有任何限制。
相比于其他相联结构(比如直接相联或组相联),全相联拥有几个优点。
首先,由于每个数据块都可以放到任意的缓存行内,可以最大程度地减少缓存不命中率。因为任何数据块都可以在任何缓存行内找到,所以任何缓存不命中都只是单纯的没有预测到需要的数据,而不是行已经被占用的情况。
其次,全相联结构可以在多个层级的缓存中使用,因为每个数据块在任何缓存行内都是唯一的。这就使得在更高级别的缓存中实现全相联成为可能。
虽然全相联拥有很多优点,但是它也有一些缺点。
首先,全相联比其他相联结构需要更多的硬件实现。CPU需要评估所有的缓存行来查找所需的数据,这会增加延迟和设计难度。在计算资源和功耗限制的情况下,这种代价非常高。
其次,全相联对于高流量的访问(比如服务器或多媒体应用)来说,缓存的大小需要更大,这会导致成本更高的直接结果。
虽然全相联不是最优的缓存结构,但在某些情况下,它仍然被广泛应用。其中最常见的场景之一是TLB(Translation Lookaside Buffer,翻译后备缓存器)。
TLB扮演的角色是将虚拟地址翻译成物理地址,以检索正确的数据。TLB中的词条有点类似于缓存行,在TLB中全相联结构意味着每个虚拟地址都可能出现在任何一个词条中。这使得TLB相对于其他结构来说更加灵活,因为没有ID和TAG这样的硬性的限制。