CPU执行计算任务时都需要遵从一定的规范,程序在被执行前都需要先翻译为CPU可以理解的语言。这种规范或语言就是指令集(ISA,Instruction Set Architecture)。程序被按照某种指令集的规范翻译为CPU可识别的底层代码的过程叫做编译(compile)。
x86、ARM、MIPS都是指令集的代号。
指令集可以被扩展,如x86增加64位支持就有了x86-64。厂商开发兼容某种指令集的CPU需要指令集专利持有者授权,典型例子如Intel授权AMD,使后者可以开发兼容x86指令集的CPU。
CPU的基本组成单元即为核心(core)。多个核心可以同时执行多件计算任务,前提是这些任务没有先后顺序。
核心的实现方式被称为微架构(microarchitecture)。微架构的设计影响核心可以达到的最高频率、核心在一定频率下能执行的运算量、一定工艺水平下核心的能耗水平等等。
常见的代号如Haswell(Intel)、Cortex-A15(ARM)等都是微架构的称号。
指令集是CPU可识别的语言,而微架构是指令集的硬件实现。处理器架构和CPU架构是一个比较模糊的概念,它们同时包含了指令集架构和微架构的内容。
指令集架构(ISA Instruction Set Architecture),多了一个架构,或者说成体系。 因此ISA主要描述指令集的元信息,以及一些规范。 比如界定包含的指令,指令的长度规范,操作数的规范,内存模型等等。比起指令集,ISA更加抽象。
ARM公司将自己研发的指令集叫做ARM指令集,同时它还研发具体的微架构如Cortex系列并对外授权。但是,一款CPU使用了ARM指令集不等于它就使用了ARM研发的微架构。Intel、高通、苹果、NVIDIA等厂商都自行开发了兼容ARM指令集的微架构,同时还有许多厂商使用ARM开发的微架构来制造CPU。通常,业界认为只有具备独立的微架构研发能力的企业才算具备了CPU研发能力,而是否使用自行研发的指令集无关紧要。微架构的研发也是IT产业技术含量最高的领域之一。
数年前国产龙芯CPU获得MIPS授权的消息曾引起一阵风波,龙芯相关负责人还曾出来解释:龙芯微架构完全由中科院自主研发,但是兼容MIPS指令集。如今才获得授权是因为过去中科院没有足够的资金购买授权,但是指令集的实现方式是公开的,因此中科院可以在研发时选择兼容该指令集,待资金充足买下授权,获得MIPS指令集授权的龙芯便可以合法在市面销售。从这里我们可以知道,厂商研发CPU时并不需要获得指令集授权就可以获得指令集的相关资料与规范,指令集本身的技术含量并不是很高,获得授权主要是为了避免法律问题;然而微架构的设计细节是各家厂商绝对保密的,而且由于其技术复杂,即便获得相应文档也难以山寨,不同厂商的微架构设计水平也有较大差异,典型如Intel与AMD的对比,前者在最近几年明显技高一筹。
在PC时代,几大主要的CPU研发厂商都只是自己研制微架构自己用。到了智能设备时代,ARM公司的微架构授权模式兴起。ARM自己开发微架构后将它们上架出售,其他厂商可以拿这些核心组装为芯片来使用或销售。由于这种模式对第三方的技术能力要求很低,加上ARM的微架构在低功耗领域表现优异,这种模式获得了广泛成功。如果你发现某款芯片标明使用了Cortex系列核心,则一定是这种模式的产物。如前所述,仅仅从ARM购买微架构来组装芯片的厂商是不能被称作CPU研发企业的,这些芯片也不能被称为“ X X 厂商研发的CPU”。典型如华为的海思920、三星Exynos 5430,只能说是“使用ARM Cortex-A15核心的芯片”。但是如果一款兼容ARM指令集的芯片使用了厂商自主研发的微架构情况就不同了。高通骁龙8系列、苹果A系列就是这样的例子,它们是高通、苹果自主研发的CPU。
但是随着技术进步,指令集对微架构的影响已经小到可以忽略,任何指令集都可以做出适合不同领域的优秀微架构来。因此用户看到x86指令集的手机cpu或是ARM指令集的服务器CPU都无需惊讶,这是技术发展的自然结果。
汇编语言是用一些容易理解和记忆的字母,单词来代替一个特定的指令的一种计算机语言,方便人类记忆和理解,否则指令集都是一堆二进制代码,人类记忆和理解起来非常麻烦。
虽然汇编语言使用起来已经很方便了,但是仍存在一个显著的缺点:可移植性很差,因为汇编语言与指令集相对应,不同的指令集对应不同的汇编语言,如果需要移植程序则需要修改大量的汇编语言代码。因此,为了更高效的使用计算机,人类发明了一种更方便的语言,于是有了C、C++等高级语言。
如何让计算机理解高级语言呢,使用编译器编译高级语言即可。编译:将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”。