笔记本电脑通常最多具有四个核心,而双核心可能更常见。我最近已经从四核切换到​​双核,并且可以确认四核的用例数量有限,即使执行CPU密集型任务也是如此。似乎很常见。为什么?哪些任务可以利用它们?

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

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

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


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


评论

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

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

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

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

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

#1 楼

正如您已经指出的那样,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具有“中性”格式的可执行代码,与Java中的.class文件非常相似。在运行之前,代码会再次编译成机器的本机指令[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频率与功耗之间的关系不只是线性关系,因此两倍的频率总会导致两倍以上的需求,甚至是三倍或四倍的功耗,而性能却不到两倍(由于其他资源限制,例如缓存) )。因此,在相同的负载下,四个核可以轻松击败单个核,从而提供更好的性能,同时要求更少的功率。

进一步阅读:为什么智能手机中的8和10 CPU内核是一个好主意-从厨房学到的东西

为什么有些电话有两个四核处理器,而有些却有类似的时钟八核。在性能方面哪个更好?


评论


我记得在某处曾经读过或看过Linux内核最初是在多核支持上致力于超级计算机的,而在很多年前,这些努力被证明对智能手机“将来”(现在)有用,例如“事故”

– Marc.2377
17年6月12日19:31



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

–亚伦
17年6月12日在21:36

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

–user1937198
17年6月12日在22:18

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

–user1937198
17年6月12日在22:31

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

– Alec Teal
17年6月13日在21:57

#2 楼

原因很简单,也很复杂。

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

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

拥有对市场的完全控制权,使英特尔能够高涨CPU价格,同时人为地决定用户应该想要哪些功能和多少处理能力,以及是否需要分析一下。英特尔的历史上您会注意到,它的主要优势基本上在于CPU频率的提高,因此,它几乎从未尝试过做一些真正聪明或创新的事情。它并不需要它,因为它可以对人们说:“您不需要更多的内核,但是我有这种多汁的新CPU,其运行速度快了100 MHz”。同时,它可以以高得离谱的价格在服务器市场上出售多核CPU(因为服务器一直需要大量的并行电源,以至于试图实现使用的服务器存在当前的趋势。) ..猜测是什么?您的数百个廉价电话CPU可以并行工作)

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

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

评论


您确定要回答正确的问题吗?

– iBug
17年6月11日23:32



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

–亚伦
17年6月12日在18:07

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

– T. Sar
17年6月12日在18:38



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

–凯文·克鲁姆维德(Kevin Krumwiede)
17年6月12日在20:26



这更像是邪恶的英特尔公司的怨言,因为ARM也为独立的芯片制造商提供了许可证,所以IMO也不值得得到。

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
17年6月13日在10:41

#3 楼

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

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

另一个原因很大程度上是历史原因。直到2005年左右,台式机CPU都是单核。台式机CPU性能的提高几乎完全在于使内核每秒可执行更多指令。即使在今天,如此之多的桌面软件仍无法充分利用多核,以至于许多人宁愿使用具有4核的CPU而不是拥有慢20%的8核的CPU。
尽可能多的内核需要大量的CPU资源。这是不动产,可以用于提供更多核心。这就是为什么英特尔最新的Kaby Lake CPU最多可以使用4个内核,而人们之所以购买它们,是因为每个内核都比其前身的内核更快。对于许多人来说,它们甚至是具有更高内核数的CPU的升级。

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

#4 楼

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

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

评论


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

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
17年6月13日在10:34

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

–塔拉·艾希尔(Tara Eicher)
17年6月13日在19:35

我同意您所说的,只是想指出,突发性工作负载并非特定于手机。

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
17年6月15日在7:08

#5 楼

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

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

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

评论


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

–阿卜杜勒
17年6月13日在11:46

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

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
17年6月13日在12:08

“每秒操作数”是FLOPS的同义词吗?

–阿卜杜勒
17年6月13日在12:21

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

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
17年6月13日在12:30

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

–phuclv
17年6月13日在16:56

#6 楼

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

Android的设计师在决定选择Java编程时就做出了巨大的赌注。因此,JVM作为应用程序的运行时。 Java,由于其设计原理,通过牺牲性能解决了在每个CPU体系结构上运行之前需要编译和构建代码的问题。 Java引入了一个笨重的虚拟机,通常称为JVM。 JVM实际上在软件级别上仿真CPU,以避免需要为每个设备分别编译代码。可以将JVM视为具有相同属性的虚拟CPU,而与运行该设备的设备无关,因此该代码只需要为JVM编译一次,然后就可以在每个设备上运行。这使制造商可以在担心应用程序兼容性之前抛弃所需的任何硬件。这也使它们的设备可以同时使用笨拙的低端设备和高质量的高端设备来占领市场,并最终占据主导地位。 JVM只要符合此规范即可。原始的android JVM称为Dalvik。如今,Google已将其替换为ART。

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

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

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

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

评论


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

– maaartinus
17年6月13日在14:50

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

– v6ak
17年6月13日在19:59

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

– v6ak
17年6月13日在20:01

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

– v6ak
17年6月13日在20:10

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

– v6ak
17年6月14日在6:39

#7 楼

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

评论


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

– v6ak
17年6月14日在17:25

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

–软盘
17年6月14日在18:27



#8 楼

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

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

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