【知乎】龙芯的LA664架构,很好也很粗糙
股市策划师
2024-06-21 01:03:06
0

龙芯的LA664架构,很好也很粗糙

有言以对默无声

希望亲眼见到人类步入星际文明的硬核科幻迷、RPG游戏开发者

19 人赞同了该文章

目录

收起

前端分支预测与指令获取重命名乱序执行整数和浮点执行引擎AGU与Load/Store单元缓存层次结构与存储器设计结论

龙芯LA664是乱序六解码六重命名六分派十发射端口的结构设计,与中科院计算所的香山昆明湖非常相似,和intel的sunny cove,在设计上有一些相似之处。

前端

LA664的采用分离式前端,分支预测和指令缓存解耦的分离式取指架构,这是目前主流高性能架构的前端取指架构。分支预测单元提供取指请求,写入一个64条目的FTQ,该队列将其发往取指单元,送入指令缓存。 取出的指令码通过预译码初步检查分支预测的错误并及时冲刷预测流水线,检查后的指令送入指令缓冲并传给译码模块,解码后送入一个48条目的微指令队列,最终形成后端的指令供给。

分支预测与指令获取

CPU的流水线从分支预测器开始,分支预测器决定从哪里获取指令,对于实现高性能CPU至关重要。将流水线引向错误的目的地会导致工作的浪费,而确定跳转目标的时间过长可能会导致流水线出现空泡。LA664的分支预测的准确性似乎相当不错,与Intel和AMD的现役分支预测器相当,像Zen3的分支预测器一样几乎没有空泡,使用了恰当的延迟和准确率的分支预测器组合来预测分支指令。

如果没有出色的分支预测能力,CPU的性能将难以随着内核的增大而有效提升。增加缓冲区的大小可以保持更多的指令同时运行,但如果运行的都是错误预取的指令,那么增大缓冲区也不会有效提升性能。

分支预测器(BPU)的目标是加速分支指令的处理。预测分支的走向当然很重要,但是快速完成这个过程同样关键。如果分支预测器在引导前端方面花费太长时间,可能会导致流水线中的指令出现空泡的情况。为了加快速度,LA464使用了具有64个条目的L0 BTB。如果分支目标来自于BTB,前端根本不需要停顿。而LA664更进一步,与intel的Sunny Cove一样使用TAGE-SC-L的两级分支预测器,其主要组成部分包括快速预测器和精确预测器。

其中,快速预测器是一个256条目的microBTB(L0 BTB),精确预测器由5120(4096+1024)或更高条目的L1 BTB、TAGE-SC、ITTAGE、RAS组成。快速预测器提供无空泡的预测,延迟似乎是一个时钟周期。精确预测器各组成部分的延迟在 2~3 个时钟周期之间,TAGE-SC是直接预测器,TAGE是主预测器,延迟为2个周期,SC是辅助预测器,延迟为3个周期,ITTAGE是间接预测器。分支预测器的各个流水级都会连接L1 BTB,一次预测会经历三个流水级,每一个流水级都会产生新的预测内容。一旦第一个预测流水级存在有效预测结果,或者后续预测流水级产生不同的预测结果。

这些分布于不同流水级的预测器具有比较精确和高吞吐量的分支预测,从而近乎无空泡分支预测。

LA664和最近的Intel、AMD的6宽架构的分支预测器实现了接近完全准确的全局分支历史,推测更新的机制使得每次预测都会考虑预测块内的条件分支指令个数和预测方向,从而计算新的全局历史并在新的预测中使用。这种实时更新的方法能够更准确地反映当前程序执行的分支模式,提高预测的准确性。覆盖逻辑中加入全局历史的比较机制确保了流水线中的预测结果与之前流水级的结果一致。一旦发现后续流水级的预测结果与之前的不同,就会冲刷流水线并重新开始预测,从而避免了误差的传递和积累,提高了整体预测的稳定性和准确性。预测后存储全局历史的副本机制允许在预测结束后将当前使用的全局历史存储到FTQ中,并在误预测恢复时读出并送回BPU。有助于更快地纠正错误预测,减少处理器的延迟和性能损失。

