小米玄戒O1架构深度解析(一):十核异构设计与缓存层次详解

前言

这两天,小米的全新SOC玄戒O1横空出世,引发了科技数码圈的一次小地震,那么小米的这颗所谓的自研SOC,内部究竟有着什么不为人知的秘密呢?我们一起一探究竟。

目录

  • 前言
  • 1 架构总览
    • 1.1 基本构成
    • 1.2 SLC缺席的原因探索
  • 2. CPU设计
    • 2.1 不同核心之间的差异
    • 2.2 多核任务调度策略
      • 2.2.1 多核任务调度核心逻辑
      • 2.2.2 完全公平调度器
      • 2.2.3 能效感知调度
    • 2.3 超大核的分支预测方案
      • 2.3.1 自适应混合预测算法
      • 2.3.2 硬件结构深度优化
      • 2.3.3 推测执行与恢复机制
      • 2.3.4 AI驱动的动态学习
  • 3. 后记

1 架构总览

1.1 基本构成

随着诸多科技博主对玄戒O1进行了 “开膛破肚”,这颗芯片的神秘面纱,也被一点点揭开(图片来自极客湾)。
在这里插入图片描述

与宣传一致,玄戒O1采用了先进的台积电3nm N3E工艺,CPU方面采用了 “2+4+2+2” 十核四丛集架构(2颗X925超大核、4颗A725大核、2颗低频A725能效核、2颗A520超低功耗核)。各个核心的基本情况如下:
在这里插入图片描述

SOC内部没有分配SLC,而是直接采用了一个16M的L3缓存,外加各个核心专有的L2缓存(关于具体的缓存配置,会在第二章,也就是CPU部分详细展开)。


GPU配置方面也是相当豪华,搭载了16核ARM G925 GPU(也就是16个计算单元),每个CU包含128个FP32 ALU,总计 16 CU × 128 ALU = 2048个流处理器,按照惯例,还配有纹理单元和光栅化单元,此外共搭载4MB L2缓存。
在这里插入图片描述
我们来横向对比一下这款芯片与“友商”的产品
在这里插入图片描述
如此对比下来,理论上GPU的性能要比“友商”的产品强出不少。

那么,为什么小米选择了堆CU数量而不是堆每CU的ALU数呢?分析下来有以下几点原因:

  1. 并行效率优化

任务划分更灵活:16个CU可独立处理不同渲染阶段(如几何、像素、计算),降低资源争抢。
适合移动端负载:手游多为多线程小任务(如粒子效果、后处理),而非单指令大规模计算。

  1. 功耗与面积平衡

面积成本:每增加1个CU需额外约1.2mm²(4nm工艺),16 CU总面积约19.2mm²。
功耗控制:多CU可动态关闭闲置单元(如关闭8个CU处理UI渲染),比高频少CU方案更省电。

  1. 驱动与生态适配

开发者友好:主流图形API(如Vulkan)更适应多CU的任务分发模式。
工具链成熟:高通Adreno架构的调试工具链可直接适配,减少开发成本。


玄戒O1的NPU(神经网络处理单元)是其自研芯片的核心模块之一,基于小米多年积累的 MACE(Mobile AI Compute Engine)框架演进而来。由6核心外加10MB缓存构成。作为首款完全自研的AI加速器,玄戒O1的NPU在架构设计、能效比和软硬协同上展现了独特创新。
在这里插入图片描述
在软件生态上,同时兼容ONNX、TensorFlow Lite、PyTorch Mobile等神经网络架构,为软硬件协同开发提供了有利条件。


较之于所谓的CPU、GPU和NPU,一般的ISP并不会显得那么吸睛,玄戒O1的ISP(图像信号处理器)是其影像能力的核心引擎,通过自研架构和软硬协同优化,实现了从传感器原始数据到高质量成像的全流程突破。事实上,小米在很多年前,就已经在自研ISP了,最开始是在2017年,搭载在了小米5C上面。后又经几番迭代,日趋成熟。
在这里插入图片描述
小米的ISP发展,大致可分为一下几个发展阶段:
在这里插入图片描述
那么,什么是3A加速呢?

3A分别指的是自动对焦(AF)、自动曝光(AE)、自动白平衡(AWB),它们是成像质量的核心控制参数。澎湃C1芯片的3A加速 指通过专用硬件电路(而非传统软件算法)实现这三大功能的超低延迟、高精度处理。

关于语义分割和多帧合成就更复杂了,有时间再说😊。

