指令集到底是个啥?

对计算机系统的知识十分匮乏

Posted by tianchen on September 27, 2019

参考自关于CPU、指令集、架构、芯片的一些科普

指令集 ISA Instruction Set Architecture

  • CPU执行计算任务时候的规范,或者说是CPU的语言
  • 程序在执行之前要被编译为CPU能够理解的语言,这种语言或者说是规范就是指令集ISA
  • 反映了CPU软件层面的设计
  • 指令集的Example - x86,Arm v8,Mips
  • 指令集也可以被拓展
    • 比如x86-64添加了对64位机器的支持
  • 厂商可以开发兼容某种指令集的CPU,需要获得指令集作者的授权
    • Intel授权x86指令集给amd,AMD来造x86架构的计算机
  • 大家一般都会选择软件生态环境较好的指令集
    • 支持该指令集的软件越多越好
  • 与汇编语言的关系? (机器码-汇编-高级语言)
    • 用人能看得懂的语言去描述指令集(Original指令集的机器码就是一堆二进制码)
      • 汇编被转化为二进制机器/运算码(Opcode)(两者基本一一对应)CPU内部的译码电路从纯硬件层面转化(Control/Logic Unit)
        • 🤔是否可以理解二进制码就是一大串从很多根wire进去的比特流,里面就是拿数电搭出来的逻辑与存储(SRAM),实际上会更加有条理(比如冯诺依曼架构-运算(ALU)/存储/控制)
    • 指令就是汇编程序嘛,指令的组合编程了指令集
    • 不同平台(CISC RISC)指令的长度不一样,内容也不一样,自然指令集也不一样
    • 指令集改变的时候,就会改变汇编语言,移植性差人们去开发高于指令集的语言,也就是高级语言
  • RISC-V就是开源指令集
    • 大家不需要商业授权都可以用的,开发者在其后端可以开发生态
    • UCB Work
    • 刚出来(2019.09/27 for future reference)阿里平头哥的玄铁910应该是基于它的
      • 量子位在他的文章里就来了一个基于RISCV架构开发
        • RISCV是指令集不是架构!

核心 > 微架构

  • 处理器架构指的就是微架构(然而我好像感觉实际中有混用的情况,至少引起了我的误解)
  • 物理上一个CPU可以有多个核心(Core)
    • 多个核心可以同时执行多个任务
  • 核心的具体实现方式(Implemention)被称为微架构(microarchitecture)
  • 反映了CPU硬件架构的设计
  • 指令集会决定处理器的架构
    • 处理器的微架构就相当于用硬件去实现指令集
  • 比如Haswell,Cortex-A15都属于微架构
  • 华为麒麟指令集也是买的Arm的
  • ARM公司自己研发Arm指令集,同时还将微架构(Cortex)对外授权
    • Arm公司可喜欢卖微架构的授权给其他厂商了,所以很多芯片都标注是Cortex核心
      • 通过购买微架构来生产芯片不能叫做做CPU嗷 - 三星 Exynos
      • 当然大厂一般是兼容arm指令集,但是自己设计微架构 - 高通骁龙,苹果A系列 (他们可以被叫做自主研发CPU)
    • 使用了Arm指令集的也不一定是Arm处理器(其微结构不一定是arm的Cortex)
      • 比如Intel,Nvidia都有兼容arm指令集的微架构-(aarch64?)
  • 微架构的设计才是真正的CPU设计(暴论)
    • 指令集可以授权,但是微架构的设计是绝对保密的
    • 比如龙芯就是兼容MIPS指令集的(但是微架构是自己设计的)
    • 为啥子AMD的CPU干不过Intel,Intel把自己研发的指令集丢给你,但是你设计不出和它一样好的微架构(但是amd现在牛逼了,AMD YES)