如果分支目标溢出了256个条目的BTB,则CPU必须等待从L1i中获取分支,然后计算目标地址。此时,已执行的分支的延迟基本上是L1i延迟,对于LA464来说,这个延迟似乎是三个时钟周期,LA664是二或三个时钟周期。相比之下,即使处理成千上万个分支,最近的英特尔和AMD CPU的延迟也只有一到两个时钟周期。这种延迟尤其令人痛苦,因为3A6000的时钟频率远低于AMD或英特尔的芯片,因此分支延迟的实际时间非常高。

LA664 和 intel、AMD 和 ARM 在2011年后的大多数核心以及兆芯的永丰与海光四号一样可以通过使用分支预测器从指令缓存侧驱动预取来维持巨量指令压垮BTB情况下的高指令吞吐量,LA664可以预取4条目的指令,在程序执行到预取的指令时,可以直接从指令缓存中获取指令,而无需等待指令从内存中加载,从而显著提高了指令的吞吐量。此外,通过使用分支预测器,处理器可以在执行分支指令之前预取分支目标地址处的指令,从而进一步提高了预取的效率。之前的LA464没有此项功能。

跳转到多个目标的间接分支预测会更加困难,因为分支预测器也必须在目标之间做出选择。这些复杂的分支也被称为间接分支,因为它们告诉CPU跳转到一个寄存器中的地址,而不是直接编码目标地址。对于单个间接分支,LA664可以跟踪大约48个目标,比LA464高一倍。大约有1024个总的间接目标被跟踪,比LA464高一倍。

虽然它不如zen3的间接分支预测能力,但也接近sunny cove的水平了。这种间接分支处理能力水平还不错。间接分支预测也很受欢迎,因为面向对象编程语言倾向于使用间接分支来处理方法调用。

重命名

在指令被获取和解码后,重命名器必须给他们分配后端资源并跟踪它们。除了为了消除寄存器假依赖而进行的寄存器重命名之外,重命名器还可以使用某些技巧向执行引擎暴露更多的并行性。龙芯和最近的英特尔和AMD CPU一样可以轻松清除寄存器到寄存器的移动(Move Elimination)和零化惯用语(zeroing idioms handled),提高重命名的IPC。

乱序执行

吸收掉cache和内存的延迟是保持高性能的关键,龙芯使用类似Zen3的大规模乱序执行引擎来实现这一点。两者都有256个条目的ROB,以及类似大小的寄存器堆。

Zen3使用为FP域设计了带有NSQ的分布式调度器,用来在高频下控制SIMD指令的延迟,而龙芯则为INT、FP、Meomory 每个域都配置了共48条目的调度队列,并没有NSQ的设计。

与LA464相比,LA664有更大的ROB和寄存器堆大小,并且加强了非常重要的调度器的保留站/发射队列的大小,大的保留站/发射队列能够吸收更多cache和内存的延迟,让流水线吞吐更多的μops,提高性能。虽然LA664的调度器并没有Zen3那么大,但考虑到Zen3的设计频率在4GHz以上,而LA664的目标只有3GHz以上,这就不奇怪了。

整数和浮点执行引擎

跟LA464相比,LA664的INT指令吞吐量提高了一些,它和LA464一样有四个ALU pipelines。LA664的改进在分支语句和乘法的处理上。LA464每个周期只能解决一个分支,即使分支未被采用。而LA664和Intel的Sunny Cove 和AMD Zen3一样可以维持每个周期两个分支,通常提供至少其中一个不被采用。

3A6000每个周期可以执行四个标量整数加法,龙芯在整数吞吐量方面确实具有优势。与LA464一样,3A6000每个周期可以执行两个标量整数乘法,而除了Gacemont以外的大多数核心只能执行一个。

即使在3A5000的低时钟速度下,它的绝对吞吐量也可以超过2020年之前的ARM和x86竞争对手。LA664和LA464一样有两个向量执行端口,并且FP执行延迟仍然较高。无论向量宽度如何,浮点加、乘和融合乘加的延迟都为5个周期。不及Zen3的4个周期。

而向量整数操作更好一些,向量加法具有单周期延迟。与LA464一样,LA664也能在每个周期能够执行两个256位向量整数MAC,与Sunny Cove相当。

AGU与Load/Store单元