1.2 SLC缺席的原因探索

首先我们先捋清楚概念,什么是SLC缓存,与普通的缓存有什么不同?

SLC(系统级缓存): 一种共享缓存,通常被多个处理单元(如CPU、GPU、NPU)共同访问,用于减少对主存的依赖,降低延迟和功耗。例如,高通的骁龙芯片通常集成6-8MB的SLC,供所有核心共享。
在这里插入图片描述
独立缓存(单元级缓存):
每个处理单元(如CPU核心、GPU模块、NPU加速器)拥有自己的专用缓存(如L2/L3缓存),独立管理,不与其他单元共享数据。

那么,该如何理解极客湾所说的:“最终去掉SLC,增加各个单元各自的巨大缓存,应该是为了规避低功耗区间翻车的风险”?

所谓的低功耗时候的风险,指的是当芯片处于低功耗模式(如手机待机、轻度任务处理)时,若共享资源(如SLC)的设计无法高效协调多单元访问,可能导致两个问题:

性能波动:缓存争用导致响应延迟增加。
功耗反弹:频繁唤醒主存或维护缓存一致性,反而增加功耗。

也就是说,在轻度负载的应用场景,SLC还在工作,而如果将这部分直接“舍弃”,那么对于玄戒O1来说,可直接利用小核自带的缓存去应付,这样就节省了部分功耗。

2. CPU设计

玄戒O1的CPU核心并非均质化设计,而是按 性能/功耗比 严格分级:

X925超大核3.9GHz):基于ARM Cortex-X4定制,专攻瞬时高负载(如游戏启动、AI推理);
A725大核3.4GHz):处理中度多线程任务(如视频编码、多应用切换);
低频A7251.89GHz):优化能效的轻量计算(如后台服务);
A520小核1.8GHz):负责低功耗常驻任务(如传感器数据采集)。

这种设计源自 ARM的DynamIQ技术,允许不同架构核心共享L3缓存和内存控制器,但每个丛集可独立调节电压/频率(DVFS)。这样一来,对于降低整机功耗非常有利。

2.1 不同核心之间的差异

上面对大小核有了简单的介绍,接下来我们详细介绍一下这些核之间的差异。
在这里插入图片描述
可以看到,更大的核心,意味着拥有更深的流水线深度,以及更加丰富的分支预测预测单元和更多的ALU和重排序缓冲区(什么是流水线,以及什么是分支预测,可以参考我的这篇文章CPU流水线技术全面解读)。

简单来说:

  • X925 通过更深的流水线和更大的ROB提升单线程性能,但功耗较高。
  • A725 在性能与能效间平衡,适合多线程任务。
  • A520 简化执行单元,减少面积和功耗,适合低负载场景。

关于缓存分配方面,为了方便数据的读写,当然是越大的核,配越大的缓存。超大核每个配置了2M的L2缓存,大核和能效核每个配置了1M的L2缓存,小核共用512k L2缓存,这些核共用16M L3缓存。
在这里插入图片描述
L1缓存一般集成在了各个核内部,从下面这张图可以看出来(图片来自ARM官网,相关技术手册)。
在这里插入图片描述
除此之外,不同的核,电源与工艺也不一样。
在这里插入图片描述
可见,超大核和大核由于功耗较高,可以根据任务的不同而选择睡眠或工作,而小核处于常开状态,从而在整体上控制可功耗,当然多核的调度策略远远没有这么简单,在下面章节中我们将重点讨论。

2.2 多核任务调度策略

2.2.1 多核任务调度核心逻辑

(1) 任务分类与优先级映射

  • 实时性任务(如触控响应、音频处理)→ 由 X925超大核 处理,确保低延迟;
  • 计算密集型任务(如游戏渲染、视频导出)→ 分配至 X925+A725大核,利用多线程并行;
  • 能效敏感型任务(如后台同步、消息推送)→ 交由 A520小核,减少唤醒大核的功耗。

(2) 调度器算法(Linux CFS + 小米定制优化)
玄戒O1基于 Linux内核的完全公平调度器(CFS: completely Fair scheduler),但小米做了以下深度优化:
负载预测模型:通过历史使用数据(如APP启动模式)预判任务类型,提前分配核心;
能效感知调度(EAS):结合芯片的 能量模型(EM),计算每个任务在不同核心的 功耗/性能比,选择最优解;
线程迁移成本控制:避免频繁跨丛集迁移线程(如从X925切到A520),减少缓存失效带来的性能损失。

