小tree_666 小tree_666
关注数: 330 粉丝数: 562 发帖数: 3,207 关注贴吧数: 43
66的u-arch小课堂 为什么Apple Silicon在R24中这么强? 如你所见,今天我们要讲的是,为什么,Apple Silicon在Cinebench R24中表现如此的强,连隔壁的X86都甘拜下风,尤其是M4,我看我们的贴吧老哥都跑上192了,简直是非常的厉害。 首先我们需要明白R24是一个比较重LSU的一个benchmark,那么M4刚刚好大提升的就是这部分,那么今天我们引入我们的主题,LSU,LSU是CPU中很重要的一个部分,我们首先需要了解一下什么是LSU。LSU 是 “Load–Store Unit”(加载存储单元)的简称,是一个专门负责处理所有访存指令(即加载 load 和存储 store 指令)的执行单元。 下面我将从多个角度详细介绍其功能和内部结构。1. LSU 的主要功能 (1)执行访存指令LSU 主要负责将程序中发出的 load 指令和 store 指令送入内存系统进行处理。这包括根据指令中给出的基地址、偏移量等信息计算出实际访问的地址,并根据地址从缓存或主存中读取数据(load),或者将数据写回内存(store)。(2)地址生成与虚实地址转换为了确定内存中具体的位置,LSU 内通常会包含一个或多个地址生成单元(AGU)。AGU 负责执行简单的算术运算(如加法),将基地址与立即数或寄存器内容相加,从而计算出访问地址。与此同时,在采用虚拟内存的系统中,LSU 还需要将程序使用的虚拟地址转换成物理地址,这一过程一般依赖于 TLB(Translation Lookaside Buffer)来加速转换过程。 (3)处理访存依赖和数据转发在现代高性能处理器中,指令往往是乱序执行的。LSU 不仅要确保各条访存指令按正确的顺序完成(即满足内存一致性和程序顺序要求),还需要解决因数据依赖产生的潜在冒险问题。例如,若一条 load 指令依赖于一条尚未完成的 store 指令,LSU 可能会通过“数据前向转发”(Store-to-Load Forwarding)的机制直接将 store 指令产生的数据传递给后续的 load 指令,从而降低延迟并提高流水线利用率。 2. LSU 的内部结构,LSU 内部一般设计有两个队列: (1)Load Queue(加载队列)与 Store Queue(存储队列)为了管理所有访存指令, (2)Load Queue (LDQ): 用于暂存所有待执行的 load 指令,在这些指令执行前,会先进行地址计算和依赖检查; (3)Store Queue (STQ): 用于记录所有 store 指令,特别是在乱序执行中,store 指令可能提前计算出地址和数据,但数据真正写入内存时需要保证按程序顺序提交。通过存储队列,LSU 能够检测 load 与 store 之间的依赖关系,并在可能出现数据竞争时采用转发技术。 (4)地址生成单元(AGU)AGU 负责将load/store 指令中的地址计算任务具体化,结合基地址与偏移量,生成最终的内存访问地址。这一步骤对提高访存操作的效率至关重要。 (5)与缓存/内存系统的接口LSU 是 CPU 内部执行单元与外部内存系统之间的桥梁。它不仅向缓存(如 L1 数据缓存)发出数据请求,而且还接收缓存或内存返回的数据。在缓存命中情况下,数据可以迅速从缓存传递给 CPU;而在缓存未命中时,LSU 会协调从更低级别内存中取数,同时管理等待和重排操作。 总之,LSU(Load–Store Unit)是 CPU 中专门负责处理内存访问操作的执行单元。它通过内部的地址生成、Load/Store 队列以及数据转发等机制,确保 load 和 store 指令能够高效且正确地与内存系统交互。在支持乱序执行和高指令并行度的现代 CPU 设计中,LSU 的高效实现对于整体性能至关重要。这种设计既要求严谨的硬件逻辑,也需要在系统级别上考虑访存延迟、依赖检测以及缓存接口等多个方面,从而实现既严谨又高效的内存操作管理。这也就是我常说的,一个优秀的u-arch三要素,BPU,LSU,prefetcher,把这三个能够做好,才能达成performance和energy的最强。
首页 1 2 3 下一页