访存操作从地址生成开始,AGU(address generation unit)计算load或store操作要访问的内存地址,并将其传递给load/store单元。LA664核心具有四个AGU,由这两个load AGU和store AGU组成,每个时钟周期可以执行四个内存操作。这使得它在地址生成性能上大致与Zen 3和Sunny Cove相当。

一旦生成了虚拟地址,它们会被传递到load/store单元。该单元确保内存依赖关系得到遵守,并将虚拟地址转换为物理地址。为了加快速度,龙芯LA664和LA464一样,可以在地址未知的情况下预测性地执行load操作。

如果一个load操作从之前的store操作中提取数据,龙芯LA664和LA464一样可以使用7个周期的延迟来做数据转发,只要加load作位于store操作范围内且两者之间的访问没有跨越256B的缓存行边界。然而,对于2.5 GHz的CPU来说,7个周期的延迟并非最佳表现。Zen 1虽然具有相同的延迟,但时钟速度更高,而Skylake则可以在5个周期内转发存储数据,仅比未争用的load操作多1个周期的延迟。

如果访问跨越256B缓存行,则load/store单元的工作会变得更加困难,因为这将涉及两个L1D访问。这些访问被称为“不对齐访问”,因为它们跨越L1D对齐边界,LA664和LA464一样采用了这种非对齐缓存行访问设计。龙芯通过在两个周期内执行它们来处理不对齐的load,这并不算过分,尽管新的Intel和AMD CPU根本不会受到任何不对齐的load惩罚。对于LA464来说,store要糟糕得多,因为不对齐的存储需要10个时钟周期。早期的Intel Core 2时代的CPU也遇到了类似的惩罚,但是最近的CPU通常要好得多。考虑到CPU的低时钟频率,这10个时钟周期的惩罚相当大。虽然LA664改进了此类延迟,但仍然不足以与Intel和AMD的现代设计相比。

3A5000拥有大小适中的64 KB L1D缓存,也是4路组相联的,以实现使用16 KB页面的虚拟索引和物理标记的寻址。而3A6000的延迟与3A5000完全一样,虽然4个时钟周期听起来并不算糟糕,但考虑到龙芯2.5GHz的频率,它应该有更好的表现。相比之下,AMD的推土机在更高的时钟速度和32nm工艺节点下,就实现了3个时钟周期的延迟,从而能达到4GHz以上的频率。

虽然龙芯的官方文件中显示3A6000有一个64 KB L1i,与3A5000一样,但实际上是每个线程拥有64KB,而一个核心有两个线程,它是8路组相联的。

之所以会出现这种缓存设计,可能与非对齐的cacheline设计有关系,龙芯L1i有一个512B的cacheline,每次可以读取2×256B的数据,因此LA664的缓存带宽非常高,一个256B 对应8个256bit 向量指令,每个周期可以从L1取8条指令。这种非对齐的 cacheline 设计对于提高缓存性能和效率可能具有一定的优势,但也存在一些问题和限制。

非对齐的 cacheline 设计可以更好地适应不同的应用场景和访存模式,从而提高了缓存的灵活性和适应性。

通过非对齐的 cacheline 设计,可以更有效地利用缓存空间,减少了缓存行之间的浪费,提高了缓存的利用率,进而提升了访存性能。

相对于传统的对齐的 cacheline 设计,非对齐的设计可能在一定程度上降低了成本,因为它更灵活地利用了缓存资源,减少了资源浪费。

然而非对齐的 cacheline 设计可能增加了缓存管理的复杂度,包括地址映射、替换算法等方面,因此需要更复杂的硬件支持和更高的设计成本。

而且非对齐的 cacheline 设计可能引入一致性问题,特别是在多核并发访存的场景下,需要额外的机制来保证数据的一致性,否则多核性能提升幅度反而不如单核提升来的大,这增加了设计和实现的难度。

非对齐的 cacheline 设计可能会引入更多的访存延迟和冲突,导致性能的不稳定性,特别是在高负载和多线程并发的情况下,可能会影响系统的整体性能表现。

