2.1 什么是指令

在计算机科学中,指令是计算机硬件理解和执行的一组二进制代码。在计算机中,有许多不同类型的指令,例如算术运算、逻辑运算、数据传输、控制指令等。每种类型的指令执行特定的操作,这些操作在处理器的控制下进行。每个CPU都有一组特定的指令集,它可以理解和执行操作系统发出的计算请求,这被称为指令集架构(Instruction Set Architecture,ISA)。例如,有些计算机采用x86架构、ARM架构或者MIPS架构。

CPU的设计旨在最大限度地提高其执行指令的效率,可通过并行执行,或者说在同一时间执行多个操作。流水线就是一种并行化技术,它允许CPU同时处理多条指令的不同阶段。

当一个指令进入CPU的流水线时,指令首先被取出(Fetch)并被译码(Decode)以确定应执行的操作。然后,指令在执行(Execute)阶段执行实际操作。如果需要访问内存,那么在内存访问(Memory Access)阶段,CPU会从内存中读取数据或向内存中写入数据。最后,在写回(Write Back)阶段,计算的结果将被写回CPU的寄存器中。

流水线的设计使得CPU能在同一时刻处理多个指令的不同阶段,这就提高了CPU的吞吐量。例如,当一个指令在执行阶段时,另一个指令可以在取指阶段,这样CPU就能同时处理两个指令,而不是等待一个指令完全执行完毕后再处理下一个指令。这种设计可以让CPU的不同单元始终有任务执行,不要闲置等待浪费资源。

指令集的设计哲学

CISC(Complex Instruction Set Computer,复杂指令集计算机)架构和 RISC(Reduced Instruction Set Computer,精简指令集计算机)架构在处理器设计中代表了两种不同的哲学,它们的主要区别在于管理和执行指令的方式。

CISC架构使用的是一种非常复杂的指令集,其中每个指令可以执行多个低级操作,如加载数据、进行算术运算和存储结果。这样的设计是为了减少程序的总指令数量和节约内存空间(这在早期计算机设计中是非常重要的,因为当时的内存成本非常高)。由于CISC指令具有复杂性,因此CISC架构执行单个指令所需的时间比RISC架构需要的时间更长。而RISC架构使用的是更简单、更少的指令集,每个指令只执行一个操作,这使得它们可以在一个时钟周期内完成。

CISC 和 RISC 代表了两种不同的处理器设计哲学,它们有着不同的特点和优势,VLIW架构也有自己独特的设计哲学和用武之地,不同指令集的设计特点如图2-1所示。

图2-1 不同指令集的设计特点

CISC的设计哲学是在硬件中包含尽可能多的指令,以便让编译器能够在代码生成阶段产生更有效的高级的指令。CISC指令集能执行更复杂的操作,如内存管理、复杂算术和逻辑操作等。CISC指令集旨在最大限度地减少编译器需要生成的指令数量,从而减少内存使用和程序运行时的指令获取。在这种设计中,指令长度可以变化,某些复杂指令可能需要多个CPU周期来执行。

CISC的主要特点如下。

● 复杂的硬件:为了执行复杂的指令,CISC处理器需要复杂的硬件实现。

● 多个CPU周期:执行一个指令可能需要多个CPU周期。

● 内存效率:CISC 能够更好地利用内存,因为指令长度可变,并且可以执行复杂的操作。

RISC的主要特点如下。

● 简单的硬件:由于RISC的指令集简单,因此RISC处理器的硬件实现相对简单。

● 单个CPU周期:大多数RISC指令在一个CPU周期内完成。

● 高性能:RISC处理器的硬件简单,能够提供更高的时钟速度和更好的并行性。

在20世纪90年代中期,处理器设计师开始将RISC的一些设计原则应用到CISC处理器中,这种新的处理器被称为微指令集架构(Micro-Instruction Set Architecture),这种处理器的设计使得CISC处理器在内部能够像RISC一样运行。这种设计的主要优点是结合了CISC和RISC的优点:在软件(如操作系统和编译器)中,提供了CISC的优势,因为CISC指令集对于高级语言的翻译更为直接;在硬件中,提供了RISC的优点,因为RISC允许更快速并行的指令执行。

Intel和AMD的主流x86架构处理器就是这种设计思路的典范,即结合了CISC和RISC的优点:保持了CISC的软件兼容性和指令级别的效率(如高级语言编译到更少的指令),同时借助于RISC的思想获得了并行性和处理器设计的简单性。在硬件水平上,微操作的简单性和固定长度使得流水线设计、乱序执行、寄存器重命名、指令重排序等现代处理器优化技术的实现变得更加简单。

总体而言,CISC和RISC两种设计哲学各有优劣,但随着技术的进步,两种设计的边界已经变得模糊。现代处理器设计通常会结合这两种设计哲学的优点,例如,将复杂的CISC指令译码为简单的RISC风格的微指令进行执行。所以我们经常见到这样的描述:主流CISC处理器(如Intel和AMD的处理器)的内核依然是RISC。

RISC-V也是最近崛起的一股强大力量,V含义为“five”,它是一种免费开源指令集架构,通过开放标准协作开创处理器创新阶段。RISC-V基金会创立于2015年,由超过235家成员组织组成,建立了首个开放、协作的软硬件创新者社区。RISC-V属于RISC阵营,相比于ARM,RISC-V的历史很短,2010年诞生于加州大学伯克利分校,当时的Krste Asanovic教授希望寻找一个合适的CPU指令架构,但x86架构复杂臃肿,ARM架构需要授权费,开源的OpenRISC架构太老旧,所以他最终决定自己做一个开源CPU架构,并在2015年成立了RISC-V基金会。

RISC-V有以下两大特点。

● 模块化设计:RISC-V的基础是一个简洁的整数指令集,可用于微控制器等简单设备。通过添加扩展指令集,如浮点计算、原子操作、向量处理等,可以满足更复杂的计算需要。这种模块化设计让RISC-V在微型设备和高性能计算机之间具有很高的灵活性。

● 精简和高效:RISC-V保持了RISC的基本理念,即提供简单、容易快速执行的指令集,从而提高硬件实现的效率。

使用开源的RISC-V,国产处理器可以避免受制于人,不必担心因为知识产权问题而被断供或起诉,同时RISC-V的模块化设计使得芯片设计者可以根据自己的应用需求定制指令集,这对于满足特定应用的性能需求十分重要。