(3) 硬件级调度辅助(PMU与IPC监控)
性能监控单元(PMU):实时监测各核心的 IPC(每周期指令数)、缓存命中率,动态调整调度策略;
中断负载均衡:硬件中断(如网络数据包到达)会优先路由到空闲小核,避免打断大核的关键任务。

以上的内容,其他的都比较好理解,那么什么是完全公平调度器(CFS),什么又是能效感知调度(EAS)呢?

2.2.2 完全公平调度器

  1. 核心目标
    公平性:确保所有任务按权重(优先级)公平分享CPU时间,避免饥饿。
    低延迟:通过细粒度时间片分配(最小调度周期约1ms),快速响应交互任务。
    普适性:适用于同构多核系统,不依赖特定硬件特性。

  2. 实现原理
    虚拟运行时间vruntime):
    每个任务维护一个vruntime,表示其已消耗的“虚拟CPU时间”。CFS优先调度vruntime最小的任务,保证长期公平。
    红黑树管理
    所有可运行任务按vruntime排序存入红黑树,调度器每次选择最左侧(最小vruntime)任务执行。
    负载均衡:
    定期检查各CPU负载,通过任务迁移平衡负载,但不感知能效差异。

  3. 局限性😟
    异构核盲视
    将大核(高性能高功耗)与小核(低性能低功耗)视为等同,可能将轻量任务错误分配到大核,导致能效低下。
    能耗不敏感
    调度决策仅基于CPU时间公平性,无法优化整体系统功耗。

鉴于以上的局限性,有了又来的能效感知调度策略。

2.2.3 能效感知调度

  1. 核心目标
    能效优化:在满足性能需求的前提下,最小化系统功耗。
    异构核适配:根据大核/小核的功耗特性,智能分配任务。
    动态调节:结合CPU频率(DVFS)与任务需求,实现精细化控制。

  2. 实现原理
    能量模型(Energy Model, EM):
    预置每个CPU核心在不同频率下的功耗曲线(如X925@3.9GHz功耗4.2W,A520@1.8GHz功耗0.1W)。
    能效成本函数
    计算任务在候选核心的 能效得分 = 性能需求 / 预期功耗,选择得分最高的目标核心。
    与CFS的集成
    继承CFS的vruntime和红黑树机制,维持公平性基础。
    负载均衡增强:在任务迁移时,优先考虑能效而非单纯负载均衡。

  3. 关键创新
    CPU容量感知
    定义每个核心的“计算容量”(如X925容量=1024,A520=256),任务负载按容量归一化。
    能效导向的唤醒决策
    唤醒空闲核心时,选择能效比最高的候选(而非默认的最小负载核心)。

2.3 超大核的分支预测方案

核心越大,流水线深度越深,则在预测失败后进行相关处理的成本越大。那设计一个优秀的分支预测算法就显得尤为重要。所以我们在此仅对该SOC超大核X925的分支预测原理进行分析(具体的分支预测方案这属于技术机密,我们不得而知,但是可以根据目前已知的一些分支预测方案做出合理推测)。

下图是一种常见的五级流水线内部结构图,作为参考:
一种五级流水线的内部结构图

可能的分支预测解决方案有以下几个:

2.3.1 自适应混合预测算法

TAGE-SC-L 预测器
采用多历史长度组合的预测机制,动态选择最佳历史深度(如4-bit至128-bit历史记录),通过几何级数分布的历史表覆盖不同分支模式(循环、条件跳转等)。

示例:对于频繁跳转的循环体(如for(i=0; i<N; i++)),短历史长度快速捕捉规律;对嵌套条件分支(如if(A && B || C)),长历史记录分析上下文依赖。

感知局部性增强
引入分支地址哈希优化,减少BTB(Branch Target Buffer)冲突。例如,玄戒O1可能使用XOR折叠算法对分支指令地址进行哈希处理,分散到不同预测表项,降低别名(Aliasing)导致的误判。

2.3.2 硬件结构深度优化

分层式BTB设计
L1 BTB:小容量、低延迟(1周期访问),缓存最近高频分支目标(如4K条目)。
L2 BTB:大容量、稍高延迟(3-4周期),存储低频但重要的分支(如16K条目),通过预取机制提前加载可能需要的条目。

使得CPU可以在较短时间内读取高频分支目标,提升整体处理效率。

