为什么Android手机的核心比计算机多?


80

笔记本电脑通常最多具有四个核心,而双核心可能更常见。我最近已从四核切换到​​双核,并且可以确认,即使有CPU密集型任务,四核用例的数量也有限。

另一方面,在手机上,四核,六核和八进制似乎很常见。为什么?哪些任务可以利用它们?

我了解big.LITTLE可能是答案的一部分。也就是说,这么多内核的主要好处不是能够同时使用所有内核,而是使用功耗适合当前工作负载的内核。但是,例如,Snapdragon 625具有八个Cortex-A53内核,big.LITTLE似乎不是这种情况。

也许ARM架构的每瓦最佳性能较低。也就是说,将单核调整为每瓦最佳性能会导致ARM上的性能低于英特尔上的性能。因此,使用更多的内核来提供性能。这只是一个假设。

但是即使在这种情况下,我也看不到手机可以有效使用哪些工作负载,例如八个核心。在笔记本电脑上,我可以想象一些像项目的完整(非增量)编译。但是在手机上?

  • 游戏可能会要求很高的性能,但是它们通常需要GPU的性能而不是CPU的性能,不是吗?
  • 从理论上讲,在安装或升级时,多个内核可以加快Android Lollipop / Marshmallow AOT的编译速度(例如,“优化应用程序3/121”阶段)。但是,我不确定这是否可以利用多个内核。据我记得的代码,一次只编译一个应用程序,但是编译过程本身可能存在一些并行性。
  • 此外,Android 7+可以在编译时利用多个内核。但是由于据报道它在空闲和充电时会编译,因此收益似乎很小。至少当一个人晚上给手机充电时,我真的不在乎这种情况下是花费30分钟还是两个小时。

正如我在回答中指出的那样,请记住,您似乎正在颠倒地看待事物。多核/并行执行是常态,不是您的电话是拥有多个核的异常,而是PC CPU是异常。
motoDrizzt

4
您的问题是有缺陷的,PC可以拥有比电话更多的内核。intel.com/content/www/us/en/products/processors/core/x-series/…甚至还没有进入服务器级机器,后者可能有数十个甚至数百个内核。(有些超级计算机进入了数千核的范围。)
JAB

3
@JAB可以,但是我不是在谈论最大内核数,而是在谈论典型数目。对于笔记本电脑,不止四核是非常罕见的,但是您可能会发现一些例外,例如至强。对于手机,甚至八角形似乎也比较普遍。
v6ak

4
“我最近已经从四核切换到​​双核,并且即使在CPU密集型任务中,我也可以确认四核用例数量有限。” -您能否扩展和阐述如何得出结论?
阿卜杜勒

@Abdul主要来自我的观察(使用htop或类似工具查看系统负载),部分来自我的结论。甚至我期望并行化的一些taksk(例如,使用OpenScad渲染)都是单核的。Firefox(ESR)通常最多使用一个内核。增量编译–我没有测量过,但是从直观上看,找到独立任务的机会不多。(完全编译是另一种情况。)
v6ak

Answers:


63

正如你已经注意到,的big.LITTLE组合策略(在技术上,HMP异构多处理集群)是许多(有时是压倒性的多)核的主要原因。移动设备通常会遇到多种情况,包括重负载和轻负载。

极端的消费类示例是联发科的Helio X20,它具有2个面向性能的A72内核,4个平衡的A53内核以及4个高能效的A35内核。在不同的使用情况下,这非常灵活。但是,我认为8核 2群集通常就足够了。

还有另一个类似台式机的示例,即高通公司的Snapdragon 800系列(S 800,S 801和S 805)。每个SoC中只有4个内核具有相同的微体系结构,其中2个时钟较高,而2个时钟较低。高通之所以制造这些SoC,是因为他们对自己的微体系结构(Krait 400和Krait 450)非常有信心。

对于游戏,即使他们似乎要求GPU性能而不是CPU,它们仍然会给CPU带来沉重的负担。如果没有其他东西为GPU提供要处理的数据,GPU便无法单独工作,而这是CPU在玩游戏时要做的主要工作之一。在大多数游戏情况下,GPU仅渲染图形,而所有其他工作(如加载数据,资源和资产以及计算游戏中的机制(如系统,环境和物理))均由CPU完成。如果在坚持使用低端CPU的同时升级GPU,您将不会观察到更高的帧速率。