非对齐的 cacheline 设计在提高缓存性能和效率方面具有一定的潜力,但需要综合考虑其带来的挑战这种非对齐的 cacheline 设计对于提高缓存性能和效率可能具有一定的优势,但也存在一些挑战和限制。非对齐的 cacheline 设计可以更好地适应不同的应用场景和访存模式,例如可以让单核IPC更高,虽然多核IPC可能会下降,这提高了缓存的灵活性和适应性。通过非对齐的 cacheline 设计,可以更有效地利用缓存空间,减少了缓存行之间的浪费,提高了缓存的利用率,进而提升了访存性能。

LA664与LA464不同,引入内存加载缓冲器(Load Buffer)的设计来提高,高内存密集型计算场景的性能。

当加载执行队列(或加载队列)被推测确定为满会导致处理器的前端推迟,处理器的性能和效率的降低。因此,在前端和加载队列(Load Queue)之间插入一个大小可能是20条目的加载缓冲器(Load Buffer),用于缓存加载队列的已发射加载指令。

加载队列的尺寸和操作可保持不变。加载缓冲器仅包含加载信息,并且可以显著地深于加载队列,而不会显著地增加尺寸和功耗。当加载队列未满时,将被推入加载缓冲器中的已发射加载指令传递到加载队列。当加载队列实际上被确定为满(而不是推测性地确定为满)时,已发射加载指令可以继续被推入加载缓冲器而不被推入加载队列。已经被推入加载队列的加载指令可以继续从调度器分派,但是尚未被推入加载队列的加载缓冲器中的加载指令暂时推迟分派(dispatch)。前端尚未被推迟,可能会继续发射其他包括加载指令的指令。已经被推入加载队列的其他指令类型和加载指令可能会继续被处理。仅当加载缓冲器也变满时,前端才被推迟,但是此时,调度器仍然保持用于乱序调度的指令,以使处理器流水线保持活动而不空闲。当加载队列未满时,加载缓冲器将已发射加载指令传送到加载队列,从而及时释放处理器资源。而当加载队列满载时,加载缓冲器能够临时缓冲已发射加载指令,直到加载队列再次可用。这种机制保证了处理器即使在负载高的情况下也能够继续工作,提高了处理器的吞吐量和性能表现。

在生成地址后,核心必须将虚拟地址(程序所见)转换为对应于DRAM中位置的物理地址。这种转换允许操作系统执行权限并为每个进程提供其自己的内存视图,确保一个行为不当的程序不会导致整个系统崩溃。然而,地址转换也会产生开销。TLB通过记忆这些地址转换来最小化开销。

LA464默认以16KB块或页来转换地址。而LA664和x86和ARM CPU一样使用4KB页。这项改进使得LA664的地址翻译的延迟比LA464降低了30%,让它在相同工艺下,理论上能达到比2.5GHz更高的3.3GHz频率。

缓存层次结构与存储器设计

一旦load/store单元完成检查,就会向存储子系统请求数据。与许多现代CPU一样,龙芯配备了三级cache。今天所有高性能的CPU都依赖于cache,因为DRAM性能的提升跟不上CPU性能的提升。

在带宽方面,龙芯的L1D能够处理256位的向量访存,能够在每个周期进行两次256位的load,或者一次256位的load和一次256位的store。因此,即使在AMD具有时钟速度优势的情况下,3A5000的L1D带宽仍优于Zen 1。然而,它无法与Skylake相抗衡。

与现今的许多CPU一样,龙芯拥有一个L2缓存,它可以降低核心访问L3的延迟。作为受害者缓存,3A5000的L2缓存为每个线程准备了256 KB,采用16路组相联的映射方式,延迟为14个时钟周期,性能中规中矩。

过去的十年里,Intel一直使用256 KB L2缓存,延迟仅为12个时钟周期,并且时钟速度也更高。实际延迟方面,3A5000的5.6 ns还不如FX-8350的4.8 ns,而Zen 1比FX-8350更快容量也更大。L2每个周期的超过24字节,与Zen 1差不太多。

L3可以说是该CPU的最佳功能之一,它为四核心簇提供了16 MB的容量,带宽和延迟也相当不错。L3作为受害者缓存,由四个bank构成。根据3A6000的用户手册,L3和核心之间通过使用AXI协议的“5×5 frequency division switch”进行连接。CPU核心作为主设备连接到switch上,而L3缓存切片则作为从设备连接。switch的每个端口的每个周期可以提供32字节的读取带宽和16字节的写入带宽。

