big.Little与aSMP的前世今生,如何走向未来aSMT?


其实想写这个帖子好久了,因为我有强烈的拖延症,从三月十五号就开始写的这个贴,写到昨天还是没有写完,直到今天发生了一件大事,ARM发布了DynamlQ,这个贴才被赶出来,可能有很多不完全的地方,之后的一段时间我会不断地给大家普及架构知识,顺便填这个贴的坑

楼主 卧楼听松  发布于 2017-03-22 01:39:00 +0800 CST  
big.Little和aSMP是前几年讨论的很激烈的一个问题,大家对big.Little似乎比aSMP反感得多,尤其是MTK的八核a53或者十核三丛集,俨然是不务正业,那究竟big.Little和aSMP是怎么样的呢?而它距离它的出发点又走了多远?他的未来aSMT在哪?离我们还有多远,下面,就由我来给大家解开。(个人水平有限,如果有错误,欢迎大家指正)。

楼主 卧楼听松  发布于 2017-03-22 01:40:00 +0800 CST  
ARM官方对big.Little的解释是在省电的同时保证性能最大化,注意,省电是出发点,保证性能最大化是充分不必要条件。事实上,ARM为它一共准备了三种实现方式如图,

ARM白皮书中,这三种方式分别叫clustermigtate,cpu migrate.global task scheduler.即丛集迁移,cpu迁移,整体任务调度。从字面和图大概就能理解这三种调度,丛集调度我们并不陌生,典型的是exynos 5410。Cpu迁移没有人使用过。整体任务调度就是所谓的真八核。无论是哪种调度,实现方式都可以概括为两句话:L2分簇,总线互联。L2分簇,即每个簇的L2是分开的,ARM所有A系的多核处理器单簇都是最多四核心,四个核心共享一个L2。总线互联,即大小两个簇通过一个总线连接,这个总线叫CCI,CCI总线存在的目的开始并不是为b.L准备的,它是解决异构计算中缓存一致性的问题而设计的。这玩意听起来很悬乎,其实不难理解,如图,
大核心,小核心,GPU都是不同架构的核心,我们都知道,Desktop端的独立显卡都带有独立显存然后用一个PCI总线连接,所以和内存之间是几乎独立的。但手机soc不一样,没有独立显存的GPU必须把DDR当做显存使用,这就需要一个互联的结构,同时,GPU和CPU之间也需要通讯,因为两者唯一共用的存储是DDR但DDR的速度太尴尬了,上面说的缓存一致性也就是指不共用cache的两种核心需要用东西连接,这个东西就是CCI总线。事实上尽管big.Little的实现方式只有三种,但由于CCI总线和GIC中断控制器的更新换代,big.Little也在不断进化。

楼主 卧楼听松  发布于 2017-03-22 01:45:00 +0800 CST  
我们分开来看三种调度,丛集切换,简单粗暴,直接牺牲所有的正在处理的L2数据并转移到目标核心,我在这强调一下,a10fusion由于小核无独立L2,因此和丛集切换不是相同的东西。丛集切换很显然会需要大量的性能去调整L2cache的数据,big.Little令人诟病就来源于此,exynos 5410的口风给人一种先入为主的现象,但凡是big.Little上来就先是一句,垃圾。
第二种叫cpu迁移,在这种模式下,一大一小的两个核为一个组,一组内相互对应,四个组之间不能相互调换。这种做法可以让大小核有同时运行的情况,但是依然无法全开,最多四个核同时运行。这种模式其实是可以让大核到小核的切换有缓冲的空间,同时功耗最低化,但是很遗憾的是,由于第三种模式更符合市场的宣传需要以及成本,根本就没有那个厂商使用过这种模式。
第三种是整体任务调度,这种模式下任意一个核心都可以映射到其他核心上,因此任意一个核心的开关都不影响其他核心的运行情况。也就是所谓的真八核,这种模式有一些好处比如说增加了物理线程,能让一些子线程能分配到小核上当然,这是最理想的一种的想法,实际可不会这么简单,比如说mtk家的一核有难,N核围观,当然,这怪不得arm,系统这么把线程分配到内核上可不是arm说了就算了,就算是wintel联盟win也没能帮intel实现完全的平均负载,加上实际任务的数据关联性,多核的利用率并不是那么的理想。

楼主 卧楼听松  发布于 2017-03-22 01:46:00 +0800 CST  
说了这么多,那实际big.Little的弊端在哪呢?上面说了,为什么要有CCI总线,就是要有进行数据交换的中间体。我们都知道,标准的arm公版架构是没有L3 Cache的,而大小核的簇的Cache之间的联系就剩下了总线。我们来看看arm是怎么处理这个数据交换的过程的。

先是目前在处理的簇提交任务转移的操作,然后目前处理任务的处理器继续处理自己正在处理的任务对于将要切换的核心,在接到命令后开始工作,但是不会马上处理目前进行的任务,因为它什么都不知道啊,人家只是告诉它该工作了,而没有告诉它要做什么,怎么做。所以它先要打开自己的缓存,然后打开自己的监视器(snoop)看看隔壁家的核心在干什么,然后自己依样画葫芦,边把自己的Cache填满边开始处理这个任务。之前的核心在Cache完全转移完之后关闭。从这个过程我们可以看到,任务的迁移是有代价的,首先,提交切换任务核心的操作是要性能的,然后系统将任务的线程切换到另一个簇是需要代价的,但这些都不是重点,对于处理器都是微秒级的操作,主要是把Cache从一个簇转移到另一个簇,由于时间不够,我没找到两个簇之间互相读取L2Cache的速率是多少,因为不同簇L2之间的频率不一样所以肯定不可能直接等同于单个L2内的延迟和每次读取的大小,事实上,从丛集切换的实际运用来看,这个延迟至少是毫秒级别的,这是个很致命的开销,尤其是从小核心切换到大核心时,小核心的负担会相当重。