第二个原因是Android如何利用CPU资源。Android几乎可以创建自己的应用程序环境。它仅使用Java中的代码(和API),但仅使用自己的虚拟机Dalvik,后来被ART(API级别21)取代。APK具有“中立”格式的可执行代码,.class与Java中的文件非常相似。在运行之前,代码会再次编译成机器的本机指令[1]。编译过程是多线程的,可以利用多核来提高性能。
当应用程序运行时,还有其他几个与应用程序并行或并行运行的流程和机制(例如垃圾收集器)。更多的核心可以使支持性流程以及主应用程序更有效地运行。
1.如果使用文件类型标识符,您会发现“优化”的dex文件为ELF格式,而“中性”的dex文件只是其自身格式。

另一个较小的原因是ARM内核不能像Intel x86芯片一样快地工作。英特尔x86微体系结构的历史可以追溯到1976年,当时开始设计英特尔8086芯片,这意味着x86已经发展了很长时间。以Core i5-660为例(GeekBench,单核),单个现代高端ARM Cortex-A73内核仅与Intel Clarkdale内核一样强大。这是因为x86是CISC微体系结构,而ARM是RISC微体系结构。您肯定不希望手机只有两个或两个以上的活跃应用程序。更多的核心将有助于减轻压力。这就是为什么双核SoC仅在智能手表上相对受欢迎的原因。谁需要智能手表的性能?

有趣的是,与在相同负载下的单个内核相比更多的内核将导致更少的功率。CPU频率与功耗之间的关系不只是线性关系,因此两倍的频率总会导致两倍以上的需求,甚至是三倍或四倍的功耗,而性能却不到两倍(由于其他资源限制,例如缓存) )。因此,在相同的负载下,四个核可以轻松击败单个核,从而提供更好的性能并同时要求更少的功耗。

进一步阅读:


1
我记得曾经读或看过某个地方,Linux内核最初是在多核支持方面工作的,并且早在多年前就已专注于超级计算机,而这些努力被证明对智能手机“将来”(现在)有用,例如“事故”
Marc.2377

3
尽管已被接受,此答案似乎并未真正回答问题。这个答案似乎是在回答“为什么我要在手机中增加内核?” 这不是眼前的问题。它没有解释PC和Phone之间的区别。为何手机可能需要更多内核的观点也适用于台式计算机,尤其是关于游戏的观点。
亚伦

8
1976年关于x86 CPU的主张有些误导。ARM内核可以追溯到1983年的Acorn RISC Machine项目,仅在7年后。从某种程度上讲,更新是一种优势,Acorn学会了x86和类似CPU设计开发中的一些错误,并将其整合到了其中。臂。
user1937198

2
RISC vs CISC也与此无关,英特尔CPU内部运行一个RISCish内核(微指令)。真正的区别是出订单还是订单还是订单执行。
user1937198

5
x86的确很……错误。它们是超标量芯片,基本实现无法像大多数ARM芯片中使用的经典RISC管道那样出色。还值得注意的是,由于乱序执行和缓存层次结构,将内核与超标量设计链接在一起非常困难。没有人知道他们丢失了什么,因此并没有真正的需求。如果您发现某些英特尔的较新版本不在高核数芯片中-它们在Broadwell上,这是因为它们在空间不足的情况下丢弃了同步内容。
亚历克·蒂尔

15

原因很简单,也很复杂。

简短的回答是“因为手机市场从来没有而且不是由英特尔驱动的”。

答案很长,要在这里恢复太久了,但是基本概念是,英特尔多年来已经以一切可能的方式统治了PC市场,以至于付出和破坏(并为此被罚款)以使他的CPU成为主流。 PC制造商的第一选择,也是唯一选择。

