CPU精简指令集和复杂指令集的区别

经常看到计算机课程上介绍PowerPC是采用精简指令集的CPU,酷睿CPU是复杂指令集。那么到底精简指令集和复杂指令集有什么区别呢?

以下内容摘自百度百科:

在计算机指令系统的优化发展过程中,出现过两个截然不同的优化方向:CISC技术和RISC技术。CISC是指复杂指令系统计算机(Complex Instruction Set Computer);RISC是指精减指令系统计算机(Reduced Instruction Set Computer)。这里的计算机指令系统指的是计算机的最低层的机器指令,也就是CPU能够直接识别的指令。随着计算机系统的复杂,要求计算机指令系统的构造能使计算机的整体性能更快更稳定。最初,人们采用的优化方法是通过设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改用硬件的指令系统实现,以此来提高计算机的执行速度,这种计算机系统就被称为复杂指令系统计算机,即Complex Instruction Set Computer,简称CISC。另一种优化方法是在20世纪80年代才发展起来的,其基本思想是尽量简化计算机指令功能,只保留那些功能简单、能在一个节拍内执行完成的指令,而把较复杂的功能用一段子程序来实现,这种计算机系统就被称为精简指令系统计算机.即Reduced Instruction Set Computer,简称RISC。RISC技术的精华就是通过简化计算机指令功能,使指令的平均执行周期减少,从而提高计算机的工作主频,同时大量使用通用寄存器来提高子程序执行的速度。

通过上述内容大家基本可以知道,复杂指令集就是将更多功能步骤集成在了CPU中。例如烹饪西红柿鸡蛋的步骤包括:购买西红柿和鸡蛋,清洗食材,打鸡蛋,炒鸡蛋,放西红柿继续炒,放糖,放盐,炒熟之后盛盘上桌。这样已连续的步骤被集成在CPU内部。外部程序需要烹饪西红柿鸡蛋的时候只需要向CPU下达指令说:“烹饪西红柿鸡蛋”就可以了。复杂指令集就是将琐碎的步骤实现集成到了CPU内部,例如INTEL的SSE3等。

精简指令集就是在CPU中只有容器,调料等基本指令。需要人们在软件中写上如何协调这些指令的步骤,例如你需要向CPU下达指令说:买西红柿,清晰食材,打鸡蛋,炒鸡蛋,放西红柿继续炒,放糖,放盐,炒熟之后盛盘上桌。

由此可见当两个人比赛做饭的时候,复杂指令集的参赛者只需要不停的说“做饭做饭”就可以了。而精简指令集的参赛者需要不停的重复做饭的整个过程和步骤。如果精简指令集的参赛者嘴巴够快才能赶上复杂指令集的参赛者,但是这个“嘴巴”其实取决于内存和CPU之间的带宽是否足够。当然精简指令集也同样存在优越性,复杂指令集要通过不断增加指令的复杂程度和指令的数量来提高性能所以才会越做越大越做越耗电,而精简指令集相比较无疑体积更小更加省电。

上面只是举了一个较为偏激的例子而已,你可以认为是针对于嵌入式精简指令集和普通酷睿(X86)架构的一个比较,这个是不对等和不公平的。IBM PowerPC可是堪比至强性能的呢,这是怎么回事呢?IBM在70年代末期提出复杂指令集存在很多缺点:1,随着应用需求,复杂指令集不可能无止境的增加指令。2,实际程序运行过程中80%的指令,只占一个处理器指令系统的20%,被频繁使用的指令只是一些取、存和加这些最简单的指令。3,CPU厂商不同,复杂指令集也不同,程序的可移植性会非常差,即便可以运行效率也会相差较大(所以我常说服务器要用INTEL处理器,因为更多的程序以调用INTEL指令集为依据)。针对复杂指令集的弊端才提出了精简指令集。

IBM PowerPC无疑拥有更强劲的处理性能与更大的内存带宽,但是其精简指令集的CPU决定了只能在某个特定应用领域才能完胜至强。因为PowerPC本身硬件设计和软件设计更具备针对性。例如并发控制、数据存取。

总结:精简指令集也好,复杂指令集也罢都是CPU运行功能和实现应用的方法而已。在特定领域和行业选择不同指令集CPU才是王道。手机和火星登陆车里边永远无法放进去X86,个人家用电脑日趋强劲的多应用多功能化也永远不要奢望使用IBM PowerPC。

有人说精简指令集架构平台下对于程序员的要求会更高呢?其实未必。在写程序时精简指令集和复杂指令集开发代码上并没有特别大的差异,真正转换成特定CPU指令架构底层语言是依靠编译器实现的。也就是你的代码技能在精简指令集用,也能在复杂指令集用,主要取决于你的编译器编译出的汇编语言适用于何种架构。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.