3A6000,总共四个 L3 切片,每个切片4MB大小,每切片每周期可传输 32 字节数据,在 2.5 GHz 的频率下,L3 的理论带宽为 320 GB/s ,但实际上远远达不到这个值。可能是处理器核心无法跟踪足够多的L2 miss以吸收 L3 的延迟;或者是 5x5 switch内部存在争用的情况;也可能是L3的时钟频率低于核心频率。这让它看起来不像是个共享式16MB的L3,但实际上它是,只不过延迟有点高,带宽比较低。

无论何种场景,AMD 和 Intel 的 L3 的带宽都有明显优势。Zen 1 和 Skylake 不但每个周期能从L3读取更多的字节而且时钟频率还高得多。龙芯确实拥有容量上的优势,但在面对更现代的AMD和Intel芯片时,这个优势也会消失。

值得肯定的是,龙芯的L3缓存要比Bulldozer好得多,随着线程数的增加,L3带宽大致呈线性增长。当龙芯处理器核数超过四个时,L3带宽的扩展性应该也会很好,因为每个L3实例是专属于四核簇的。就像AMD的Epyc一样,随着添加更多的核心簇,L3带宽应该会线性扩展,除非出现某种夸张的错误。

L3具有约40个周期的延迟。在周期计数方面,这并不算太差,与Zen 2处理器相当。然而,对于运行在2.5 GHz上的CPU来说,16纳秒的绝对延迟相当不令人印象深刻,龙芯处理器应该缩短L3的延迟。如果3A6000处理器未命中L3缓存,则通过第二级的AXI switch访问DDR4内存控制器。

龙芯3A5000的内存控制器质量很差,可能为了省钱买了一些大路货,而3A6000的内存控制器升级了不少,但仍然不太行,延迟和3A5000没有太大区别,也没有为高电压和温差做专门设计。3A6000的用户手册显示,DDR控制器在1.2V以上的电压,稳定性很差,并且这时对温度比较敏感。而龙芯3A6000在2.5GHz时电压就为1~1.1V左右,超频到2.8GHz以上电压就超过了1.2V。这让它跑高频显然不太现实,但龙芯仍然让它跑在了3200MHZ频率,这样的代价是牺牲了处理器的电压来换取稳定性,而这限制了处理器的频率。

龙芯3A6000的内存带宽相比前代提升了不少,但这仍然不够,运行256bit位宽的浮点指令跑2.5GHz,就能让浮点性能出现瓶颈,在更高频率下会更差。而64位宽的标量整数不会受到显著影响。

购买低价内存控制器的后果也是视情况而定的。日常任务,如网页浏览或文字处理,可能没有问题。服务器程序、HPC工作负载、图像处理、视频编辑和并行代码编译可能会有问题。

我们还应该记住,这是一款运行在2.5 GHz上的四核芯片。随着Loongson尝试提高时钟速度或核心数量,内存瓶颈将会变得越来越严重,因为计算与带宽的比率将变得更糟。这也适用于延迟方面,144.5 ns在2.5 GHz时为361个时钟周期,但在4 GHz时为578个时钟周期。在某种程度上,3A5000和3A6000的低时钟速度掩盖了其低下的内存性能。

LA664并不是为高频设计的,很明显这是一个设计时钟频率在3GHz左右的低频高IPC架构,但功耗控制并不理想,这可能来源于龙芯孱弱的物理设计水平。

结论

龙芯的LA664架构展现出了一定的潜力和进步,尽管在某些方面仍显得粗糙。

其采用的乱序六解码六重命名六分派十发射端口设计,类似于中科院计算所的香山昆明湖,分支预测器的一些设计与英特尔的Sunny Cove相似,展现了对现有领先处理器设计的一定程度的模仿和超越。

LA664在分支预测准确性方面表现不俗,几乎没有空泡,这与Zen3等处理器相当。处理器还采用了有效的移动消除和零化惯用语处理技术,通过大规模乱序执行引擎实现了高效的重命名,提高了IPC。

相比于前代LA464,LA664拥有更大的ROB和寄存器堆大小,加强了调度器的保留站/发射队列,提高了流水线吞吐量。