对市场的完全控制使英特尔能够高涨CPU价格,同时人为地决定用户需要的功能和处理能力,如果您回顾一下英特尔的历史,您会发现它的主要优势基本上在于CPU频率的增加,因此它几乎从未尝试做过真正聪明或创新的事情;它并不需要它,因为它可以对人们说:“您不需要更多的内核,但是我有这种多汁的新CPU,其运行速度快了100 MHz”。同时,它可以以惊人的高价在服务器市场上出售多核CPU (因为服务器一直需要吨并行功率,以至于试图实现使用...的服务器存在当前趋势。数百个廉价电话CPU并行工作)

反过来,这也反映到了开发人员社区中,该社区从未赶上并行编程的重要性,因此,即使不是大多数,大多数开发人员也从来不会打扰一次使用多个线程,或者以非线程的方式表达它。技术上,让他们的软件一次完成多个任务。顺便说一下,当您99%的客户群最多拥有两个核心时,这才有意义。可悲的是,这导致了一个传说,即并行算法确实难以实现,并且仅适用于一小部分问题。

最终,移动市场从来没有见过英特尔成功。相反,实际上恰恰相反,因为英特尔通常会尝试做一些与通常的X86架构不同的事情。因此,缺乏市场的影响力和控制力,其他CPU生产商已经朝着PC市场之外的时代正常化的方向发展:并行计算。


12
确定要回答正确的问题吗?
iBug

7
@iBug这个答案比OP接受的答案更适用于OP的问题。可接受的答案是未回答正确问题的答案。
亚伦

6
“人为抬高CPU价格”->如果Intel人为抬高价格,为什么他们的竞争对手使用价格相近的硬件,为什么与Intel硬件相比,ARM驱动的计算机难以承受?这种仇恨是荒谬的。制造CPU 很难。使ARM在移动设备中如此流行的原因是big.LITTLE想法,这是他们在Intel之前想到的。
T. Sar

6
英特尔并没有控制PC芯片市场,而且已经有很多年了。芯片设计人员从更快的时钟转向更多的内核的原因是,更快的时钟遇到了一些基本的物理限制。解决更多核心是一个更难解决的问题,因此他们推迟了它,直到这是保持性能持续增长的最经济有效的方式。
凯文·克鲁姆维德

6
这更像是邪恶的英特尔公司的怨言,因为ARM也为独立的芯片制造商提供了许可证,所以它对IMO也不值得。
德米特里·格里戈里耶夫

9

发生了两个因素,一个是非常实际的,另一个是历史的。

实际原因是在电话中使用了混合架构。功耗对电话至关重要,电话在性能要求极低的模式下花费大量时间。当需要很少的性能时,对某些内核进行优化以降低功耗是有意义的,而当需要时,对某些内核进行优化以提供最大性能是有意义的。

另一个原因很大程度上是历史原因。直到2005年左右,台式机CPU都是单核。台式机CPU性能的提高几乎完全在于使内核每秒执行尽可能多的指令。即使在今天,如此之多的桌面软件仍无法充分利用多核,以至于许多人更喜欢具有4核的CPU而不是拥有20%内核的8核CPU。

要想从单个内核中获得尽可能多的性能,就需要占用大量CPU资源。这是不动产,可以用于提供更多核心。这就是为什么英特尔最新的Kaby Lake CPU最多可以使用4个内核,而人们之所以购买它们,是因为每个内核都比其前身的内核更快。对于许多人来说,它们甚至是具有更高内核数的CPU的升级。

随着时间的流逝,期望看到更多的桌面软件经过完全优化以支持更多的内核。在这种情况下,工程上的权衡取舍将开始倾向于在台式机上使用更多的内核而不是更快的内核。尽管几乎可以肯定内核会变得更快,但是您会开始看到人们更喜欢8核CPU而不是4核CPU,即使每个核的速度慢20%。芯片设计师将紧随市场。


5

手机至关重要的是,它必须能够在短时间内提供计算能力(我们需要某些应用程序要快速),同时还要避免过热(手机的散热比笔记本电脑或PC困难得多)。为了实现这一目标,架构师将电话设计为在工作负载较小时使用单个内核,并在需要时提供额外的内核以提高性能。如果电话要使用较少的大型内核,即使工作量很小,过热也将成为问题。

资料来源:研究生水平的计算机体系结构课程。


