高通吧 关注:187,752贴子:5,110,729
  • 27回复贴,共1

66的u-arch思绪飞扬

只看楼主收藏回复

听说8E2的CPU cluster,all core use shared L2 cache,这个desigb很有想法,这让我想到了HPCA25的一个paper,IBM的latera cache persistence algorithm,每个 L2 在eviction (替换)时,会把被换出的cache line通过ring bus“latera”(横向)write到最空闲或最少活动的 L2 里(这是“虚拟 L3”的实现原理:把原本要逐层写到大 L3 的数据转而写到某个在同作用域的 L2)。
在server层面同理:若在本芯片 L2 都无法容纳了,就把该行再“横向”写到另一个芯片上最空闲 L2(对应 vL4 作用域)。这样数据在 cache line 的生存期中会多次“lateral move”(横向移动),直到最终write back memory。
这样就让各个 L2 协同,像一个共用大缓存一样工作,无需真正构建巨大的统一物理 L3 / L4,还可以在配置更改、技术演进、芯片数量/server数量变动时灵活适配。
我们来看原理
基本原理
1.依赖活动计数器跟踪每个缓存单元(片内:8 个 L2;机柜内:8 片芯片)的安装/驱逐事件;时选取最低计数器的单元作为溢出目标(即 LRU 范围扩展);
2. miss时选取最低计数器的单元作为溢出目标(即 LRU 范围扩展);
3.溢出事件分级触发:
(1)Primary Castout (PCO):本地 L2 → 目标 L2;
(2)Secondary Castout (SCO):若目标 L2 再驱逐,则流向最低活动芯片的 L2;
(3)Tertiary Castout (TCO):最终写回对应内存端口或失效。
该机制将 L2 作为多级“Victim Cache”,在片内/机柜内构建虚拟 L3/L4,镜像传统包容性层级行为,又充分利用所有 L2 资源
自适应插入策略当应用工作集能驻留本地 L2 时,单一缓存计数器失衡会导致重复溢出并驱逐自身常用数据;引入中间 LRU插入:横向溢出行插入至行内第 1/n MRU 位置,而非最 MRU;若检测到溢出内容占满该插槽,则切换为 MRU 安装,以支持小工作集。
为什么会这样?因为传统的设计当你在L1 miss了,你就得snoop to L2,L2再miss你得上L3,SLC,隔壁L2/L3,DRAM。这样会产生 long latency,并且产生更多的energy waste。所以,我们可以让临近的不怎么用的shared L2/3 cache block当virtual L3/4。可以在一些high cache stress上获得+9-11% performance。
但是这么做,这是有代价的,IBM有好像17种L2 cache state,并且核心一多coherency直接裂开,想想每次L2 miss就要给所有L2发snoop……hhh,snoop满天飞。并且必然要解决你放data的时候别的L2 cache不忙,你读data的时候人家开始忙了的问题。


IP属地:陕西来自iPhone客户端1楼2025-04-19 20:36回复
    不过,这东西指望Nuvia做……怕是挺难的,IBM的技术突出的就是个DV很麻烦。


    IP属地:陕西来自iPhone客户端2楼2025-04-19 20:42
    回复
      2026-04-22 22:12:17
      广告
      不感兴趣
      开通SVIP免广告
      很牛掰的样子,大佬


      IP属地:广东来自Android客户端3楼2025-04-19 20:51
      回复
        簇间延迟不知道咋样


        IP属地:广东来自Android客户端4楼2025-04-19 21:28
        收起回复
          对于8ee2来说,所谓的l2就是他的llc吧,已经没有下级l3了,也用不到这种类似于privatecache转换shared吧,感觉开销巨大


          IP属地:山东来自Android客户端5楼2025-04-19 21:28
          收起回复
            好帖先收藏了,到时候ds出来再复习


            IP属地:广东来自Android客户端6楼2025-04-19 21:28
            回复
              听不懂


              IP属地:保加利亚来自Android客户端7楼2025-04-19 23:53
              收起回复
                为什么现在安卓U用得起缓存了?以前都是很抠唆的,820/821双核1mb和双核512kb L2,八核835-855都是2m L3,那会公版最大4mb了,865勉强有个4mb,但也只有一个512kb L2,888上了X1超大核,也才4mb L3被诟病,8g1挤到6mb。
                联发科更不用说了,天玑8000/9000之前的八核十核U全是1m或2m L3。甚至某些更低端的只有512kb。
                9500 L3 16mb+10mb slc,8e1 12+12+8m slc。。


                IP属地:广东来自Android客户端8楼2025-04-20 00:11
                收起回复
                  2026-04-22 22:06:17
                  广告
                  不感兴趣
                  开通SVIP免广告
                  苹果在这方面向来比较激进,但A15之后也比较平庸了,近三代的缓存规模一点没动。32mb缓存当时是牛逼了一把,但有的人不屑说只能这么搞了没东西了。。A16双p核加到16mb也没有人在意了。
                  再往前就是A10x,双核L2翻倍到8mb,当时就是要觉得不服,看这到这个缓存也服了。。


                  IP属地:广东来自Android客户端9楼2025-04-20 00:17
                  回复
                    簇间延迟会好很多


                    IP属地:加拿大来自iPhone客户端11楼2025-04-27 01:39
                    回复
                      谈古论今呢


                      IP属地:上海来自iPhone客户端12楼2025-06-09 09:10
                      回复
                        可以


                        IP属地:广东来自Android客户端13楼2025-09-17 19:23
                        回复