(原标题:苹果这颗芯片,太强了)
如果您希望可以时常见面,欢迎标星收藏哦~
来源:内容编译自eclecticlight,谢谢。
这是一篇深入研究苹果新 M4 系列芯片的文章。在文章中,我们将首先介绍其性能 (P) 核心的细节。完成后,我会单独比较它们与早期 M 系列芯片中核心的性能。
我们知道,目前有三种 M4 设计:
1、基本款 M4具有 4 个 P 核心和 6 个 E 核心,还有一种价格更便宜的版本,仅具有 4 个活跃 E 核心,还有一种适用于 iPad 的“binned”版本,仅具有 3 个活跃 P 核心。
2、M4 Pro具有 10 个 P 核和 4 个 E 核,还提供仅有 8 个活跃 P 核的“binned”版本。
3、M4 Max具有 12 个 P 核和 4 个 E 核,还提供仅有 10 个活跃 P 核的“分档”版本。
苹果预计将在 2025 年发布一款Ultra变体,由两个连接并协同工作的 M4 Max 芯片组成,总共提供 24 个 P 核心和 8 个 E 核心。除了每个设计中的核心数量、它们的缓存和内存之外,所有 P 核心都是相同的,并且与 E 核心不同。
P核架构
所有 CPU 核心都排列成最多 6 个集群。任何给定集群中的所有核心共享 L2 缓存,并以相同的频率(时钟速度)运行。Base M4 有一个由 4 个 P 核心组成的集群,而 Pro 和 Max 则有两个由 5 个和 6 个核心组成的集群。
P 和 E 核心的一个突出特点是其可变频率(时钟速度)。对于 P 核心,可以将其设置为 17 个值中的任意一个,最小值为 1,260 MHz,最大值为 4,512 MHz(1.3-4.5 GHz)。运行 macOS 时,集群频率由 macOS 在内核级别设置;其他操作系统可能会提供更直接的控制。
P 核心在 1,260 MHz 时处于空闲状态,但也可以完全关闭。命令工具报告以前的 M 系列芯片powermetrics有时在 0 MHz 频率下处于空闲状态,但 M4 是第一个分别报告空闲和关闭状态的芯片,例如:当该核心及其整个集群关闭而不是空闲时。目前尚不清楚这是否仅仅是管理上的改变,或者 M4 核心实现此状态的方式与以前的核心不同。
CPU 4 active residency: 0.00%
CPU 4 idle residency: 0.00%
CPU 4 down residency: 100.00%
M4 内核支持的指令集架构 (ISA) 存在一些问题。LLVM 源代码对此进行了解释,声称它们“技术上”是 ARMv9.2-A,但没有其可扩展矢量扩展 (SVE)。有些人可能认为它更接近 ARMv8.7-A,比 M3 的 ARMv8.6-A 新一个版本。
尽管现在 LLVM clang 已经完全支持此功能,但尚不清楚 Xcode 对它的支持程度如何。
当然,当关闭时,P 核不消耗任何电量,而根据报告的测量结果,在空闲且没有活动驻留的情况下,它仅消耗 1-2 mW powermetrics。
在 100% 活跃驻留率下运行密集浮点计算时,最大功耗上升至约 1,400 mW,在 100% 活跃驻留率下运行 NEON 矢量指令时,最大功耗上升至约 3,230 mW。
macOS 核心分配
当线程的指定服务质量 (QoS) 高于 9(后台)时,macOS 通常会将线程分配给可用的 P 核心,例如使用 Dispatch(以前称为 Grand Central Dispatch (GCD))。正在运行的线程也可能定期在同一集群中的 P 核心之间以及集群之间移动。以前的 M 系列芯片似乎移动线程的频率较低,并且可能会让它们在同一核心上运行几秒钟后才完成,但在 M4 P 核心上运行时,线程似乎移动性更强。
此条形图显示虚拟机中 4 个虚拟 CPU 的 4 个线程在 100% 活动驻留率下运行 3 秒。在这段时间内,线程几乎一直运行在此 M1 Max 中第一个 P 集群的 4 个物理核心上,而第二个 P 集群大部分时间处于空闲状态。
下图显示了 M4 Pro 的 P 核上运行的 4 个密集核内浮点算法线程。
从集群来看,这些线程首先加载到第二个 P 集群(红色条),在那里运行 0.4 秒,然后移至第一个集群(淡蓝色条)。在那里运行 1.3 秒后,它们又移回第二个集群,再运行 1.3 秒,然后在第一个集群上完成。
接下来的两个条形图分别显示了每个集群,说明了它们内部的线程移动性。
在第一个集群(上图)上运行时,线程似乎每 0.3 秒就会移动到不同的核心,就像在第二个集群(下图)上一样。
集群频率与此变化相匹配,每个集群都以最大频率运行(此处显示的是整个集群的平均频率)来处理在其核心上运行的线程。P 集群下方的黑线显示了 E 集群在此期间平均频率的微小变化。
最后一张图表显示了同一时期内 CPU 的总功耗(单位:mW)。这里特别值得注意的是powermetrics两个 P 集群报告的功耗差异:第一个集群 (P0) 在运行这四个线程时功耗稳定在 6,000 mW,而第二个集群 (P1) 的功耗略低,为 5,700-5,800 mW。这可能是由于测量误差造成的powermetrics,该芯片独有,也可能反映了两个集群之间的潜在差异。
线程移动性使得解读活动监视器中的 CPU 历史记录变得困难,因为可用的最快采样频率是每秒一次,而我们powermetrics在收集上述数据时每 0.1 秒采样一次。由于线程组可能每 1.3 秒左右在集群之间移动一次,这给人的印象是线程同时在两个集群上运行。再次强调,解读活动监视器显示的数据时需要非常小心。
总而言之:
1、当前的M4芯片提供4-12个CPU P核心。
2、M4 P 核心排列成最多 6 个集群,共享 L2 缓存并以共同频率运行。
3、P 核心集群可以关闭,以最低频率 1,260 MHz 空闲,或者以 18 个设定频率之一空闲,4、最高频率为 4,512 MHz,由 macOS 控制。
5、它们的指令集“从技术上讲”是 ARMv9.2-A,但没有可扩展矢量扩展 (SVE)。
6、它们在空闲时消耗 1-2 mW,峰值可达 1,400 mW(浮点)或 3,230 mW(NEON 矢量代码)。
7、macOS 优先为它们分配所有高于 QoS 9(后台)的线程。
8、在 M4 P 核心上运行的线程是移动的,可能会频繁移动到同一集群中的另一个核心,并且只需一秒多一点的时间,就可以转移到另一个 P 集群中的核心(如果可用)。
9、线程移动性使得活动监视器中的 CPU 历史记录窗口的解释变得非常困难。
其中驻留率是核心处于特定状态的时间百分比。因此,空闲驻留率是核心处于空闲状态且未处理指令的时间百分比。活动驻留率是核心不处于空闲状态但正在积极处理指令的时间百分比。停机驻留率是核心关闭的时间百分比。所有这些都与核心的频率或时钟速度无关。
E核心架构
所有 E 核心都排列在一个由 4 个或 6 个核心组成的集群中,共享通用的 L2 缓存,并以相同的频率(时钟速度)运行。对 M1 核心的分析表明,每个 E 核心的处理单元数量大约是 P 核心的一半,而 P 核心的处理单元数量不止一个,因此 M1 E 核心的计算能力大约是 P 核心的一半。我还没有看到对后续 M 系列中核心的任何类似分析,尽管功耗差异意味着处理单元和计算能力仍然存在很大差异。
与 P 核一样,E 核可以设置为在最小 1,020 MHz 和最大 2,592 MHz(1.0-2.6 GHz)之间的 5 个值中运行。运行 macOS 时,集群频率由 macOS 在内核级别设置;其他操作系统可能会提供更直接的控制。此频率范围明显窄于 M3 中 E 核的频率范围,后者在 744-2,748 MHz 之间。
E 核心在 1,020 MHz 时处于空闲状态,尽管它们可以完全关闭,但考虑到 macOS 后台线程在其上运行的稳定需求,这是例外情况。尽管如此,powermetrics仍然将其“停机”驻留与空闲驻留分开报告。
这被认为与 M4 P 内核支持的不带可扩展矢量扩展 (SVE) 的 ARMv9.2-A 相同,从而允许在任一内核类型上运行相同的线程。
了解不同核心类型之间的差异的一种方法是比较每种类型中运行的单个密集型核心内线程。为此,我在 macOS 15.1 中使用了紧密的浮点计算循环,在两种不同的服务质量 (QoS) 设置下运行。
P 核上高 QoS 的单线程
该线程最初加载到第二个 (P1) 集群中的 P13(红色)上,3.7 秒后移至第一个 (P0) 集群中的 P5(蓝色)。在该集群上运行 4.6 秒后,该线程被移回第二个 (P1) 集群,在 P11(紫色)上运行。在此运行期间,两个 P 集群上几乎没有其他活动,因此非活动集群被关闭,而该线程则在另一个集群上运行。
活动集群始终以 4,511 MHz 的最高频率运行。在线程被移至另一个集群之前,该集群被启动并运行至最高频率,准备运行该线程。
在线程执行期间,总 CPU 功率保持相似,但根据哪个集群处于活动状态,存在细微且一致的差异:第一个集群 (P0) 的功耗约为 2,520 mW,比第二个集群 (P1) 的约 2,470 mW 高 50 mW。这与之前报告的差异相符,值得在其他 M4 Pro 芯片中进行评估,以确定这是否是一个普遍特征。
有几种方法可以在 E 核心上运行代码,例如此处使用的内核浮点循环测试:它们可以在低 QoS(后台)下运行,这样 macOS 就会将它们分配到仅在 E 核心上运行,或者当线程数多于可用的 P 核心时,它们可以从高 QoS 线程中溢出。在 M4 Pro 芯片上,这需要 11 个线程,这会导致其中一个线程被分配给 E 集群,如下所述。
此图表显示了四个 E 核心上的活动驻留情况,其中单个高 QoS 线程被拆分到这些核心上。虽然核心 E1、E2 和 E3 似乎在这段超过六秒的时间内处理其他线程,但核心 E0 似乎以 90-100% 的活动驻留率运行,执行拆分的线程。请注意,在超过六秒的时间内,此线程未在核心之间移动。
E 集群频率始终保持恒定,最高频率为 2,592 MHz。CPU 功耗不可避免地由 10 个 P 核心主导,这些核心以 100% 活跃驻留和最大频率运行,保持在略低于 14,000 mW。不幸的是,使用powermetrics它无法直接估算 E 集群的功耗。
这与高 QoS 下的分裂线程非常不同。
这里没有证据表明 E 集群中的任何单个核心以 100% 活跃驻留率运行线程。相反,它似乎在核心之间快速自由地移动,在此期间,许多 0.1 秒的采样间隔跨越了多个核心的执行。
集群频率最低稳定在 1,050-1,060 MHz,短暂上升至最高 2,592 MHz 时会出现叠加峰值。这表明,如果没有其他线程要运行,单个线程很可能以接近核心最低频率运行。
在电力使用方面也看到了类似的情况,单单单个线程就需要大约 40-45 mW 的低背景峰值。
具体可以概括为:
1、P 核(高 QoS)以最高频率在单个 P 核上以 100% 主动驻留运行,并且不定期在集群之间切换(大约每 3.7-4.6 秒一次)。总功耗约为 2,500 mW。
2、溢出到 E 核的高 QoS 以最大频率在单个 E 核上以 90-100% 的主动驻留率运行,并且根本不会在核心之间切换,或者只是偶尔切换。
3、E 核(低 QoS)运行效率约为 100%,在集群中的所有 E 核之间频繁移动,频率接近最低。总功耗约为 40-45 mW。
虽然我将回过头来对 P 核心和 E 核心之间的性能和功耗进行更详细的比较,但在这里我仅提供了一个例子,用于上面使用的核内浮点任务。
在每个线程中运行 2 x 10^9 个循环,P 核在最高频率下每个线程需要 9.2-9.7 秒,每个线程耗电约 2,500 mW。E 核在接近最低频率下运行低 QoS 线程需要的时间约为其四倍,为 38.5 秒,但每个线程耗电不到 45 mW。因此,在 P 核上运行时,完成一个线程所需的总能量超过 23 J,在 E 核上运行时则不到 1.7 J。因此,E 核执行相同任务时耗电仅为 P 核的 7%。
总而言之:
1、当前的 M4 芯片具有 4-6 个 CPU E 核心。
2、M4 E 核心排列成 4 个或 6 个的单簇,共享 L2 缓存并以共同频率运行。
3、E 核心集群可以关闭(例外),以其最低频率 1,020 MHz 空闲,或者以 6 个设定频率之一空闲,最高频率为 2,592 MHz,由 macOS 控制。
4、它们的指令集与 M4 P 内核相同,ARMv9.2-A 没有可扩展矢量扩展 (SVE)。
5、它们在低频时消耗 40-45 mW,但目前无法直接测量它们在高频时的最大功率消耗。
6、当 E 核心的 QoS 为 9(后台)时,macOS 会将线程分配给 E 核心,而当具有更高 7、QoS 的线程由于全都处于繁忙状态而无法分配给 P 核心时,macOS 会将线程分配给 8、E 核心。这两种情况下,频率和核心分配的管理有所不同。
9、E 核心上的高 QoS 线程以最大频率运行,并且似乎不会在核心之间移动。
10、E 核心上的低 QoS 线程以接近最低频率运行,并且在核心之间具有高度移动性。
11、在 E 核上运行的低 QoS 线程比在 P 核上运行的高 QoS 线程运行得更慢,但 E 核的功耗要低得多,从而可以大大节省相同计算任务的总能耗。
托管虚拟机的P 核
对于任何 M 系列芯片来说,运行 macOS 虚拟机都是一个常见但不典型的情况。本文探讨了如何在 M4 Pro 主机的物理核心上处理虚拟 CPU 核心,并进一步深入了解它们的管理以及跨 P 核心集群的线程移动性。
除非另有说明,此处的所有结果均从我的免费虚拟化器 Viable 中的 macOS 15.1 Sequoia VM 获得,该 VM 分配了 5 个虚拟核心和 16 GB 内存,在运行 macOS Sequoia 15.1 的 Mac mini M4 Pro 上,配备 48 GB 内存、10 个 P 核心和 4 个 E 核心。
主机将所有虚拟化线程视为以高服务质量 (QoS) 运行,因此优先分配给 P 核,即使其原始线程可能以最低 QoS 运行。这带来的副作用是虚拟后台进程的运行速度比主机上的真实后台线程快得多。
在这种情况下,VM 被赋予 5 个虚拟核心,因此它们都可以在主机上的单个 P 集群中运行。这不会为 VM 分配 5 个物理核心,而是在主机的所有 P 核心上运行 VM 线程,总活跃驻留率高达 500%。如果为 VM 分配的虚拟核心多于主机 P 核心中可用的虚拟核心,那么它的一些线程将溢出并在主机 E 核心上运行,但频率较高,这是具有高 QoS 的主机线程的典型频率。
虚拟化对性能有轻微影响,但与其他虚拟化器相比影响很小。Geekbench 6.3.0 对客户机和主机的基准测试如下:
CPU单核虚拟机3643,主机3892
CPU 多核虚拟机 12,454,主机 22,706
GPU Metal VM 102,282,主机 110,960,其中 VM 作为 Apple Paravirtual 设备。
有些测试甚至更接近:使用我的核心浮点测试,1,000 Mloops 在虚拟机中运行需要 4.7 秒,在主机中运行需要 4.68 秒。
为了评估主机上的 P 核分配情况,我们在虚拟机中运行了核内浮点测试。该测试由 5 个线程组成,这些线程具有足够的循环,可以完全占用虚拟核心约 20 秒。在下图中,我仅显示了前 15 秒的结果,以代表整体情况。
从集群来看,这些线程主要首先加载到第一个 P 集群(淡蓝色条),在那里运行 1 秒多一点,然后才移动到第二个集群(红色条)。然后在整个测试过程中,它们每隔几秒就会在两个 P 集群之间定期切换。结果的这一部分完成了四个周期,每个周期耗时 2.825 秒,因此线程每 1.4 秒在集群之间切换一次,这与我之前报告的在主机上运行线程时发现的时间相同。
在这里显示的 15 秒的大部分时间里,两个 P 集群的总活动驻留率都固定在 500%,分配给 VM 的 5 个虚拟核心,小突发超过这个数字。因此,500% 代表那些虚拟核心,小突发是来自主机的线程。虽然这 500% 中的绝大部分是在活动的 P 集群上运行的,但总共约 30% 的活动驻留率由来自 VM 的其他线程组成,并在活动较少的 P 集群上运行。这可能代表 VM 的 macOS 后台进程以及其文件夹共享、网络和其他 Virtio 设备使用的开销。
当分解到每个集群中的单个核心时(如上图和下图所示),活跃集群中各个核心的总体活动差异不大。在活跃集群期间,每个核心的活跃度为 80-100%,使集群总活跃度达到约 450%。
如果您想知道这是否发生在较旧的 Apple 芯片上,并且这只是 macOS Sequoia 的一个功能,这里有一个类似的示例,在运行 macOS 15.1 的 M1 Max 中,一个 4 核 VM 运行 3 个浮点线程,可在活动监视器的 CPU 历史记录窗口中看到。集群之间没有线程移动。
powermetrics用于获取此数据的软件提供了两种类型的内核频率信息。对于每个集群,它给出一个硬件活动频率,然后对于每个内核,它给出一个单独的频率,该频率通常在每个集群内都不同。活动 P 集群中内核的运行频率通常为 4512 MHz,尽管集群频率较低,约为 3858 MHz。为简单起见,这里使用集群频率。
此图表上部线条显示了两个 P 集群的报告频率。下方是集群总活跃居住地,以显示每个时期哪个集群处于活跃状态。
活跃集群的频率稳定在 3,900 MHz 以下,但当它变得不那么活跃时,其频率变化很大,从空闲时的 1,260 MHz 上升到近 4,400 MHz,通常持续时间很短。这与活跃集群运行密集的核心测试线程以及另一个集群处理来自虚拟机和主机的其他线程一致。
一些在笔记本电脑上运行虚拟机的人报告说,它们似乎会很快耗尽电池电量。根据主机的先前结果,此处使用的浮点测试预计会使用稳定的 7,000 mW。
后一张图表显示了同一时间段内 CPU 的总功耗(单位:mW),同样加入了集群活动驻留(此处乘以 10),以帮助识别集群周期。这似乎平均约为 7,500 mW,仅比在主机上运行时预期的功耗高出 500 mW。这不会导致笔记本电脑的功耗明显增加。
在前面文章中,我提到了两个集群之间的功耗差异,这也反映在这些结果中。当第二个集群 (P1) 处于活动状态时,功耗较低,约为 7,100 mW,而当第一个集群 (P0) 处于活动状态时,功耗较高,约为 7,700 mW。这需要在其他 M4 Pro 芯片上得到确认,然后才能解释。
总而言之:
1、macOS 客户机的性能几乎与 M4 Pro 主机一样好,尽管多核基准测试与分配给它们的虚拟核心数量成正比。特别是,Metal GPU 性能非常出色。
2、VM 中的所有线程都像在高 QoS 下运行一样,因此优先在主机 P 核心上运行。这可以加速 VM 中运行的低 QoS 后台线程。
3、虚拟核心分配包括来自 VM 的所有 VM 开销,例如其 macOS 后台线程。
4、客户线程与主机线程一样具有移动性,每 1.4 秒在 P 集群之间移动一次。
5、尽管在虚拟机中运行的线程会在额外的电力使用方面产生轻微的损失,但对于大多数用途来说,这并不重要。
6、再次,有证据表明 M4 Pro 中的第一个 P 簇 (P0) 比第二个 (P1) 消耗的电量略多。这需要在其他系统中得到证实。
7、powermetrics不能在虚拟机中使用,这并不奇怪。
https://eclecticlight.co/2024/11/18/inside-m4-chips-e-and-p-cores/
半导体精品公众号推荐
专注半导体领域更多原创内容
关注全球半导体产业动向与趋势
*免责声明:本文由作者原创。文章内容系作者个人观点,半导体行业观察转载仅为了传达一种不同的观点,不代表半导体行业观察对该观点赞同或支持,如果有任何异议,欢迎联系半导体行业观察。
今天是《半导体行业观察》为您分享的第3960期内容,欢迎关注。
『半导体第一垂直媒体』
实时 专业 原创 深度
公众号ID:icbank
喜欢我们的内容就点“在看”分享给小伙伴哦