实话实说,在短时间内提供计算能力(如果这就是能源的意思)的能力对于台式机也是至关重要的。这就是为什么他们在Intel芯片上安装TurboBoost的原因。
德米特里·格里戈里耶夫

是的,计算能力就是我的意思。的确,所有预期在某个时间点都会出现突发工作负载的设备(包括电话和台式机)都必须能够处理它。主要区别是散热。
塔拉·艾希尔

我同意您的意见,只是想指出,突发性工作负载并非特定于手机。
德米特里·格里戈里耶夫

2

首先,从历史上看,Java虚拟机可以比典型的桌面软件受益于多核。即使您使用Java编写单线程应用程序,它也将在多核上运行得更快,因为大多数垃圾收集器代码将与您的应用程序一起运行。

其次,手机背景中发生了很多事情:自动更新,广告下载,防病毒软件,GSM模块管理等。在笔记本电脑上,所有这些任务几乎无法使一个内核忙碌,但是ARM内核却是它的功能要弱得多,因此,如果您需要响应式系统,则可能需要至少有两个专门用于后台任务的功能。

最后是营销。没有多少用户能够评估他们是否将从8核中受益,但是8核智能手机听起来肯定比2核或4核智能手机贵。


2
我一直看到“ ARM内核的功能要弱得多”的说法-这到底是什么意思?他们的时钟速度慢吗?
Abdul

2
@Abdul每秒较少的操作。x86芯片可以一次执行多个操作,因此即使在相同的时钟速度下,它们也胜过ARM。进行比较:顶级ARM芯片(GT-I9100)比顶级x86芯片(i7-2920XM)慢10倍。
德米特里·格里戈里耶夫

“每秒操作数”是FLOPS的同义词吗?
阿卜杜勒

@Abdul不一定。实际上,除了游戏和物理模拟之外,浮点数的使用并不多。而且,许多ARM芯片都通过降低精度来达到不错的FLOPS,因此也不是一个真正的衡量标准。
德米特里·格里戈里耶夫

Android应用程序无法在Java虚拟机上运行。他们在Dalvik VM上运行
phuclv

1

到目前为止的答案可以解释该问题的某些方面,从而导致Android手机上的CPU内核数量过多。再读一遍;Android手机。多年来,iPhone一直仅停留在几个内核上,并且仍比任何Android旗舰产品都流畅得多。

Android的设计师在决定选择Java编程并因此选择JVM作为应用程序的运行时时曾大赌一把。Java,由于其设计原理,通过牺牲性能解决了在每种CPU体系结构上运行之前需要编译和构建代码的问题。Java引入了一个笨重的虚拟机,通常称为JVM。JVM实际上在软件级别上仿真CPU,以避免需要为每个设备分别编译代码。可以将JVM视为具有相同属性的虚拟CPU,而与运行该设备的设备无关,因此该代码只需要为JVM编译一次,然后就可以在每个设备上运行。这使制造商可以在担心应用程序兼容性之前抛弃所需的任何硬件。

JVM本身仅仅是一个规范,只要遵守该规范,人们就可以自由开发自己的JVM。原始的android JVM称为Dalvik。如今,Google已将其替换为ART。

现在,JVM有什么问题?它是一款沉重的软件,会消耗大量计算资源。再加上Java语言的其他一些属性,例如垃圾收集,对于具有中等硬件能力的设备,JVM的资源消耗就变得太多了。设备上打开的每个应用程序和系统服务本身就是ART JVM的一个实例,现在您可以得出结论,管理它们都需要一些功能强大的硬件。当需要绘制用户界面时,情况会变得更糟。

每个应用程序都在多个线程上运行。每个CPU内核一次只能运行一个线程。每个应用程序都有一个主线程,在该主线程上执行与用户界面有关的任务。每个应用程序用于执行文件访问,网络等操作的线程可能更多。通常,打开的应用程序(和系统服务)要比CPU内核多,因此,通常线程数要比CPU内核多得多。因此,每个内核都必须在不断处理不同的线程之间进行切换,每个线程只做一小部分然后转到下一个线程。这种切换对于CPU来说要花费大量时间,并且在应用程序本质上是JVM的情况下,此任务将变得更加详尽。