楼主 卧楼听松  发布于 2017-03-22 01:48:00 +0800 CST  


楼主 卧楼听松  发布于 2017-03-22 01:55:00 +0800 CST  
说了那么多,总的来说,都是为了功耗,big.Little牺牲自己的性能(时间)面积换取功耗,原因出在Cache不一致。aSMP牺牲了性能的进步空间和面积换取功耗,原因还是出在Cache不一致。其实两者有着极其相似的地方那么有什么办法让Cache一致就成了解决这个问题的关键。所以就引出了我所要说的aSMT,这个我在上一个贴简单说过,但可能没有多少人在意这个。首先aSMT是我自己的叫法,它是相较于AMD的SMT同步多线程而言的,也就是说和AMD,intel一样,这是一种超线程技术,但它是非同步的,为了功耗,所以叫aSMT,非同步多线程。

楼主 卧楼听松  发布于 2017-03-22 01:56:00 +0800 CST  
在开始讲aSMT之前,我先要解释一下为什么arm发布了DynamlQ我就要急急忙忙发这个贴,我们先来看看DynamlQ,arm打算把原有的4个对称核为一簇做一下升级,变成8个不对称的核心为一个簇,官网上的原话:DynamIQ technology takeshigh-performance, energy-efficient CPUs and creates a whole new foundation forthem.
arm打算用一种全新的方式来结合大小核心。这是相对于big.Little而言的。我在上一个贴说过 ,我能想到aSMT,arm的工程师绝对也能想到,但是我没想到新的互联方式来得那么快,虽然arm还没发布具体的实现形式,但是从已知的信息就能略知一二。

楼主 卧楼听松  发布于 2017-03-22 01:59:00 +0800 CST  
下面我们来讲aSMT
1. 什么是aSMT?
要理解aSMT首先要知道什么是SMT,处理器内核里一般分为前端和后端,处理器处理一条指令的过程是取指令——解读指令——执行指令——返回/保存数据。其中取指令——解读指令这个过程称为前端。而SMT的实现呢粗糙的说就是一个核心里面做了两个前端,可以分别取指令,读指令。但后端就只有一个。同理,aSMT也是有两个前端,一个后端。但是!!!!SMT的两个前端是完全一样的,为了性能。而aSMT的两个前端是不一样的,做成一大一小,为了省电。
2. aSMT的优势在哪?
首先,我们把两个不同的前端做到了一个内核里,所以L2是共用的,L1是共用的,如果大小核需要切换的话,怎么切换呢?没错!!!直接切换前端就行了,Cache没有延迟!Cache没有延迟!Cache没有延迟!切换是在内核内进行,这可是以cycle为单位的,就跟分支预测错了一样的代价,不是big.Little能比的。其次,我们再来看面积,如果使用big.Little,每个核心都是完整的核心,都包含L1,L2,前端,后端,aSMT没有小核单独的L1,L2,后端,更没有CCI,这可有多省钱啊!再者,小核因为用了大核的超标量流水线(可以理解为后端)性能也会比big.Little好。
3. 实现aSMT的障碍在哪?
我们知道,arm的大核用的是长流水线的乱序架构,而小核用的是段流水线的顺序架构。两者的流水线的差异还是很大的,比如说当大小核同时运行时,小核由于是顺序架构,遇到数据关联的情况就只能停下来等上一步的结果出来才能进行下一步,这个时候问题来了,后端是不再执行其他操作等你这个结果呢,还是继续执行大核的操作让小核接下来的指令等上一会,这个由谁来决定?这个问题intel搞了很多年也没完全搞明白。流水线的深度从某个方面决定了频率,由于小核也使用了大核的流水线,直接造成的问题就是深度太深,但小核不需要达到那么高的频率,流水线里充满了气泡,小核能耗比会下降到一个比较尴尬的程度。
4. 敢问路在何方?
对于上面的第一个问题,我想arm和苹果/AMD的工程师肯定会想出办法解决,比如说把小核也做成乱序结构,像arm的roadmap上就有a53的下一代Ananke说不定就是为此而生,从远的角度上说,a73的流水线级数最大也才12级,a53已经9级,何况流水线不是每条都一样长,小核可以不使用大核的全部流水线,选择短的使用,这些都是解决的办法,相信各家一定会有直接的解决方法,arm声称DynamlQ将会是未来五年的核心主力,开阔更先进的技术,任重道远,还好,敢问路在何方,路就在脚下。

楼主 卧楼听松  发布于 2017-03-22 02:00:00 +0800 CST  

楼主:卧楼听松

字数:3904

发表时间:2017-03-22 09:39:00 +0800 CST

更新时间:2021-02-22 04:33:30 +0800 CST

评论数:158条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看