在整数吞吐量方面,LA664展现出明显优势,每个周期可以执行四个标量整数加法和两个标量整数乘法,使其在性能方面与竞争对手相当甚至更好。

尽管浮点执行延迟较高,但在向量整数操作和内存操作方面,LA664却表现亮眼,胜过了很多现役微架构。

在缓存方面,龙芯的L1i采用了512B的cacheline,每次可以读取2×256B的数据,这种非对齐的cacheline设计可能具有一定的优势,但也存在多线程资源竞争导致性能提升幅度不如单线程等问题。

龙芯3A6000的内存控制器存在一些问题,例如稳定性差且对温度敏感,这限制了处理器的频率。LA664在内存带宽方面有所提升,但仍存在一定瓶颈,尤其在运行256bit位宽的浮点指令时。虽然存在一些问题和限制,但LA664架构在整体性能和效率方面仍然表现出色,甚至能够超越早期的ARM和x86竞争对手。

LA664并不是为高频设计的,很明显这是一个设计时钟频率在3GHz左右的低频高IPC架构,但功耗控制并不理想,这可能来源于龙芯孱弱的物理设计水平。

综上所述,龙芯LA664架构在处理器性能和功能方面取得了一定进步,但也在例如 功耗,电压控制技术,物理设计,互联总线,内存控制器等方面需要不断完善和优化,并修改一些bug,以达到更好的性能和稳定性。

编辑于 2024-02-14 20:02・IP 属地中国香港

龙芯

中央处理器 (CPU)

芯片(集成电路)

指令分支时钟龙芯预测器发布于:辽宁省声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。

相关内容

猴赛雷!商汤粤语大模型宣布...
5月29日,商汤科技在“商量粤语版发布会暨商汤科技十周年志庆启动礼...
2024-08-23 23:11:11
2024年2月18日全国主...
(原标题:2024年2月18日全国主要批发市场早籼稻价格行情) ...
2024-06-22 00:49:28
【知乎】龙芯的LA664架...
龙芯的LA664架构,很好也很粗糙有言以对默无声希望亲眼见到人类步...
2024-06-21 01:03:06
沪深两市成交额截至1月25...
  1月25日下午,截至目前,沪深两市成交额突破8000亿元,其中...
2024-06-16 22:50:32
郑州城建集团拟发行10亿元...
  2月22日,郑州城建集团投资有限公司对2024年拟发行10亿元...
2024-05-27 23:12:23

热门资讯

设计超跑比家用车容易?对谈意大... 设计跑车和家用车的区别是什么,电动化时代汽车造型会如何变化?乔治亚罗与前田育男,当两位资深汽车设计师...
伊朗外交部发言人表示 美国所谓...   国际在线报道(记者 李健南):当地时间11号,伊朗外交部发言人卡纳尼就巴以冲突、地区局势等举行新...
派对大战,腾讯捧个钱场 文 | 光子星球 吴坤谚 编辑 | 吴先之 文 | 光子星球 吴坤谚编辑 | 吴先之腾讯游戏的“后...
日本男篮主教练再次表示,“已经... 文/写在红尘上日本男篮主教练霍瓦特复仇心切,多次扬言要向中国男篮报仇。 2月24日下午接受媒体采访时...
抢钱俱乐部:美元1065压力调... 把握自己把握的行情。没有必要让所有的人都认同你交易。更不用把所有的交易利润都给别人说个不停,支持爱你...
北京又一老字号饭店遭吐槽,服务... 北京又一老字号饭店遭吐槽,服务差味道差,网友:这是要凉?冬天吃什么美食最合适?当然是火锅了,今天我们...
欧洲,变天了? 6月5日至9日,欧洲议会进行了最新换届选举,结果显示代表极右翼势力的保守主义与改革者党团(ECR)和...
外观大气且空间大,奥迪A6L值... 说起上年度推荐车型,正好小编自己也购买了一台豪华品牌中大型轿车奥迪A6L,这台车我在2023年9月底...
2024年2月18日全国主要批... (原标题:2024年2月18日全国主要批发市场杨桃价格行情) ...
韩国将HBM确定为国家战略技术... ①据报道,韩国将HBM定为国家战略技术,并将为HBM技术供应商提供税收优惠,如三星电子和SK海力士。...