CPU指令集是CPU可以执行指令的集合,CPU为了适用不同的场景,支持的指令也朝不同的方向发展。由于指令的不同,指令集也逐渐演变为RISC(Reduced Instruction Set Computing)和CISC(Complex Instruction Set Computing)两大类型。不同的指令集又有各自的代表作:ARM、x86等。
RISC和CISC是两种不同的设计理念,RISC只支持少量通用的指令,而CISC为了支持复杂的功能定制化复杂的指令,既方便使用又提升了性能。由于CISC设计包括了较多的指令,所以指令长度较长,一般采用非固定长度设计。这样的设计导致流水线周期也较长,进行并行处理时容易因为误判运行时的数据而中断。中断后,流水线需要重头开始执行,导致并发性能低下。RISC与之相反,指令长度较短且长度固定,相应的保障了流水线快速运行。
当CPU主频较低时,采用CISC指令集可以利用一些复杂的指令实现更高速的数据处理。Intel公司的x86是CISC的代表,CPU为了满足多媒体处理的需求,推出了MMX SIMD多媒体指令集。1996年的奔腾(Pentium)MMX处理器集成了MMX指令集。MMX的1个64位寄存器可以拆分为2个32位整数或者4个16位整数或者8个8位整数,执行整数SIMD运算,提升2D、3D图像计算的速度。同期的AMD公司推出了3DNoW! 指令集与之竞争。为了使指令集发挥功效,必须在操作系统、驱动或者应用程序层面进行代码调整实现对新特性的支持。
SIMD示意图
RISC因为指令集简单、流水线执行更加高效、更多的寄存器可以减少内存访问、以及相对更简单的控制逻辑,使得CPU架构设计可以在功耗和性能上找到更佳的平衡点。手机上的ARM芯片就是采用RISC指令集,当今的芯片制造水平越来越高,ARM架构的性能也可以与x86架构相抗衡。Apple设计的Apple Silicon芯片M1替代了Intel的CPU,M1芯片不仅是CPU还集成了GPU和神经网络引擎等功能。ARM架构不仅在桌面PC上开始取代x86架构,在服务器市场阿里云也推出了ARM CPU的服务器实例。
我国自主研发的龙芯3A6000采用了自主知识产权的LoongArch架构,此种架构基于RISC思想进行设计。龙芯最初采用MIPS架构,为了避免授权的限制自主研发架构。当今两大主流的CPU架构都掌握在英美两国手中。x86的专利掌握在Intel手中,不但自己制造芯片还授权给AMD等几家公司进行生产制作。ARM的专利由ARM公司所有,自身不生产芯片只专注于CPU架构的设计,授权给其它厂家生产。
龙芯3A600
芯片性能的好坏由指令集、芯片设计能力和芯片制造能力共同决定。随着后两项能力的提升,RISC和CISC架构的CPU在性能上的差距越来越小。RISC和CISC没有绝对的优略,只有谁更适合特定的使用场景。