早些年的时候,都说不能越大越好。
举个例子:一个核心有4m的12缓存,一个核心有8m的12缓存。
第一种情况:如果两个核心的数据都在l2中,且l2缓存已经满了,那么前者只需要在4m大小的数据垃圾里面找到自己需要的,而另一个需要在8m大小的数据垃圾里面寻找。此时就可以看出前者更快找到。
第二种情况:如果两者都已经被占用了4m的12缓存数据,那前一个核心只能继续在l3缓存里寻找,后一个核心则可以在l2缓存里寻找,而l2缓存的速度远超l3,那后一个往往更快找到。所以此时得出缓存不是越大越好。但为啥8e就可以玩两个超大核共享12m的12巨型缓存,这可是对很多场景的速度有很大的影响,却游戏实际效果很不错?
猜测:首先,说明以往的1m的l2缓存,远不够超大核用,因为超大核往往负责主线程,对CPU要求高的同时对缓存很大数据,实际游戏里,因为l2不够经常需要访问l3缓存,导致速度很慢。
对arm是否要照搬策略的猜想:
首先超大l2共享缓存不仅仅是会影响部分场景的延时,在延时要求高的地方会有副作用,同时有个很致命的问题,那就是成本,所以必须动刀l3来节省,而arm真的适合动刀13做巨型12吗?
arm的CPU架构是大中小逻辑,是有两种完全不同的专属架构,而且需要互通数据,因为日常使用的时候当小核性能不够就要线程转移给中核,当性能要求很低的时候,转移给处于更高效性能区间的小核,这样就能尽可能的节省功耗。
理想很美好,现实很残酷,如果3中核和4小核共用的是巨型l2缓存而非l3,对于xm系列中核没啥影响,可是对a7系列小核影响太大了,a7系列小核定位低性能区间能效好,但性能上限低,此时如果配巨型I2缓存,检索速度变慢非常多,而且arm对a7系列的推荐也就是512kb,一下翻24倍变成12m,延时很可能超标。
而高通的小核和中核没有区分,6个直接一样的,虽然有影响,但没有那么大。所以arm的a7系列和xm系列的区别,三丛集道路,看样子不适合盲目堆l2,并且此时需要l3互通数据。
个人想法改善:
既然如此,不如部分采纳高通的l2缓存灵感并结合arm大中小理念。
首先l2缓存方面:
1x5配8ml2缓存,3x5m共享6ml2缓存,4a730每个配512k6的l2缓存。
思路:主线程是需要高性能大l2缓存的,所以分配给x5没跑,而有部分游戏需要吃双核,还需要一个比较强力的核心配一个比较大的l2缓存,那就给共享l2缓存的x5m,一个x5m最多可以分配6ml2缓存,并且虽然共享6ml2缓存会在当一个核心不需要大缓存时,延时有副作用,好在x5m的性能不错,不会有太大的延时增加的影响。而日常使用中,小核a730往往分配的是既不需要性能,也不需要大缓存的小任务,所以没必要共享,也没必要给大l2缓存,全部分开,做到低延时高能效。
l3缓存方面:arm的小中大策略,日常使用小中之前会经常转移负载、尽量的实现好的功耗表现,而对于中大之间则没有频繁的转移,大型游戏的主线程负责核心是很稳定的最大核心,而轻度使用时单大核心往往处于休眠状态,并且加之小核选择了不共享l2缓存所以l3缓存方面:
x5有了巨型8ml2缓存不需要配l3缓存,3x5m和4a730共享4ml3(3x5m本身就共享了6ml2,加上a730所分配的任务也不需要大缓存,妥妥够用,最多a730负载转移给x5m时需要数据互通罢了),这样分开的l3缓存够用延时还能得到提升。
总计:1x5单8ml2,3x5m共享6ml2以及和4a730共享4ml3,4a730每个单配512k的12缓存。
一共16ml2缓存和4ml3缓存。
总结:为了秉承arm大中小思路,大核独占巨型l2缓存,中核既要兼容需要大缓存的情况又要尽可能减少延时增加的副作用,就共享6ml2取中庸之道,而小核则分别分配小l2缓存,极致追求能效和延时。而在数据互通方面,选择最频繁的3+4互通4ml3即可,因为l2的增加,l3不需要那么大并且在频繁数据互通迁移负载时,小l3的延时也能得到改善。
举个例子:一个核心有4m的12缓存,一个核心有8m的12缓存。
第一种情况:如果两个核心的数据都在l2中,且l2缓存已经满了,那么前者只需要在4m大小的数据垃圾里面找到自己需要的,而另一个需要在8m大小的数据垃圾里面寻找。此时就可以看出前者更快找到。
第二种情况:如果两者都已经被占用了4m的12缓存数据,那前一个核心只能继续在l3缓存里寻找,后一个核心则可以在l2缓存里寻找,而l2缓存的速度远超l3,那后一个往往更快找到。所以此时得出缓存不是越大越好。但为啥8e就可以玩两个超大核共享12m的12巨型缓存,这可是对很多场景的速度有很大的影响,却游戏实际效果很不错?
猜测:首先,说明以往的1m的l2缓存,远不够超大核用,因为超大核往往负责主线程,对CPU要求高的同时对缓存很大数据,实际游戏里,因为l2不够经常需要访问l3缓存,导致速度很慢。
对arm是否要照搬策略的猜想:
首先超大l2共享缓存不仅仅是会影响部分场景的延时,在延时要求高的地方会有副作用,同时有个很致命的问题,那就是成本,所以必须动刀l3来节省,而arm真的适合动刀13做巨型12吗?
arm的CPU架构是大中小逻辑,是有两种完全不同的专属架构,而且需要互通数据,因为日常使用的时候当小核性能不够就要线程转移给中核,当性能要求很低的时候,转移给处于更高效性能区间的小核,这样就能尽可能的节省功耗。
理想很美好,现实很残酷,如果3中核和4小核共用的是巨型l2缓存而非l3,对于xm系列中核没啥影响,可是对a7系列小核影响太大了,a7系列小核定位低性能区间能效好,但性能上限低,此时如果配巨型I2缓存,检索速度变慢非常多,而且arm对a7系列的推荐也就是512kb,一下翻24倍变成12m,延时很可能超标。
而高通的小核和中核没有区分,6个直接一样的,虽然有影响,但没有那么大。所以arm的a7系列和xm系列的区别,三丛集道路,看样子不适合盲目堆l2,并且此时需要l3互通数据。
个人想法改善:
既然如此,不如部分采纳高通的l2缓存灵感并结合arm大中小理念。
首先l2缓存方面:
1x5配8ml2缓存,3x5m共享6ml2缓存,4a730每个配512k6的l2缓存。
思路:主线程是需要高性能大l2缓存的,所以分配给x5没跑,而有部分游戏需要吃双核,还需要一个比较强力的核心配一个比较大的l2缓存,那就给共享l2缓存的x5m,一个x5m最多可以分配6ml2缓存,并且虽然共享6ml2缓存会在当一个核心不需要大缓存时,延时有副作用,好在x5m的性能不错,不会有太大的延时增加的影响。而日常使用中,小核a730往往分配的是既不需要性能,也不需要大缓存的小任务,所以没必要共享,也没必要给大l2缓存,全部分开,做到低延时高能效。
l3缓存方面:arm的小中大策略,日常使用小中之前会经常转移负载、尽量的实现好的功耗表现,而对于中大之间则没有频繁的转移,大型游戏的主线程负责核心是很稳定的最大核心,而轻度使用时单大核心往往处于休眠状态,并且加之小核选择了不共享l2缓存所以l3缓存方面:
x5有了巨型8ml2缓存不需要配l3缓存,3x5m和4a730共享4ml3(3x5m本身就共享了6ml2,加上a730所分配的任务也不需要大缓存,妥妥够用,最多a730负载转移给x5m时需要数据互通罢了),这样分开的l3缓存够用延时还能得到提升。
总计:1x5单8ml2,3x5m共享6ml2以及和4a730共享4ml3,4a730每个单配512k的12缓存。
一共16ml2缓存和4ml3缓存。
总结:为了秉承arm大中小思路,大核独占巨型l2缓存,中核既要兼容需要大缓存的情况又要尽可能减少延时增加的副作用,就共享6ml2取中庸之道,而小核则分别分配小l2缓存,极致追求能效和延时。而在数据互通方面,选择最频繁的3+4互通4ml3即可,因为l2的增加,l3不需要那么大并且在频繁数据互通迁移负载时,小l3的延时也能得到改善。