##通用架构
CPU逻辑结构包括控制器,运算器和存储器三部分。其中,控制器主要负责取指,译码和执行的一系列控制,是CPU的指挥中心。运算器是执行器件,接受控制器的命令,执行特定运算,包括算数,逻辑,移位等。而存储器则是完成数据临时存储作用,包括寄存器和Cache两部分。CPU和内存交互的有两部分,一是取指过程,访问代码段;二是存取中间结果,访问数据区,主要是调用栈。前者基于ICache,后者基于DCache,通过缓存提升访问效率。

##寄存器组
由于频繁访问内存效率较低,CPU内部提供了一组寄存器,可以高速访问数据。根据用途分为专用寄存器和通用寄存器。专用寄存器如IR, BP, SP等,IR用于指令计数器,BP/SP用于调用栈帧标记。通用寄存器往往交给编译器来分配,一般ISA根据ABI约定给出一些使用规则和惯例,如CallingConv,并对寄存器进行分组管理。

##指令集合
指令集描述的是处理器的行为,反映了CPU的能力级。指令集包含运算类,访问类,控制类和状态类等,一般由若干操作码和若干操作数组成,由CPU内部的译码器来解析。指令的本质就是对数据的加工,包括加工方式和加工内容。其中,加工方式就是操作码Opcode,加工内容就是操作数Operands。操作码有大类和子类很多种,包括ISA标准指令和用户custom指令。操作数有寄存器,内存,立即数三部分。其中,目的操作数只能是寄存器和内存。典型的RISCV采用固定指令长度RV32编码,且寄存器位置也固定,简洁,高效,扩展性好。同时,通过RVC16压缩指令集,减少代码空间。

##主流技术
传统的处理器(子过程串行)
都是单指令串行执行,一条指令执行需要几个周期,分别完成取指,译码,执行。这种方式下CPU各组件很多时间处于空闲等待,效率非常低。

流水线技术(子过程并行)
将CPU一条指令分解为3步后,当前指令执行时同时进行下一条指令的预取取指,这样就可实现指令重叠执行,在一个时钟内完成。流水技术保证CPU内部各组件并行,效率提升很大。

SIMD(执行过程并行)
全称为Single Instr Multi Data,即单条指令处理多个数据,用于计算密集型应用,如图形处理,音频,视频多媒体等。SIMD本质上就是矢量计算,并行执行大量重复操作,要CPU硬件提供强大的执行单元。目前,x86上的SSE和ARM上的NEON就是用的SIMD技术架构,编译器可通过intrinsics方式来添加这种并行指令函数。

MIMD(指令级并行)
全称为Multi Instr Multi Data,即多指令多数据并行执行,数组指令级并行ILP范畴,用于复杂的并行计算。这种技术有两种实现方式,一是superscaler超标量技术,二是VLIW超长指令。它两共同点是都提供多条流水,多个slot,可实现指令级并行处理,但不同的是控制方式。超标量技术是完全由硬件来完成指令依赖分析和拆解,分配到不同槽上执行。超长指令字则是由编译器根据约束条件提前进行指令调度的分配,CPU按部就班执行。相对而言,VLIW技术硬件简单,效率更好,但增加了编译器的复杂度,一般用于专用定制领域。