苹果的 M 系列 CPU 是 Apple Silicon 家族的一部分,这些是基于 ARM 的系统级芯片(SoCs),从 2020 年的 M1 开始引入。这些芯片采用异构(类似于 big.LITTLE)架构,结合高性能核心(P-cores)和高效核心(E-cores),以平衡功耗和性能。这种设计针对从后台进程到计算密集型工作负载的任务进行优化。
关键架构特征包括:
- 统一内存架构 (UMA):CPU、GPU 和加速器共享高带宽内存(例如,M4 中的理论峰值高达 120 GB/s),减少延迟并提高效率。
- 核心配置:
- M1:4 个 P-cores(最大 3.2 GHz)+ 4 个 E-cores(最大 2.06 GHz)。
- M2:4 个 P-cores(最大 3.5 GHz)+ 4 个 E-cores(最大 2.42 GHz)。
- M3:4-8 个 P-cores(最大 4.05 GHz)+ 4 个 E-cores(最大 2.75 GHz),根据型号而异(例如,M3 Pro 有 6 个 P-cores + 6 个 E-cores)。
- M4:4-10 个 P-cores(最大 4.4 GHz)+ 6 个 E-cores(最大 2.85 GHz),具有变体如 M4 Pro(10 个 P-cores + 4 个 E-cores)和 M4 Max。
- 附加组件:集成 GPU(使用基于图块的延迟渲染)、用于 ML 任务的 Neural Engine(针对 FP16/INT8 优化),以及加速器如高级矩阵扩展 (AMX) 用于矩阵运算,在 M4 中演变为 ARM 可扩展矩阵扩展 (SME)。
- 功耗和效率重点:设计用于低功耗(负载下通常 10-20W. ,CPU 支持 FP64/FP32,但 GPU 上的 FP64 有限。✅
这些芯片为 macOS 设备如 MacBooks、iMacs 和 Mac Studios 提供动力,性能在各代之间扩展(例如,M4 GPU 的 FP32 峰值约为 2.9 TFLOPS)。
芯片 | P-Cores (最大频率) | E-Cores (最大频率) | GPU 核心 | 内存带宽 (峰值) | 典型用例 |
---|---|---|---|---|---|
M1 | 4 (3.2 GHz) | 4 (2.06 GHz) | 7-8 | ~68 GB/s | 入门级 Macs (例如,MacBook Air) |
M2 | 4 (3.5 GHz) | 4 (2.42 GHz) | 8-10 | ~100 GB/s | 中档 (例如,MacBook Pro 13″) |
M3 | 4-8 (4.05 GHz) | 4-6 (2.75 GHz) | 8-40 | ~120 GB/s (Pro/Max) | Pro 型号,具有增强的 ML 加速。 |
M4 | 4-10 (4.4 GHz) | 4-6 (2.85 GHz) | 8-40 | ~120 GB/s | 最新,具有 SME 用于矩阵运算。 |
macOS 调度算法
macOS 使用 XNU 内核(Mach 和 BSD 的混合),它采用基于优先级的线程调度器,具有分时元素。调度器在运行队列上操作,这些队列分为带(Normal、System High Priority、Kernel Mode Only、Real-Time),允许线程根据行为迁移。优先级在带内随时间衰减以防止饥饿,系统支持策略如 FIFO、Round-Robin,以及针对音频/ML 任务的时间约束实时策略。
对于 Apple Silicon,调度针对非对称多处理 (AMP) 进行优化,其中线程通过 Grand Central Dispatch (GCD) 根据服务质量 (QoS) 级别进行分派。QoS 确定核心资格,没有直接 API 用于手动核心分配:
- QoS 级别:从 9(最低,后台)到 33(最高,用户交互)。低 QoS (9) 线程限制在 E-cores;更高 QoS 线程可以使用 P- 和 E-cores。
- 核心分配:
- 线程被排队并批量分配到核心集群(2-4 个相同类型核心的组,以统一频率运行)。
- 在 M1 上:最多 4 个高 QoS 线程优先 P-cluster;5-8 个溢出到 E-cluster。
- 在 M1 Pro/Max 上:前 4 个到 P0(4 个 P-cores),5-8 个到 P1(4 个 P-cores),溢出到 E-cluster(2 个 E-cores)。
- 在 M1 Ultra 上:四个 P-cluster 顺序加载,然后是 E-cluster。
- 后台任务(例如,Time Machine、Spotlight)仅在 E-cores 上运行,频率降低(M1 上约 1 GHz,在 Pro/Max 上可调整以实现功耗均衡)。
- 动态调整:GCD 动态分发任务,高 QoS 优先 P-cores,但在负载下招募 E-cores。实时线程指定周期分数(例如,3000/7000 周期),如果计算绑定则可能被降级。Mach 中的 Voucher 对象确保跨 IPC 的优先级继承。
在游戏和 HPC 中,开发者通过 OpenMP 调整 CPU 并行性或 Metal Performance Shaders (MPS) 用于 GPU,组织作业以最大化 P-core 使用,同时 E-cores 处理轻任务。 虚拟机(例如,在 Parallels 中)运行高 QoS 线程,但遵循主机调度规则。
挑战包括中等负载场景,其中线程迁移到 E-cores,导致 slowdowns(例如,在 DAW 如 Logic Pro 中),以及有限控制——工具如 taskpolicy -c background
强制 E-core 执行,但无法覆盖低 QoS 限制。
流程图-like 逻辑(来自草案):从 QoS 分配开始 → 队列分离(低 vs. 高) → 批量到集群 → 根据集群负载设置频率。
频率和功耗控制 (DVFS 和管理)
Apple Silicon 采用动态电压和频率缩放 (DVFS) 来实时调整核心电压/频率,在满足性能需求的同时最小化功耗。这是内核管理的,除了功耗模式(Automatic、Low Power)之外,没有用户暴露的控制。
- 频率缩放:
- 按集群:集群中的所有核心以相同频率运行,根据 QoS 和负载缩放。
- E-cores:单低 QoS 线程约 1 GHz(例如,在 M1 Pro 上);多线程或高 QoS 溢出时高达最大值 (2-2.85 GHz)。
- P-cores:高 QoS 接近最大 (3-4.4 GHz);在 Low Power 模式下降低(例如,M4 Pro 降到 3.624 GHz 用于 FP 测试,2.616 GHz 用于 NEON >5 线程)。
- GPU:独立缩放 (1.27-1.47 GHz),在某些模式下不受 CPU DVFS 影响(例如,M3 Pro Low Power 显示无 GPU 变化)。
- 功耗管理:
- Low Power 模式:限制总 CPU 功耗(M4 Pro 上约 14W. M3 Pro 上 <10W)以限制热量/风扇使用。降低 P-core 频率/能量(例如,M3 Pro NEON:每线程 6.7 KJ → 3.6 KJ;M4 Pro FP:每线程 1,300 mW → 1,100 mW)。E-core 频率无变化,但 GPU 降到 1/3 频率。✅
- Automatic 模式:更高频率/功耗(例如,M4 Pro NEON:3,000 mW/P-thread,280 mW/E-thread;7+ 线程总 >32W. 。✅
- 测量:使用
powermetrics
获取实时数据。效率在 GPU-MPS 上达到 >200 GFLOPS/W. CPU 约 0.25 TFLOPS/W。✅ - DVFS 机制:根据工作负载调整(例如,空闲/低负载:降频;高负载:升频)。统一 SoC 启用特定域缩放 (CPU/GPU/内存),尽管细节是专有的。在 HPC 中,DVFS 有助于能量效率,但限制 GPU 上的 FP64。
比较:
- E-cores 在轻任务上功耗胜出(例如,两个 E-cores 在最大频率下超越一个 P-core,同时使用更少功耗)。
- Low Power vs. Automatic:CPU 任务上 30-50% 能量节省,但在持续负载下可能节流。
总体而言,macOS 将 QoS 驱动的调度与 DVFS 集成,确保最佳电池寿命/性能,尽管开发者必须针对异构核心进行剖析。