根据这一解释,我们可以推断出android需要强大的硬件才能平稳运行。早期的Android设备以滞后,崩溃和许多其他不幸的事情而闻名。但是这些年来,这些问题主要通过依靠强大的硬件来解决。

另一方面,iOS应用程序被编译为本地机器代码,因此不需要虚拟化。使用的语言和操作系统也更加高效,因此可以使这些设备保持平稳,而无需使用过多的芯片组。


这很好地解释了为什么手机比台式机功能强大得多。还是不是?
maaartinus

“这使制造商可以在担心应用程序兼容性之前抛弃所需的任何硬件。” –好点,但是我不确定这是否是(最初)用于相机的系统的意图。
v6ak

“每个应用程序可能有更多线程用于执行文件访问,网络等工作” –这些线程受I / O限制,不占用太多CPU。有时,I / O仅由一个线程处理,因为CPU比I / O设备快得多。
v6ak

“早期的Android设备以滞后,崩溃和许多其他不幸的事情而闻名” –我记得在这样的手机(Xperia Mini Pro)上运行棉花糖,而且我认为还有很多其他原因导致速度慢于CPU。它们在低RAM上运行,而MTD等闪存设备较慢(某些操作比microSD卡要慢得多),而较旧的Android则使用效率较低的“ JVM”(从技术上讲不是JVM)。当然,更好的CPU也会有所帮助,但我离这样的结论还差得远。
v6ak

同样,在CPU线程中执行I / O(或其他长时间操作)之类的编程风格可能会使应用延迟,而与CPU性能无关。AFAIK,这种样式在早期的Android应用中非常普遍。即使使用现代手机,此类应用程序也可能会滞后。它们可能不会那么落后,但这更多是由于更快的闪存而不是更快的CPU或更多的内核。
v6ak

0

综上所述,我可以说PC和电话的用例完全不同。PC通常用于单个或几个应用程序(当然,带有多个选项卡的浏览器需要许多cpu内核,甚至落后于i-3最高),用于多任务的手机。至少网络连接,UI绘制,系统触发器,通知。如果您在PC上打开任务管理器,也会有很多进程,但是即使在旧的Core 2 duo上,它们也消耗不到%的CPU能力。4核非常便宜(MTK 65x2的OEM初始价格为1美元),当最后一次缺乏每个核的性能时,它也是RISK vs CISC。高效节能==强大,正如我们在此处看到的那样。多核是移动设备的理想选择,因为它不会承受沉重的单胎负担,并且具有针对多任务的体验(但我们可以看到,由于软件出色,iPhone需要更少的核和RAM喜欢这部影片或其他影片


许多此类操作也经常在笔记本电脑上执行。而且多任务处理不需要CPU。制造成本的差异可能会导致一些差异,并且可能是低端CPU内核数量减少的原因,但是我怀疑制造成本是并非所有i7都至少具有四个内核的唯一原因。我相信制造成本只是这些CPU价格的一小部分。
v6ak

@ v6ak,问题是x86内核更大,更复杂,intell(或amd)的CPU不足以成为顶级模型。实际上,它们中的大多数都被某些零件挡住了,并成为了初级i7或奔腾处理器。ARM内核看起来不那么棘手,因此每年没有那么多的模型到来。三星Exynos Octa 7xxxMTK Helio X10,最新(X30)仍然是真正的八核处理器,甚至没有建议(4).Middle(4).BIG(2),我们可以在广告中说这是10核处理器,廉价的营销做事情。
Flippy

-1

我认为目前超过4或8(对于big:little配置)的主要驱动因素之一只是行销。

高内核数的一个巨大问题是当您考虑内存大小时。通常,在台式机应用程序中,当您想提高多个内核的利用率时,需要复制结构并使用比单线程应用程序中更多的内存。

这不会发生,因为RAM非常昂贵(尤其是在2017/2018 RAM危机情况下)。营销部门希望获得大量销售,但控制部门希望降低零件价格。如果发现每个内核的余额少于1 GB RAM,那么您会发现折衷失败。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.