复杂指令集计算机
复杂指令集计算机(英语:Complex Instruction Set Computer;缩写:CISC)是一种微处理器指令集架构,每个指令可执行若干低端操作,诸如从存储器读取、存储、和计算操作,全部集于单一指令之中。与之相对的是精简指令集。
复杂指令集的特点是指令数目多而复杂,每条指令字长并不相等,电脑必须加以判读,并为此付出了性能的代价。
属于复杂指令集的处理器有CDC 6600、System/360、VAX、PDP-11、Motorola 68000家族、x86、AMD Opteron等。
刺激和益处
编辑在RISC哲学成为主流之前,许多计算机架构师试图弥补所谓的“语义鸿沟”,即设计指令集以直接支持高级编程语言,如过程调用、循环控制和复杂的寻址模式,允许数据结构和数组访问合并成单一指令。指令通常也经过高度编码,以进一步增强代码密度。这种指令集的紧凑性使得程序的大小更小,主内存的访问次数更少(当时的主内存通常很慢),从而节省了计算机内存和磁盘存储的成本,并加快了执行速度。这也意味着,即使是在汇编语言中,编程的生产力也得到了提升,而Fortran或Algol等高阶语言并不总是可用或适用。实际上,这类微处理器在某些关键应用中至今仍以汇编语言进行编程[来源请求]。
新增指令
编辑在1970年代,对高级语言的分析表明,编译器生成了相对复杂的机器语言。研究发现,新增指令可以提高性能。添加了一些从未打算在汇编语言中使用的指令,但与编译后的高级语言很好地匹配。编译器被更新以利用这些指令。这些语义丰富的指令和紧凑编码的优势在现代处理器中也可以看到,尤其是在高性能领域,其中缓存是一个核心组件(与大多数嵌入式系统不同)。这是因为这些快速但复杂且昂贵的内存本身具有大小限制,使得紧凑代码非常有利。当然,它们之所以需要,是因为与(高性能)CPU核心相比,主内存(即今天的动态随机存储器)依然很慢。
设计问题
编辑虽然许多设计达到了提高吞吐量和降低成本的目标,并且通过较少的指令表达了高级语言构造,但也观察到,这并非总是如此。例如,复杂架构的低端版本(即使用较少硬件的版本)可能会导致这种情况:通过不使用复杂的指令(如过程调用或进入指令),而是使用一系列更简单的指令来改善性能。
其中一个原因是,架构师(微码编写者)有时会“过度设计”汇编语言指令,包括一些在基本硬件上无法高效实现的特性。例如,可能会出现“副作用”(超出常规标志的操作),如设置一个寄存器或内存位置,而这个寄存器或内存位置可能很少使用;如果通过普通的(非重复的)内部总线,甚至是外部总线来实现这类操作,每次都会占用额外的周期,因此效率较低。
即使是在平衡的高性能设计中,高度编码和(相对)高级的指令可能也会使解码和执行变得复杂,在有限的晶体管预算下难以高效处理。因此,这类架构需要处理器设计者付出大量工作,在某些情况下,如果基于解码表和/或微码序列的更简单但(典型地)较慢的解决方案不合适时。
RISC的理念
编辑在许多(但不是所有)CISC处理器中,执行微码定义的操作的电路本身是一个处理器,在许多方面,它的结构与早期的CPU设计非常相似。1970年代初期,这促使人们提出了回归更简单处理器设计的想法,以便在没有(当时相对较大且昂贵的)ROM表和/或PLA结构进行排序和/或解码的情况下,也能更容易地应对。
一款早期的(事后被标记为)RISC处理器(IBM 801 —— IBM沃森研究中心,1970年代中期)是一个高度流水线化的简单机器,最初是作为CISC设计中的内部微码内核或引擎使用的[来源请求],但它也成为了将RISC理念介绍给更广泛观众的处理器。简洁性和规律性在可见指令集中的体现,使得在机器码级别(即编译器所看到的层级)更容易实现重叠的处理器阶段(流水线)。然而,在那个层级上,流水线技术已经被一些高性能CISC“超级计算机”使用,以减少指令周期时间(尽管在当时,实施时受到组件数量和布线复杂度的限制)。而CISC处理器中的内部微码执行,可以根据具体设计的不同,更多或更少地进行流水线操作,因此在某种程度上更接近于RISC处理器的基本结构。
CDC 6600超级计算机(1965年首次交付)也被事后描述为RISC[1][2]。它采用了加载-存储架构,允许最多五个加载和两个存储操作同时进行,且由程序员控制。它还拥有多个功能单元,可以同时操作。
超标量
编辑在现代背景下,某些典型CISC架构使用的复杂变长编码,使得直接构建超标量CISC编程模型变得复杂,但仍然可行;例如原始Pentium的顺序超标量实现,以及Cyrix 6x86的乱序超标量实现,都是这一点的著名例子。典型CISC机器的操作数内存访问频繁,这可能限制从代码中提取的指令级并行性,尽管这一点在现代设计中通过使用快速缓存结构和其他措施得到了强烈调节。由于指令本身紧凑且语义丰富,CISC处理器在每个机器码单元(即每字节或每位)上执行的工作量较高,这使得它在现代基于缓存的实现中可能具有显著优势。
如今,逻辑、PLA和微码的晶体管不再是稀缺资源;今天,只有大型高速缓存内存的数量受到晶体管数量的限制。尽管复杂,CISC解码器的晶体管数量并不像处理器总晶体管数量那样呈指数增长(大多数晶体管通常用于缓存)。配合更好的工具和先进技术,这推动了高度编码和变长设计的新实现,无需加载-存储限制(即非RISC)。这支配了旧架构(如无处不在的x86)以及新的嵌入式系统微控制器设计的重新实现,和类似用途的设计。现代x86中的超标量复杂性通过将指令转换为一个或多个微操作并动态发出这些微操作解决;Pentium Pro和AMD K5是早期的例子。它允许在(相对复杂的)解码器(和缓冲区)后面放置一个相对简单的超标量设计,可以说,在许多方面,这种技术提供了两全其美的解决方案。这种技术也被IBM z196及以后的z/Architecture微处理器采用。
参考文献
编辑- ^ Computer history: CDC 6000 series Hardware Architecture. Museum Waalsdorp. July 23, 2023 [January 19, 2024].
- ^ Anthony, Sebastian. The history of supercomputers. ExtremeTech. April 10, 2012 [January 19, 2024].
延伸阅读
编辑- Mano, M. Morris. Computer System Architecture (3rd Edition). ISBN 978-0131755635.
参考
编辑外部链接
编辑