分支目标预计算
在指令解码阶段,对间接跳转(如switch-case、虚函数调用)的目标地址进行硬件加速计算,利用专用电路快速解析跳转表或寄存器值,减少目标查找延迟。

采用专用电路缩减跳转时间。

2.3.3 推测执行与恢复机制

误预测快速回滚
采用Checkpoint寄存器堆,在分支预测时保存关键寄存器状态,误判时直接回滚至检查点,而非完全清空流水线,将恢复时间从20+周期缩短至5周期内。

动态推测深度调整
根据工作负载特征(如高分支误判率时),自动限制推测执行的指令窗口大小(如从200条缩减至50条),避免因深度推测浪费能耗。

这也属于一种自我优化机制,去掉了部分高分支误判率的指令窗口,理论上就可以降低误判率。

2.3.4 AI驱动的动态学习

运行时行为建模
集成轻量级神经网络协处理器,实时分析分支历史模式(如周期性、随机性),动态调整预测器权重。例如,检测到某分支近期误判率升高,自动切换至备选预测策略。

相当于一种自适应的分支预测,当然,这个神经网络不能设计得过于复杂,不然本身的功耗就不小,估计也就是哥多层感知机。
在这里插入图片描述

编译器反馈优化
与定制化编译器(如玄铁LLVM)协作,通过__builtin_expect等指令标记高概率分支路径,辅助硬件预测器初始化历史状态。

3. 后记

总觉得还有很多东西可以写,比方说多核调度策略和分支预测很多细节没有写到。而且GPU, NPU和ISP部分没有单独作为一个章节进行展开。但我觉得可以将玄戒O1的分析做个系列文章。欢迎继续关注后续更新。

参考资料:

  1. 哔哩哔哩up主极客湾的视频小米自研玄戒O1芯片深度评测:直逼8 Elite!
  2. 《大话计算机》
  3. ARM官网数据手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode如何像Pycharm一样“““回车快速生成函数注释文档?如何设置文档的样式?autoDocstring如何设置自定义模板?

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 让VSCode拥有PyCharm级注释生成能力 📒🚀 实现方案🛠️ 备用方案📒 自定义注释文档格式样式 📒🔄 切换主流注释风格✨ 深度自定义模板🛠️ 类型提示与注释联动优化⚓️ 相关链接 ⚓️📖 介绍 📖 用PyCharm写P…

数据库的事务(Transaction)

在数据库中&#xff0c;事务&#xff08;Transaction&#xff09; 是保证数据操作一致性和完整性的核心机制。它通过一组原子性的操作单元&#xff0c;确保所有操作要么全部成功&#xff08;提交&#xff09;&#xff0c;要么全部失败&#xff08;回滚&#xff09;。以下是数据…

2025-05-27 Python深度学习7——损失函数和反向传播

文章目录 1 损失函数1.1 L1Loss1.2 MSELoss1.3 CrossEntropyLoss 2 反向传播 本文环境&#xff1a; Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 1 损失函数 ​ 损失函数 (loss function) 是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的"风险&…

python+tkinter实现GUI界面调用即梦AI文生图片API接口

背景 目前字节跳动公司提供了即梦AI的接口免费试用&#xff0c;但是并发量只有1&#xff0c;不过足够我们使用了。我这里想做个使用pythontkinter实现的GUI可视化界面客户端&#xff0c;这样就不用每次都登录官方网站去进行文生图片&#xff0c;当然文生视频&#xff0c;或者图…

#git 储藏库意外被清空 Error: bad index – Fatal: index file corrupt

问题&#xff1a;通常是由于 Git 的索引文件损坏导致 原因&#xff1a;系统崩溃或断电、硬盘故障、Git 操作错误等 方案&#xff1a;重建索引文件&#xff1a;将当前的索引文件重命名为其他名称或删除&#xff0c;比如 index.m&#xff0c;然后命令行重建索引&#xff0c;git…

GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

车载网关策略 --- 车载网关通信故障处理机制深度解析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

Unity数字人开发笔记

开源工程地址&#xff1a;https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit 先致敬zhangliwei7758&#xff0c;开放这个源码 一、建立工程 建立Unity工程&#xff08;UnityAiChat&#xff09;拖入Unity-AI-Chat-Toolkit.unitypackage打开chatSample工程&#xff0c;可…

Cherry Studio连接配置MCP服务器

