小tree_666 小tree_666
关注数: 330 粉丝数: 562 发帖数: 3,202 关注贴吧数: 43
晚上随便聊聊 最近写两篇文章,不免的感叹,在体系结构日益没活的今天,守住底线,把power提升的指标给新的architecture技术,比单纯的OC更重要,或许这个新的架构技术可能是value prediction,或许是Ahead Prediction,最终在CPU上实现出来IPC没有论文上畅想的那么高,但至少我们又向更极致的架构迈进了一步。 某厂打开了超频战争的序幕,这真的是体系结构的未来吗?如果某厂能够静下心,挑近几年ISCA,HPCA的技术实现几个,我相信风评不会差。可是呢,超频代替思考,分数直通大脑,功耗是不管的,跑分是要赢的。这和做SoC的初衷完全违背了,我记得17-19年,高通还在用ARM公版,虽然性能一般,但是省电啊。尤其Kirin 980、990,虽然我不是花粉,但我确实要承认,性能够用,但是足够省电,那时候A系就是反面教材,跑分高有什么用?你功耗高啊。自从21年以来,ARM Cortex-X发布以来,安卓性能追上来了,功耗呢?比Apple都高很多了。这真的是手持移动设备能承受得了的吗? 近一两年来x86和ARM的u-arch,intel提前撇垃圾桶,这真没得救,AMD的front-end,double-front-end,双前端,思想来自30年前的paper——Multiple-Block Ahead Branch Predictors。通过这种方式实现2-taken,非常的巧妙。 ARM公版C1-Ultra……改了L1D Cache的capacity,一般这玩意是不动的,估计是把L1D动了,连带着LSU,prefetcher带翻车了,ARM给cache做细颗粒度的cache替换算法,因为会增加power,所以万年64+64。但是现在变成64+128,或许这就是原因。 Apple的话,Donan-P的SFB(short forward branch)已经取消了,这个2-taken的实现效果和泛用性不佳。现在Thera-P,已经是Trace Cache,效果和泛用性非常好,up to 3-taken。之前Apple的CPU不支持2-taken,这是很致命的,在日常的workload中,按照一般3-4条指令一次跳转,两三次跳转一个taken来算的话,基本上让超过6-wide的部分用处不大了,这个还是挺要命的,没有2-taken只会让Apple Decode Width锁在10wide(即使现在解决了这个问题我认为Apple大概率还是会继续维持10wide一段时间,原因就是加宽带来的IPC提升几乎没有甚至开始反向提升)。还有Avalanche引入的LAP(load address prediction)、LVP(load value prediction),这些都是不错的架构技术,并且这几年Apple一直大改LSU,使得LSU的性能变得相当的强,而且在即使支持ARM MTE基础上的Apple MIE安全ISA,也没有太多的性能的衰减,开了可能就-0.5%吧。 最后就是高通,没啥说的,就目前测出来的结果,Oyron3就是个杂交产物。Coll-P的decode width加上依然是Firestorm的back-end,然后祖传超频超到死,乐,听说BPU有改进,到时候慢慢看怎么改的。说实话,华为的u-arch水平就是比高通好,要不是制裁,说不定能看到华为压高通一头的表现。华为的u-arch总结下来就是平庸,但这不是贬义,反而是褒义,没有突出的地方就代表没有短板,那么自然就不会差。而且华为在借鉴国际先进水平的技术的同时有自己的思考,decoupled front-end,一看就是,server下来的。 所以总结下来,在体系结构日趋没活的今天,坚持住底线的厂商应该获得更多的赞誉和支持。以超频为己任的厂商应该感到耻辱。 这就是我晚上的想法,可能看着很可笑,个人的力量没有办法左右大厂的规划,但这不代表他们就是对的,每个人应该有独立思考的能力,我们应该知道自己要什么,而不是厂商给什么,厂商就是对的。
66的u-arch小课堂——在实际能量约束下的提前分支预测 写在开头,假期比较忙,一直没有时间写新的文章,所以拖更了这么久,这次会一次更两章,把上次假期的拖更补回来,还是一样,由于本人是新手,文章的疏漏之处还望大佬们海涵。那么今天我们来看看ISCA25的论文——《Enabling Ahead Prediction with Practical Energy Constraints》。那么这是什么呢?接下来的文章会给你一个解答。不过首先,我们考虑一件事情,Ahead Predict 的动机与必要性。 我们之所以要做 ahead predict,本质是在ahead pred的路径仍然是关键路径之外,预先把多级分支预测(L0/L1 → L2/TAGE/Loop → ITP)的长周期算出来,用零延迟的提示(hint)去喂主取指通道,从而掩盖慢级预测带来的前端气泡。按流水线分解看:PCGen → BTB/L0(≈1c)→ L1 dir/target(≈1–2c)→ L2/TAGE/Loop/ITP(≈3–6c)→ Align/Decode → Rename → Dispatch。一旦 L1 未命中落到慢级预测,短流水线(10–12 stages)会立刻暴露停顿:IF/ID 带宽被白白浪费,后端可用宽度也被低效喂饱,IPC 直接损失。举例:若分支占比 ~20%,其中 ~10% 需落到 L2(约 2%/inst),而 L2 返回需 5 拍,则平均增加 0.02×5 = 0.10 CPI 的前端开销;对目标 CPI≈0.70 的中等宽度设计,这一项就可能带来 ≈12–15% 的 IPC 下降。Ahead predict 通过在副通道“超前滚动 PC”,提前计算方向与目标并缓存为可即取的 hint(如影子预测队列/轨迹缓存、与 I$/BTB 预取协同等),把“长周期放到后台、短路径零等待”,显著恢复前端利用率与 IPC。 1. 提前分支预测的原理、挑战及历史背景 提前分支预测(Ahead Prediction)的概念:提前分支预测是一种为解决分支预测延迟问题而提出的技术。传统的分支预测在预测某一分支时,需要利用该分支自身的程序计数器(PC)和当前可用的分支历史来查找预测信息。然而,高精度的分支预测器(如现代大型TAGE预测器)通常需要多周期才能产生结果。多周期延迟会降低处理器前端取指的吞吐率,每增加一个周期的预测延迟,性能就显著下降。为了隐藏这种预测延迟(prediction latency),Ahead Prediction让预测器提早数个分支开始工作:不使用当前分支的前序结果,而使用当前时刻可得到的历史和PC,直接去预测“未来的”某个分支。例如,跳过当前的N个分支,直接预测第N+1个分支,这样预测工作可提前N个分支进行,在真正需要该预测时(即取到该分支时)预测结果已经准备好,从而掩盖多周期的延迟。 面临的挑战:提前进行预测意味着缺失中间N个分支的实际方向信息。由于预测时刻比实际执行提前,这N个分支尚未被取指或预测,其走向(Taken/Not taken)未知。传统基于历史的预测算法需要这些中间分支结果来组成正确的历史模式,如果缺少它们信息,预测准确度会下降。更严重的是,同样的“提前历史”(Ahead History,即当前可用的全局历史)和PC,可能对应多个不同的未来控制流路径。换言之,用当前历史去预测一个将来的分支时,很难知道这个预测对应的是哪一条具体的路径。当不同路径的分支模式差异较大时,如果只给出一个预测值,可能会因为混叠(aliasing)导致严重失准 。这一现象可视为一种特殊的混淆:并非传统意义上由于哈希冲突导致的混淆,而是由于提前历史信息不足导致预测器无法区分不同未来路径所需的预测。 历史背景:多块提前(Multiple-block ahead)分支预测的思想由来已久。早在1996年,Seznec等人在ASPLOS提出多块提前分支预测(Multiple-Block Ahead Branch Predictors),尝试在一次取指周期中预测多个基本块。随后2003年,Seznec和Fraboulet进一步探索了Ahead Pipelining技术,将取指地址生成前移数拍,以隐藏延迟。这些研究表明,通过在分支预测流水线中引入前瞻阶段,可以一定程度上缓解预测延迟瓶颈。然而,当时的实现复杂度和资源开销使这类方案难以在工业界直接采用。2007年,Ishii在JILP分支预测大赛特刊中提出“提前计算的融合两级分支预测”,试图将Ahead预测思想与传统两级预测器融合。此外,Jiménez等人也在2005年研究了逐段线性分支预测和更复杂的感知器(Perceptron)预测,但主要侧重提高精度,对延迟问题亦有所关注。总体而言,“提前预测”作为概念被提出多年,但因实现代价高昂而未成为主流。
谈谈AMX/SME 我看吧里有些还不太了解的人觉得SME只是用来刷分的,这句话并不假,只不过少了很多句话。 首先,SME是Apple带着ARM把自家AMX的private ISA做成了shared ISA,成为了ARM-V9.2的扩展指令集,这代表着对于安卓SME是可选项而不是必须项。其次AMX是2019年Apple在Cebu上引入的矩阵运算单元,毕竟M means Matrix。在Ellis上翻了4倍规模引入了P/E-AMX,在Donan,Tahiti上正式转变成SME,但是其底子依然是AMX。 ARM和Apple类似物(Oyron)对SME的实现方式不太一样,Apple类似物顾名思义就是和Apple使用同样的实现方式,有P/E-SME,其dieshot/layout和Ellis时期的AMX非常相像。ARM就直接给SME挂DSU上,事实上从这张图能看出(图1,图2)SME/AMX其实就是另一个小的CPU,只不过被特化了只用于Matrix的运算。从这块我们也能倒推出来,其实Apple的AMX也就是个小的CPU。对于Apple来说,有了SME之后,他们就不怎么需要SVE2来处理长度超过NEON长度的FP instructions,超过了就撇AMX里去,反正那里支持256byte。扯远了,总之Oyron的SME实现和Apple是和Apple很接近,但是ARM就有些抽象,即没高通规模大,也没高通的实现好。 最后我们来聊聊SME的用途,它真的只是用来刷分的吗?我的回答是,是,也不是,安卓我不知道会用来干啥,但是Apple的用途有很多,例如Matlab的加速库可以调用AMX,这是比较出名的,还有一些不怎么出名的让人感受不到的方面,例如ML,一些需要快速反应的小型ML就可以调用AMX,毕竟如果走CoreML去调用ANE,不仅功耗巨高,延迟也很大,完全没必要。再就是相机这一块,图像处理就会用到AMX,然后DSP,数字信号处理也用AMX,vector和Matrix运算,这个前面说过了,还有无损压缩也会调用AMX,然后就是iOS26的3D空间图像,也是调用AMX,如果调用ANE就没那么快了。 总之,别成天说SME只能刷分,也不看看是谁家的SME,你感受不到也很正常,因为科技的进步是让你感受不到科技的存在。
1 下一页