{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/mobile-soc-overview/",
  "atlas": "https://www.pystone.net/?node=mobile-soc-overview#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/mobile-soc-overview.md",
  "context": "https://www.pystone.net/notes/mobile-soc-overview.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:mobile-soc-overview",
  "slug": "mobile-soc-overview",
  "title": "【转载】Mobile SoC",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "【转载】Mobile SoC",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "5b7119686d29f05a650d67ac6fa845547fac7398948a62b13182435aa37d0861",
  "assets": [
    {
      "reference": "assets/1606408907581.png",
      "url": "/media/114db839cae8ec31f5ad.png",
      "mediaType": "image/png",
      "contentHash": "114db839cae8ec31f5ad41855d49331eea8ad67bb9641d057ff1754b3e14b785",
      "byteLength": 953092,
      "width": 680,
      "height": 610
    },
    {
      "reference": "assets/1606445509873.png",
      "url": "/media/2540a951590dec11c352.png",
      "mediaType": "image/png",
      "contentHash": "2540a951590dec11c3524df20ee254a873c4dd9c951e6d65173e21c6892e5efd",
      "byteLength": 428729,
      "width": 1724,
      "height": 1199
    }
  ],
  "headings": [
    {
      "depth": 1,
      "text": "【转载】Mobile SoC",
      "anchor": "转载mobile-soc",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#%E8%BD%AC%E8%BD%BDmobile-soc"
    },
    {
      "depth": 2,
      "text": "SoC",
      "anchor": "soc",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#soc"
    },
    {
      "depth": 3,
      "text": "CPU",
      "anchor": "cpu",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#cpu"
    },
    {
      "depth": 3,
      "text": "GPU",
      "anchor": "gpu",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#gpu"
    },
    {
      "depth": 4,
      "text": "GPU(图形处理器) ARCHITECTURE的变迁史",
      "anchor": "gpu图形处理器-architecture的变迁史",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#gpu%E5%9B%BE%E5%BD%A2%E5%A4%84%E7%90%86%E5%99%A8-architecture%E7%9A%84%E5%8F%98%E8%BF%81%E5%8F%B2"
    },
    {
      "depth": 4,
      "text": "市场状况",
      "anchor": "市场状况",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#%E5%B8%82%E5%9C%BA%E7%8A%B6%E5%86%B5"
    },
    {
      "depth": 3,
      "text": "CPU和GPU整体系统架构",
      "anchor": "cpu和gpu整体系统架构",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#cpu%E5%92%8Cgpu%E6%95%B4%E4%BD%93%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84"
    },
    {
      "depth": 3,
      "text": "SOC天梯",
      "anchor": "soc天梯",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#soc%E5%A4%A9%E6%A2%AF"
    },
    {
      "depth": 2,
      "text": "通用并列处理",
      "anchor": "通用并列处理",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#%E9%80%9A%E7%94%A8%E5%B9%B6%E5%88%97%E5%A4%84%E7%90%86"
    },
    {
      "depth": 2,
      "text": "ARM",
      "anchor": "arm",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#arm"
    },
    {
      "depth": 2,
      "text": "Ref",
      "anchor": "ref",
      "citation": "https://www.pystone.net/notes/mobile-soc-overview/#ref"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:game-graphics-and-runtime",
      "title": "游戏图形与运行时",
      "url": "https://www.pystone.net/notes/game-graphics-and-runtime/",
      "atlas": "https://www.pystone.net/?node=game-graphics-and-runtime#knowledge-atlas",
      "label": "游戏图形与运行时",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "渲染基础中的“【转载】Mobile SoC”导航项",
      "citation": "https://www.pystone.net/notes/game-graphics-and-runtime/#%E6%B8%B2%E6%9F%93%E5%9F%BA%E7%A1%80"
    }
  ],
  "contentMarkdown": "# 【转载】Mobile SoC\n\n> 创建时间：2020/11/26 23:15\n\n  * 【转载】Mobile SoC\n    * SoC\n      * CPU\n      * GPU\n        * GPU(图形处理器) ARCHITECTURE的变迁史\n        * 市场状况\n      * CPU和GPU整体系统架构\n      * SOC天梯\n    * 通用并列处理\n    * ARM\n    * Ref\n\nMobile device的硬件种类繁多，差异较大。国内相关博客也较少。本文内容转载了博主leegoonz和电子工程专辑的文章，无法保证信息的时效性与准确性，但希望能借此对移动设备硬件有所了解。\n\n## SoC\n\n单片系统(System on a Chip): 是一个将电脑或其他电子系统集成到单一芯片的集成电路。常应用在嵌入式系统中。\n\n![Alt text](assets/1606408907581.png)\n\n**AP(Application Processor)** \\- AP 包括了CPU和GPU核心，其运行操作系统和应用程序，具有control附近Chipset的function。\n\n> AP原来是指用电池驱动的，专门为Mobile Embedded Computing设计的CPU。早期，其安装在notebook/netbook/UMPC和PDA等便携式PC上。现在，AP(Application Processor)安装在智能设备的SoC上，已经成为了mobile process的代名词。\n\n**组成** \\- CPU，处理2D/3D图形的GPU，ISP(Image Signal Processor)，multi format video codec(编码解码器), 运行audio and voice recognize processing的数字信号处理器（DSP, Digital Signal Processor），以及各种interface IP等\n\n### CPU\n\nARM公司的Cortex-A处理器是市场上的主流产品。\n\n### GPU\n\nGPU支持OpenVG， OpenGL ES等图形语言和library。Imagination Technologies公司的 **PowerVR** 和ARM公司的 **Mali** 是具有代表性的GPU IP产品。\n\n#### GPU(图形处理器) ARCHITECTURE的变迁史\n\n著名的游戏引擎虚幻引擎(Unreal Engine)Epic Games的Unreal window用PC游戏是在1998年公布的。当时因为还是软件渲染时代，坐标转换矩阵计算是在CPU中进行的。\n\n1999年NVIDIA发布了Geforce 256显卡，因为硬件是T&L(transform & lighting)，矩阵计算和Multiply accumulate operation这些固定功能是由硬件来实现的，从这个时候开始，3D PC游戏的坐标转换将在GPU中实现。\n\n单机游戏机中，在2000年发布的索尼Playstation2中CPU Emotion Engine的向量运算单位已经实现了几何处理，2001年发售的任天堂GameCube在GPU Flipper上实现了硬件T&L。\n\n2000年微软发布了window用图形API DirectX 8。\n\nDirectX 8不是固定功能，而是搭载了用户可以自定义编写的软件管线的硬件Shader，前提得是Programmable shader架构的GPU。\n\nShader分为两种，处理几何的Vertex Shader和处理Pixel的Pixel Shader，各自内部分别实现了个别硬件Block。\n\n在OpenGL/OpenGL-ES中，把在DirectX中叫做Pixel shader的词汇称之为Fragment shader。\n\n2001年发布了支持DiectX 8的操作系统windows XP和Nvidia GPU Geforce 3。\n\n同年，发售的微软单机游戏机 ‘XBOX’搭载了支持自定义的Geforce 3，并支持Programmable shader。\n\n渲染就是为了表现出3D立体感，给物件赋予由Shading这种模型现象而产生的阴影和灯光效果。\n\n灯光、阴影处理等影响渲染结果的处理有很多，所以Shading这个词汇作为现代用语，指的是使用GPU来渲染的一般表现。\n\n把在GPU硬件Shader中运行的程序叫做Shader Program，有时候干脆就叫做Shader。\n\n在这之后，在2005年发售的微软XBOX 360中采用的ATI GPU Xenos，采用了Unified shader，这是一个很大的突破。\n\nUnified shader作为同一硬件，在Shader process 中，同时处理vertex shader和Pixel shader两边，会根据各自处理阶段和每个游戏特性的不同会更换适合各个处理负荷的资源分配，在Shader process 方面能保持road平衡。\n\n这边Unified shader process是以stream processing unit来实现的，具有5要素的VLIW(Very Long Instruction Word,超长命令) ISA。\n\n5要素就是为了Vector4和Matrix4x4运算的 XYZW的4unit，超越函数和为了形态变换处理的T unit合在一起叫做VLIW5。\n\n在支持Unified shader以后，作为大规模并行计算机(Massively parallel computer)的概念也渐渐明确下来，分支预测也逐渐加强，GPGPU处理为了不一直停留于图形处理，逐渐开始使用GPU。\n\n这种趋势一直持续到现在为止。手机用的GPU，每种最新的型号都采用了Unified shader。现在比较有代表性的GPU架构（开发公司）如下：\n– Mali/Midgard(ARM)\n– Adreno\n– Tegra\n– PowerVR\n最新型号都支持OpenGL ES 3.1。其中Mali的最新型号不是VLIW5，采用的是省略了T unit的VLIW4，把使用的并不是很多的T unit给省略了，把这部分又分配给了其它地方，处理速度就提高了。而且，Adreno, Tegra, PowerVR的最新型号用的也不是VLIW，采用的是接近于一般CPU ISA的Scalar processor。Scalar processor因为不是向量计算用SoA形式，所以处理一般AoS形式的数据也是很快的。\n\n随着Shader program变得越来越复杂，这么做就是为了应对除了向量运算以外增加的处理。\n\n虽然它是GPU core，但是实际搭载在手机上的不仅仅是GPU，而是把和CPU通信的通信调制解调器等相关部件都一并搭载在一个芯片上的 SoC(System on Chip)。apple A8，高通骁龙，Nvidia Tegra 等公司从ARM拿到许可，把CPU芯片也包含在了SoC上。\n\n手机GPU的Die-Size（半导体芯片面积）因为手机form factor的尺寸很小，比PC用台式GPU要小很多，性能也要差很多。但是，现在手机GPU的Die-Size也有逐渐变大的趋势，以FLOPS来表示的浮动小数点运算性能来看， iPhone 6的GPU比iPhone 5的GPU的运算性能要高4倍，性能提高的非常快。正如以哪个硬件为对象，优化的内容就完全不一样，开发手机软件的时候，作为我们发布对象的市场是哪个，需要慎重考虑。\n\n系统内存空间虽然也会越来越大，但是正如GPU性能的提升和画面分辨率的提升并没有形成正比，所以内存空间依旧是稀有资源。\n\n而且，和在SoC外面的又远又慢的系统内存的access是通过公交（路径，Bus）实现的，它和CPU,GPU消耗的电力和产生的热量是类似的，根据电池消耗和Soc温度调节功能的不同，可能会成为导致性能低下的原因，所以尽可能减少对系统内存的access。\n\n我们看下PowerVR Series7XT的内部结构，心脏部位多数是Unified shading cluster,USC)的集合。USC即是scalar运算引擎，又是一般使用的浮点型单精度浮动小数点(FP16)，也支持double型二倍精度浮动小数点(FP32)的运算。GPU整体作为 ALU(arithmetic logic unit,运算装置)搭载的处理器核数量最大已经提高到了512个。\n\n作为手机GPU，PowerVR的传统特征是所谓的TBDR(Tile based deffered rendering)方式。\n\nViewport变换结束后，把画面分成小的tile(bin)，把属于1 tile内的临近区域的Geometry集合相关的Pointer转送到搭载于GPU Chip上的小的、快的专用内存，像素处理好之后，把结果记录于系统内存的Frame buffer。此时，先计算物件的前后关系，根据Over-load把不需要的Pixel shader处理功能都删掉，运行Deffered rendering（延迟渲染）。\n\n并没有采用PC用台式GPU的Tile分配，而是采用了简单的 IMR(Immediate mode rendering)方式。\n\n内存带域策略来看，利用硬件支持的压缩格式虽然效果也挺好的，PowerVR支持自己的贴图压缩格式PVRTC。\n\n安卓设备主流Mali或者Adreno的GPU仅实现了除了deferred rendering的TBR(Tile based rendering)。\n\n现在，手机设备1080P以上也成了标准，分辨率和PC环境也没啥区别，Pixel shader处理比重也升高了。\n\n分tile来渲染的方式，也有缺点，因为随着顶点数的增加，Tile overhead会增加，所以要控制顶点数量，以防顶点处理成为瓶颈。而且，在渲染中，如果要试图关于Frame buffer的accessh和复数渲染目标的连接的话，因为中间状态要存储到系统内存，会导致严重性能问题。\n\n#### 市场状况\n\n  * 三星Galaxy S4的国内版（韩国版） - 三星自己研发的Exynos(Arm cortex + ARM MALI 的图形处理器组合)\n\n  * 三星国外版和LTEA版 - Qualcomm(高通)公司的Snapdragon(晓龙) 800\n\n> 两者压缩Texture的方式不同，所以两者在压缩Texture的memory Access speed，capacity 和image channel type上不同\n\n  * iPhone和iPad - 由Arm cortex + PowerVR组成的mobile AP\n\n> PowerVR的Tile based rendering技术\n>\n>     * 没有Z buffer，内存的使用率高\n>\n>     * 不访问Z buffer，减少开销\n>\n>     * 不用担心渲染顺序，会自动作半透明处理\n\n![Alt text](assets/1606445509873.png)\n\n来源：DeviceAtlas\n\n上面这份数据来自DeviceAtlas[4]，发布时间在2019年年中。这份数据统计的是截至2019年第一季度，DeviceAtlas数据库中36个不同国家的GPU使用率。这份统计实际可能受到DeviceAtlas样本量的局限，不过它依然符合我们的基本认知。由于它考察的是手机保有量，而非当季最新出货量，所以仍有大量老设备活跃。其中PowerVR Series7XT，实际是iPhone 7时代的GPU。其他更多出现在榜单上的设备皆来自高通和Arm。\n下面的对比中，我们考察这些市场玩家最新推出的GPU旗舰产品，以及上一代GPU旗舰产品——除了苹果这样相对特殊的市场参与者，通常在GPU IP发布的半年到2年的时间里，实际的芯片产品才会问世，所以这些厂商的上一代GPU产品通常才是当前活跃在市场上的旗舰。\n那么实际的对比对象就十分明确了，即：\n\n  * 苹果A13 Bionic\n\n  * 苹果A12 Bionic\n\n  * 高通Adreno 650（高通骁龙865）\n\n  * 高通Adreno 640（高通骁龙855）\n\n  * Arm Mali G77（三星Exynos 990/联发科天玑1000）\n\n  * Arm Mali G76（三星Exynos 9820/海思Kirin 990、980）\n\n  * Imagination PowerVR A-Series\n\n  * Imagination PowerVR Series 9\n\n### CPU和GPU整体系统架构\n\n现在我们整体来看下包含CPU和GPU的系统架构，参考的是用于Sony Xperia Z4等机型的SOC 高通骁龙810内部数据流。\n\n64位多核心CPU和Adreno GPU通信，结构是引用两边的系统内存上的几何，贴图和shader。\n\n虽然，PC上CPU和GPU有各自专用的内存，但是，单机游戏机和手机设备的话，一般都是单一系统内存，CPU和GPU都能访问的一个整合的内存结构(Unified memory architecture,UMA)。\n\n内存Bus如果单一的话，不管对耗电还是对内存芯片配线面积都是有利的。\n\nUMA的优点是不管内存芯片多小，内存空间都能有效利用。\n\n当CPU内存使用的少的时候，GPU相对可以使用更多的内存。同时，UMA的缺点是，CPU和GPU相互会抢内存带域，可能相互会干涉处理。\n\n而且，不是UMA的时候，当CPU和GPU使用不同类型的内存芯片的时候，CPU使用低延迟的内存芯片，GPU使用的是宽带宽的内存芯片，按照处理器别，选用适合自己的work load，虽然能提高处理效率，但是像UMA这种情况又是无法妥协的。举个例子，以带宽优先，构成UMA，为了隐藏相对增长的Latency，要提高CPU的并行处理能力或者搭载更多的Cache.\n\n虽然有同样的缺点，UMA在掌机中也利用的是除了减少内存芯片的种类，降低成本的优点外，因为是用所谓的Heterogeneous System Architectur，由CPU和GPU构成的异构处理器来编程控制的，和为了处理仅仅依靠CPU无法处理的并列computing workload的系统构成很适合\n\n### SOC天梯\n\n<https://www.techcenturion.com/smartphone-processors-ranking>\n\nRank Processor Name Phone Centurion Mark\n1 Apple A14 Bionic Apple iPhone 12 165*\n2 Apple A13 Bionic Apple iPhone 11 154\n3 Snapdragon 865+ Asus ROG Phone 3 150\n4 Snapdragon 865 OnePlus 8 149\n5 Dimensity 1000+ Xiaomi Redmi K30 Ultra 146\n6 Apple A12 Bionic iPhone XS Max 146\n7 Dimensity 1000 146*\n8 Snapdragon 855+ Asus ROG Phone II 145\n9 Exynos 990 Samsung Galaxy S20 Ultra 144\n10 Snapdragon 855 OnePlus 7 Pro 144\n11 Kirin 990 5G Huawei Mate 30 Pro 5G 144\n12 Kirin 990 4G Huawei Mate 30 Pro 4G 143\n13 Exynos 9825 Galaxy Note 10+ 142\n14 Exynos 9820 Samsung Galaxy S10 140\n\n## 通用并列处理\n\n关于通用并列处理，专门为Heterogeneous Computing发布了叫做OpenCL的API。\n\n以游戏来说，原来在CPU上发生的物理运算和AI处理，现在在GPU上也能进行，并且CPU和CPU可以渐渐的相互通信，相互共享信息，Heterogeneous Architecture的优势也渐渐的突显出来了。手机设备上也同样，不仅仅局限于游戏，一般的软件也是同样，对图片处理和音频处理，物理处理这种高度的数据处理需求也在越来越大，往后用Heterogeneous Computing来优化应该是趋势。\n\n## ARM\n\n影响SOC性能更大的是其指令集和架构，目前大部分手机SOC都是基于ARM指令集和架构。ARM全称Acorn RISC Machine，是面向低预算市场的RISC微处理器设计公司，其下有A（Application Processor）、R（Real Time）、M（MCU）三个部门，手机SOC就出自A部门。\n\n## Ref\n\n<https://leegoonz.blog/2020/08/19/about-mobile-soc/>\n<https://post.smzdm.com/p/a07855q0/>\n<https://www.techcenturion.com/smartphone-processors-ranking>\n<https://www.eet-china.com/news/202001061219.html>\n"
}