之前写了一篇关于Cherry Studio的文章&#xff0c;不了解的可以先看一下 AI工具——Cherry Studio&#xff0c;搭建满血DeepSeek R1的AI对话客户端【硅基流动DeepSeek API】-CSDN博客 最近Cherry Studio更新了一个新功能&#xff1a;MCP服务器 在 v1.2.9 版本中&#xff0c;…

OpenSSH 服务配置与会话保活完全指南

一、/etc/ssh/sshd_config 配置机制 1. 配置文件基础 文件作用 OpenSSH 服务器 (sshd) 的主配置文件&#xff0c;控制连接、认证、端口转发等行为。 加载与生效 修改后需重启服务&#xff1a;sudo systemctl restart sshd # Systemd 系统 sudo service ssh restart # S…

阿里云国际版注册邮箱格式详解

“为什么我的阿里云国际版注册总提示邮箱无效&#xff1f;” 这是许多初次接触阿里云国际版&#xff08;Alibaba Cloud International&#xff09;的用户常遇到的困惑。随着全球化进程加速&#xff0c;越来越多的企业选择阿里云国际版部署海外业务&#xff0c;而注册环节中邮箱…

【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号

问题&#xff1a; springboot本地启动应用报错&#xff1a; 程序包xxx不存在&#xff1b;找不到符号 解决方案&#xff1a; 1.确保用maven重新导入依赖 2.删除.idea文件夹 3.invalidate caches里&#xff0c;把能选择的都勾选上&#xff0c;然后清除缓存重启 4.再在上方工具栏…

FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制

FFmpeg 时间戳回绕处理&#xff1a;保障流媒体时间连续性的核心机制 一、回绕处理函数 /** * Wrap a given time stamp, if there is an indication for an overflow * * param st stream // 传入一个指向AVStream结构体的指针&#xff0c;代表流信息 * pa…

【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 -1 项目功能描述

1 项目功能描述 # 智慧社区-小程序-1 欢迎页-加载后端&#xff1a;动态变化-2 首页-轮播图&#xff1a;动态-公共栏&#xff1a;动态-信息采集&#xff0c;社区活动&#xff0c;人脸检测&#xff0c;语音识别&#xff0c;心率检测&#xff0c;积分商城-3 信息采集页面-采集人数…

5.27 day 30

知识点回顾&#xff1a; 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑&#xff1a;找到根目录&#xff08;python解释器的目录和终端的目录不一致&#xff09; 作业&#xff1a;自己新建几个不同路径文件尝试下如何导入 一、导入官方库 我们复盘下学习py…

【GitHub Pages】部署指南

vue项目 编辑你的 vite.config.ts 文件&#xff0c;加上 base 路径&#xff0c;设置为你的 GitHub 仓库名 import { defineConfig } from vite import vue from vitejs/plugin-vue// 假设你的仓库是 https://github.com/your-username/my-vue-app export default defineConfi…

远程控制技术全面解析:找到适合你的最佳方案

背景&#xff1a;远程控制为何成为企业核心需求&#xff1f; 随着企业数字化转型的推进&#xff0c;远程控制技术已成为异地办公和运维的关键工具。无论是跨国企业需要高效管理全球设备&#xff0c;还是中小型企业追求经济高效的解决方案&#xff0c;选择合适的远程控制技术&a…

触觉智能RK3506星闪开发板规格书 型号IDO-EVB3506-V1

产品概述 触觉智能RK3506星闪开发板&#xff0c;型号IDO-EVB3506-V1采用 Rockchip RK3506&#xff08;三核 Cortex-A7单核Cortex-M0, 主频最高1.5GHz&#xff09;设计的评估开发板&#xff0c;专为家电显控、显示HMI、手持终端、工业IOT网关、工业控制、PLC等领域而设计。内置…

九级融智台阶与五大要素协同的量子化解析

九级融智台阶与五大要素协同的量子化解析 摘要&#xff1a;本文构建了一个量子力学框架下的九级融智模型&#xff0c;将企业创新过程映射为量子能级跃迁。研究发现五大要素协同态决定系统跃迁概率&#xff08;P∣⟨Ψ_m∣H_协同∣Ψ_n⟩∣^2&#xff09;&#xff0c;当要素协同…

Kotlin学习34-data数据类1

定义如下&#xff1a;与普通类对比学习 //普通类 class NormalClass(val name: String, val age: Int, val sex: Char) //数据类 data class DataClass(val name: String, val age: Int, val sex: Char)对应找到java反编译的代码路径&#xff1a;Tool-->Kotlin-->Show K…