电脑里的多核心处理器早已进化为全套SMP结构
所谓同步多处理器,顾名思义就是同步的,即多枚处理器运行在同样的时钟频率,共享同样的缓存数据,协同工作。简单来说,同步多处理器系统在工作的时 候,每当一个任务完成后,空闲的处理器会立刻寻找下一个新的任务,对于外部而言,这两颗处理器是一个整体,共同完成同一个工作。
而异步多处理器则更接近于若干个独立工作的处理器,它们之间可以运行在不同的频率下,每个处理器维护自己私有的缓存数据,最重要的是,它们之间会利用一种仲裁机制,以轮流工作的方式执行任务。它们更像是一些互不干扰的独立处理器,各自完成各自的事情,轮流执行不同的工作。
看到这儿,相信大家也看出来了,同步和异步最大的区别就在于轮流工作这四个字。具体而言,就是在同一时间,只有一颗处理器可以接受任务,另一颗不论 是否繁忙,都不能接受新任务。可能光靠文字说明还不是那么生动,下面我们就来看几张图,了解一下相对于同步多处理器“谁空闲谁接单“的工作模式而言,这种 轮流工作到底是怎样进行的,又会导致怎样的结果。
图中每一横行代表一个时钟周期,我们用红色的方块代表正在读取任务,绿色的方块代表正在执行任务,方块中的数字代表不同的任务,而空白代表着空闲状态。在第一张图里,我们假设任何任务只需要一个周期就可以执行完毕。
可以看到,在每一个周期内,异步多处理器架构最多只能有一个核心接受任务,而如果两个处理器都空闲,就会有一个消极怠工。如图所示,执行四条指令,异步多处理器用了5个周期,同步多处理器用了4个周期,异步多处理器慢了25%。 那么如果指令执行时间是两个周期呢?
当指令执行长度为2周期时,新问题就出现了。由于ASMP架构中,处理器1只能在奇数周期接受任务,处理器2只能在偶数周期接受任务,虽然ASMP 中的处理器1在第3个周期的时候结束了当前的任务,但随之而来的第4个周期却只有处理器2可以接受任务。因为处理器2此时正忙于上一个任务,因此对于外部 程序而言,在第4个周期上处理器会处于不可用状态,等到第5个周期到来以后才能继续接受新任务。因此SMP架构只需要6个周期就能完成的任务,ASMP却 消耗了8个周期,慢了33%。
这就是为什么ASMP目前采用的越来越少的缘故。虽然ASMP存在着设计简单、结构清晰、耗电较低的优势,但是由于性能不足,在PC领域从来都没有 成为过主流。而在移动领域,高通认为手机对于耗电的要求要大于性能,又希望可以在双核时代继续沿用单核时代的核心架构而不需要彻底重新研发,因此采用了 ASMP架构。但是事实证明,高通在这点上可能有些耍小聪明之嫌,因为既然消费者决定购买双核,那么就一定是冲着性能去
的,并且对功耗也已经做好了心理准 备。
最近比较火热的小米手机就选用了高通MSM 8260芯片,不过它自称的“最快”还要打上一个问号
根据高通的官方数据,其1.2GHz的MSM8x60芯片组在满负荷工作的时候,仅处理器部分就要消耗大约1.2瓦特的功率,这相对于单核时代不到 500毫瓦的功耗而言,也已经是非常高的数值了,这证明了不管怎么去省电,双核都依然是双核,既然如此,去追求双核应有的性能显然应该比如何去节省那么一 点点的电更加重要。换一个方面说,性能足够强的话,系统可以以更短的时间完成任务,进而更多地进入低功耗的状态。高通通过ASMP也许节约了一定的耗电, 但是其最大33%的性能损失会导致系统多出33%的时间处于高功耗状态,消耗的功率可能抵消甚至反超节约的,让高通的如意算盘打空。
回到话题上来,可能有些读者会认为,单独来看,可能ASMP和SMP的差距也并不是那么巨大,在之前图中的极限状况下也就相差33%而已,在实际运 行中的差距很难达到这个数字。但是不要忘记,之前的文章中我们讨论过乱序执行的重要性,那么如果我们将指令等待也引入到之前的图中,那么会发生什么情况 呢?
在此,我们用灰色的方块代表需要等待的指令,而等待时间为两个周期。
可以看到,一旦引入指令等待,将乱序执行与多核架构结合起来以后,不支持乱序执行的ASMP架构(Scorpion@MSM8x60)需要10个周 期才能完成的工作,支持乱序执行的SMP架构(Cortex A9 MP@其它主流双核方案)只需要6个周期,相对于支持乱序执行的SMP而言,不支持乱序执行的ASMP架构慢了66%。这就是MSM8x60面对其它双核 Cortex A9的情况。虽然由于实际运行中指令的执行长度可能会更长,以至于减小轮流工作的影响,但由于Scorpion核心对乱序执行的支持并不完善,因此漫长的 指令等待依然可能会导致高通的处理器浪费大量的时间,最终性能变慢。这点,我们也会在后续的测试中加以体现。
同样,让我们也来针对多处理器架构,给四款双核一个评分: Tegra 2 ★★★★★ OMAP4430 ★★★★★