关于CPU、指令集、架构、芯片的一些科普
作者:王强
链接:https://zhuanlan.zhihu.com/p/19893066
来源:知乎
随着智能设备的广泛普及,这几年媒体上越来越多的出现关于“架构”“ARM vs x86”“芯片研发”的相关内容。很多消费者和爱好者面对这些以往不太常见的信息时就会迷惑甚至产生误解。其中一组比较容易被混淆的概念就是CPU、架构、指令集与芯片。本文试图用较浅显的文字阐明它们的关系与区别,纠正一些常见的错误认识与观点。
学过计算机基础知识的朋友都知道CPU的含义,亦即中央处理器,是负责计算机主要运算任务的组件。一般习惯把CPU比喻为人的大脑。而了解略深的用户会听说CPU有x86、ARM等分类,前者主要用于PC而后者主要用于手机平板等设备。那么这里的x86、ARM指的是什么呢?
CPU执行计算任务时都需要遵从一定的规范,程序在被执行前都需要先翻译为CPU可以理解的语言。这种规范或语言就是指令集(ISA,Instruction Set Architecture)。程序被按照某种指令集的规范翻译为CPU可识别的底层代码的过程叫做编译(compile)。x86、ARM v8、MIPS都是指令集的代号。指令集可以被扩展,如x86增加64位支持就有了x86-64。厂商开发兼容某种指令集的CPU需要指令集专利持有者授权,典型例子如Intel授权AMD,使后者可以开发兼容x86指令集的CPU。
CPU的基本组成单元即为核心(core)。多个核心可以同时执行多件计算任务,前提是这些任务没有先后顺序。核心的实现方式被称为微架构(microarchitecture)。微架构的设计影响核心可以达到的最高频率、核心在一定频率下能执行的运算量、一定工艺水平下核心的能耗水平等等。此外,不同微架构执行各类程序的偏向也不同,例如90年代末期Intel的P6微架构就在浮点类程序上表现优异,但在整数类应用中不如同频下的对手。
常见的代号如Haswell、Cortex-A15等都是微架构的称号。
注意微架构与指令集是两个概念:指令集是CPU选择的语言,而微架构是具体的实现。i7-4770的核心是Haswell微架构,这种微架构兼容x86指令集。对于兼容ARM指令集的芯片来说这两个概念尤其容易混淆:ARM公司将自己研发的指令集叫做ARM指令集,同时它还研发具体的微架构如Cortex系列并对外授权。但是,一款CPU使用了ARM指令集不等于它就使用了ARM研发的微架构。Intel、高通、苹果、Nvidia等厂商都自行开发了兼容ARM指令集的微架构,同时还有许多厂商使用ARM开发的微架构来制造CPU。通常,业界认为只有具备独立的微架构研发能力的企业才算具备了CPU研发能力,而是否使用自行研发的指令集无关紧要。微架构的研发也是IT产业技术含量最高的领域之一。
数年前国产龙芯CPU获得MIPS授权的消息曾引起一阵风波,龙芯相关负责人还曾出来解释。龙芯是兼容MIPS指令集,微架构部由中科院自主研发的CPU系列。过去中科院资金不足所以没有MIPS指令集授权,但是指令集的实现方式是公开的,因而中科院可以在研发时选择兼容该指令集。待资金充足买下授权后,龙芯就可以合法在市面销售。从这里我们可以知道,厂商研发CPU时并不需要获得指令集授权就可以获得指令集的相关资料与规范,指令集本身的技术含量并不是很高。获得授权主要是为了避免法律问题。然而微架构的设计细节是各家厂商绝对保密的,而且由于其技术复杂,即便获得相应文档也难以山寨。不同厂商的微架构设计水平也有较大差异,典型如Intel与AMD的对比,前者在最近几年明显技高一筹。
微架构研发完成,或者说核心研发完成,接下来就是将其组装为芯片了。过去的芯片仅仅包括CPU部分,如今大量的芯片集成了CPU、GPU(图形处理单元)、IO等多种不同的功能组件,此时这种芯片就不是传统意义上的“CPU”了。将各种功能组件组装为芯片的技术含量相比微架构研发来说是较低的,因而业界能做此类工作的企业也数量较多。
在PC时代,几大主要的CPU研发厂商都只是自己研制微架构自己用。到了智能设备时代,ARM公司的微架构授权模式兴起。ARM自己开发微架构后将它们上架出售,其他厂商可以拿这些核心组装为芯片来使用或销售。由于这种模式对第三方的技术能力要求很低,加上ARM的微架构在低功耗领域表现优异,这种模式获得了广泛成功。如果你发现某款芯片标明使用了Cortex系列核心,则一定是这种模式的产物。如前所述,仅仅从ARM购买微架构来组装芯片的厂商是不能被称作CPU研发企业的,这些芯片也不能被称为“xx厂商研发的CPU”。典型如华为的海思920、三星Exynos 5430,只能说是“使用ARM Cortex-A15核心的芯片”。
但是如果一款兼容ARM指令集的芯片使用了厂商自主研发的微架构情况就不同了。高通骁龙800、苹果A7就是这样的例子–它们分别使用了高通、苹果自主研发的CPU。
随着智能设备市场不断扩大,ARM阵营也不断壮大。占领智能设备领域后,ARM阵营开始进入PC、服务器与高性能计算领域。先是ARM发布了ARM v8 64位指令集规范,接着是各大厂商纷纷开始研发基于ARM v8的高性能微架构。有人会问,ARM指令集不是为低功耗设备研发的吗?怎么现在又开始做高性能CPU了呢?多年以前这样的怀疑是很有道理的,因为彼时不同指令集对微架构的影响还比较大,ARM适合低功耗,x86适合PC,Power适合小型机……这类区分是存在的。但是随着技术进步,指令集对微架构的影响已经小到可以忽略,任何指令集都可以做出适合不同领域的优秀微架构来。因此用户看到x86指令集的手机cpu或是ARM指令集的服务器CPU都无需惊讶,这是技术发展的自然结果。
那么,现在各家CPU研发厂商选择指令集的标准又是什么呢?业界除了x86和ARM、MIPS,其实还有一大堆各种各样的指令集。比如小型主机领域的Sparc、Alpha、Power等。国内几家研CPU的科研机构就分别选择了x86、MIPS、Sparc、Alpha、ARM指令集,早年甚至有机构选择Intel没落的Itanium使用的EPIC指令集的。一般来说大家倾向于选择软件生态较好的指令集–前面说过,软件必须编译后才能在某种指令集平台上运行,而编译是很复杂的事情,绝大多数闭源软件仅仅会对少数一两个平台编译。因而支持某种指令集的软件应用越多,这种指令集也就越有市场优势–新开发的微架构只需要兼容某种指令集,那么就可以很容易运行大量为其开发的软件。早年因为微软的强势与Wintel联盟的推动,x86指令集成了最受欢迎的角色,帮助Intel用彼时性能相对落后的微架构在PC平台挤跑了一众对手。后PC时代由于苹果谷歌的两大操作系统平台的推动,ARM指令集又取得了绝对的市场优势。但对于新的CPU研发单位来说,他们想获得热门指令集的兼容授权是很困难的事情。以前x86与ARM的指令集授权是拿钱买不到的,想要得到都需要进行高水平专利交换。拿到x86授权的几家厂商要么是拿的早(AMD、Cyrix、IDT),要么是有高水平技术与Intel交易(Transmeta,以功耗控制技术同Intel交易)。后来Nvidia想要研发自己的CPU,找Intel软磨硬泡后者就是不给,搞得Nvidia相当无奈。国内的研发单位当年开始研究时自知不可能拿到x86授权,于是各自去找关系好些的其他授权方解决问题了。ARM这边也一直对指令集授权卡的很死,之前只有高通、博通和Intel得到,也是通过技术交换的形式。08年苹果乔帮主被Intel甩脸色后决定自己搞CPU,最后也拿到了ARM的许可,想来彼时老乔也是威逼利诱,硬是让ARM屈服了(毕竟指令集多授权一家就多个对手啊)。后来ARM对指令集授权也放松了,去年三星与华为也分别得到了授权,他们的自研CPU预计也将在未来一两年面世。
本文总结下来的内容很简单:指令集与微架构是不同的概念,不可混淆;CPU研发指的是微架构研发;如今指令集不再有“最适合领域”的说法。希望这篇文章能帮助被这些问题困扰的朋友,也希望媒体在提及这些概念时多做一些科普与澄清。
关于CPU、指令集、架构、芯片的一些科普的更多相关文章
- 处理器核、Core、处理器、CPU区别&&指令集架构与微架构的区别&&32位与64位指令集架构说明
1.处理器核.Core.处理器.CPU的区别 严格来说"处理器核"和" Core "是指处理器内部最核心的部分,是真正的处理器内核:而"处理器&quo ...
- 自己动手写处理器之第一阶段(2)——MIPS指令集架构的演变
将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第三篇.我尽量每周四篇 MIPS指令集架构自上世纪80年代出现后.一直在进行着更新换代,从最初的MIPS I到MIPS V,发 ...
- 常见的CPU指令集介绍
本文摘自网络 一.X86 是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,属于CISC. 1.1.简介 X86指令集是美国Intel ...
- arm cpu的架构及分类说明
今天在编译mplayer for mx27ads的时候, 碰到了armv5te与armv6优化的问题. 默认的交叉编译器支持armv5te也支持armv6,就默认使用了mplayer中mpeg4的ar ...
- CPU指令集
cpu作为一台电脑中的核心,它的作用是无法替代的.而cpu本身只是在块硅晶片上所集成的超大规模的集成电路,集成的晶体管数量可达到上亿个,是由非常先进复杂的制造工艺制造出来的,拥有相当高的科技含量. C ...
- 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍
将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...
- 深入理解CPU和异构计算芯片GPU/FPGA/ASIC (上篇)
王玉伟,腾讯TEG架构平台部平台开发中心基础研发组资深工程师,专注于为数据中心提供高效的异构加速云解决方案.目前,FPGA已在腾讯海量图片处理以及检测领域已规模上线. 随着互联网用户的快速增长,数据体 ...
- 一颗ARM架构芯片的软硬件构成
硬件和软件是一颗芯片系统互相依存的两大部分.本文总结了一颗芯片的软硬件组成.作为对芯片的入门级概括吧. (一)硬件 主控CPU:运算和控制核心.基带芯片基本构架採用微处理器+数字信号处理器(DSP)的 ...
- CPU 指令集(Instruction Set Architecture, ISA)
本文摘自网络 概念 指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序,用来引导CPU进行加减运算和控制计算机操作系统的一系列指令集合.拥有这些指令集,CPU就可以更高效地运行.系统所下达的 ...
随机推荐
- YUV相关积累
关于yuv 格式-Semi Planar和Planar https://www.cnblogs.com/welen/articles/5454315.html
- python3中zip()的用法
zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象. 这个可迭代对象可以使用循环的方式列出其元素 若多个可迭代对象的长度不一致,则所返回的 ...
- Go基础知识梳理(三)
Go基础知识梳理(三) 结构 type Person struct { name string sex int } func main() { //推荐写法 person := Person{ nam ...
- LeetCode-059-螺旋矩阵 II
螺旋矩阵 II 题目描述:给你一个正整数 n ,生成一个包含 1 到 \(n^{2}\) 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . 示例说明请见LeetCode ...
- linux 文件查找 find
find 是实时查找工具,通过遍历指定路径完成文件查找 特点: 查找速度略慢 精确查找 实时查找 查找条件丰富 1.对每个目录先处理目录内的文件,再处理目录本身 find /data/test -de ...
- 1列表展示的SQL,改为:只查询出vip会员,展示在页面上(10分)
模型代码: //会员 public static function member(){ return self::where('status',1)->select(); } 控制器代码: // ...
- egg中使用sequelize事务,实现原子性
let transaction; try { // 建立事务对象 transaction = await this.ctx.model.transaction(); const house = awa ...
- Springboot项目 配置数据库连接属性后,启动项目报错
Springboot项目 配置数据库连接属性后,启动项目报错,错误如下: 错误原因分析: 1.连接信息配置错误 当使用properties为配置文件时,如图所示,上面的 spring.datasour ...
- shellLab实验报告
一.预备知识 阅读课本CSAPP的第八章后完成本次实验,要求熟练掌握以下内容: 进程的概念.状态以及控制进程的几个函数(fork,waitpid,execve). 信号的概念,会编写正确安全的信号处理 ...
- bat加mimikatz一键获取密码
1 @echo off 2 >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\sys ...