• 指令集简单介绍


             指令集或指令集体系:是计算机体系结构中与程序设计有关的部分,包括了基本数据类型、指令集、寄存器、寻址模式、中断、异常处理以及外部的I/O。指令集架构包括一系列的opcode即操作码(机器语言),以及由特定处理器运行的基本命令。

             指令集的分类:(1)、复杂指令集计算机包括很多应用程序中非常少使用的特定指令;(2)、精简指令集计算机通过仅仅运行在程序中常常使用的指令来简化处理器的结构,而特殊操作则以子程序的方式实现,它们的特殊使用通过处理器额外的运行时间来弥补。理论上的重要类型还包括最小指令集计算机单指令集计算机,但都未用作商业处理器。第二种衍生类型是超长指令字,处理器接受很多经过编码的指令并通过检索提取出一个指令字并运行。

           机器语言:是由声明和指令所组成的。在处理结构上,一个特定指令指明了下面几个部分:(1)、用于算术运算,寻址或者控制功能的特定寄存器;(2)、特定存储空间的地址或偏移量;(3)、用于解译操作码的特定寻址模式。

           指令类型:有效的指令操作须包括,(1)、数据处理与存储操作:将暂存器的值(在中央处理器作为快速缓存的存储空间)设为固定值;将数据从存储空间中传送至寄存器,反之亦然。用于将数据取出并运行计算,或者将计算结果予以保存;从硬件设备读取或写入数据。(2)、算术逻辑单元:对两个储存于暂存器的数字进行add、subtract、multiply、divide,将结果放到一个暂存器内,一个或是很多其它的状态码可能被设置在状态突破口中;运行位操作,即对两组数字(为两串的数字,都由0与1构成,分别储存于两个暂存器内)运行逻辑与逻辑或,或者对寄存器的每一位运行逻辑非操作;比較两个寄存器中的数据(比如是大于或者相等);(3)、控制流分支,跳跃至程序某地址并运行对应指令;条件分支,如果某一条件成立,就跳到程序的还有一个位置;间接分支,在跳到还有一个位置之前,将如今所运行的指令的下一个指令的位置储存起来,作为子程式运行完返回的地址。

           复杂指令:一些电脑在他们的指令集架构内包括复杂指令。复杂指令包括:(1)、将很多暂存器存成堆栈的形式;(2)、移动内存内大笔的资料;(3)、复杂或是浮点数运算(正弦余弦平方根等等);(4)、运行test-and-set指令;(5)、运行数字存在内存而非暂存器的运算。有一种复杂指令单指令流多数据,英文全名是Single-InstructionStream Multiple-Data Stream,或是向量指令,这是一种能够在同一时间对多笔数据进行同样运算的操作。SIMD有能力在短时间内将大笔的向量和矩阵计算完毕。SIMD指令使平行计算变得简单,各种SIMD指令集被开发出来,比如MMX3DNow!以及AltiVec

           指令的组成:在传统的架构上,一条指令包括opcode,表示运算的方式,以及零个或是很多其它的算子,有些像是算子的数字可能指的是暂存器的编号,还有内存位置,或是文字资料。在超长指令字(VLIW)的结构中,包括了很多微指令,借此将复杂的指令分解为简单的指令。

           指令的长度:指令长度的范围能够说是相当广泛,从微控制器的4bit,到VLIW系统的数百bit。在个人电脑大型电脑超级电脑内的处理器,其内部的指令长度介于8到64 bits(在x86处理器结构内,最长的指令长达15 bytes,等于120 bits)。在一个指令集架构内,不同的指令可能会有不同长度。在一些结构,特别是大部分的精简指令集(RISC),指令是固定的长度,长度相应到结构内一个的大小。在其它结构,长度则是byte的整数倍或是一个halfword

    电脑微处理器的指令集架构(Instruction SetArchitecture):(1)、复杂指令集运算(ComplexInstruction Set Computing,CISC):眼下x86架构微处理器如IntelPentium/Celeron/XeonAMDAthlon/Duron/Sempron;以及其64位扩展系统的x86-64架构的Intel 64的Intel Core/Core2/Pentium/Xeon与AMD64的Phenom II/Phenom/Athlon 64/Opteron都属于CISC系列。主要针对的操作系统是微软Windows。另外Linux,一些UNIX等,都能够执行在x86(CISC)架构的微处理器。(2)、精简指令集运算(ReducedInstruction Set Computing,RISC):RISC这样的指令集运算包含HP的PA-RISC,IBMPowerPCCompaq(被并入HP)的Alpha,MIPS公司的MIPS,SUN公司的SPARC等。眼下仅仅有UNIX,Linux,MacOS等操作系统执行在RISC处理器上。(3)、显式并行指令集运算(ExplicitlyParallel Instruction Computing,EPIC):EPIC乃先进的全新指令集运算,仅仅有Intel的IA-64架构的纯64位微处理器的Itanium/Itanium 2。EPIC指令集运算的IA-64架构主要针对的操作系统是微软64位安腾版的Windows XP以及64位安腾版的WindowsServer 2003。另外一些64位的Linux,一些64位的UNIX也能够执行IA-64(EPIC)架构。(4)、超长指令字指令集运算(VLIW):通过将多条指令放入一个指令字,有效的提高了CPU各个计算功能部件的利用效率,提高了程序的性能。

    精简指令集:是计算机中央处理器的一种设计模式。这样的设计思路对指令数目和寻址方式都做了精简,使事实上现更easy,指令并行执进程度更好,编译器的效率更高。眼下常见的精简指令集微处理器包含DEC AlphaARCARMAVRMIPSPA-RISCPower Architecture(包含PowerPCPowerXCell)和SPARC等。

    复杂指令集:是一种微处理器指令集架构,每一个指令可运行若干低阶操作,诸如从内存读取、储存、和计算操作,所有集于单一指令之中。与之相对的是精简指令集。复杂指令集的特点是指令数目多而复杂,每条指令字长并不相等。属于复杂指令集的处理器CDC 6600System/360VAXPDP-11Motorola 68000家族、x86等。

    CPU指令集:CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之中的一个。从现阶段的主流体系结构讲,指令集可分为复杂指令集和精简指令集两部分,而从详细运用看,如Intel的MMX(MultiMediaExtended)、SSE、SSE2(Streaming-Singleinstructionmultipledata-Extensions2)和AMD的3DNow!等都是CPU的扩展指令集,分别增强了CPU的多媒体、图形图象和Internet等的处理能力。我们一般会把CPU的扩展指令集称为"CPU的指令集"。

    然而如此一颗精密的芯片为什么可以控制一个庞大而复杂的电脑系统呢?这就是CPU中所集成的指令集。所谓指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种新型的CPU在设计时就规定了一系列与其它硬件电路相配合的指令系统。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志。再强大的处理器也须要指令集的配合才行。

    CPU的指令集从主流的体系结构上分为精简指令集和复杂指令集,而在普通的计算机处理器基本上是使用的复杂指令集。在计算机早期的发展过程中,CPU中的指令集是没有划分类型的,而是都将各种程序须要相配合的指令集成到CPU中,可是随着科技的进步,计算机的功能也越来越强大,计算机内部的元件也越来越多,并且越来越复杂,CPU的指令也对应的变得十分复杂,而在使用过程中,并非每一条指令都要全然被运行,在技术人员的研究过程中发现,约有80%的程序仅仅用到了20%的指令,而一些过于冗余的指令严重影响到了计算机的工作效率,就这一现象,精简指令集的概念就被提了出来。

    精简指令集RISC就是(ReducedInstruction Set Computing)的缩写,而复杂指令集CISC则是(Complex Instruction Set Computing)的缩写。它们之间的不同之处就在于RISC指令集的指令数目少,并且每条指令採用同样的字节长度,一般长度为4个字节,并且在字边界上对齐,字段位置固定,特别是操作码的位置。而CISC指令集特点就是指令数目多并且复杂,每条指令的长度也不相等。

    在操作上,RISC指令集中大多数操作都是寄存器到寄存器之间的操作,仅仅以简单的load(读取)和store(存储)操作訪问内存地址。因此,每条指令中訪问的内存地址不会超过1个,指令訪问内存的操作不会与算术操作混在一起。在功能上,RISC指令集也要比复杂指令集具有优势,精简指令集能够大大简化处理器的控制器和其它功能单元的设计,不必使用大量专用寄存器,特别是同意以硬件线路来实现指令操作,从而节约处理器的制造成本。而採用CISC指令集的处理器是使用微程序来实现指令操作,在运行速度上不如RISC指令集。另外,RISC还加强了并行处理能力,很适合于採用处理器的流水线、超流水线和超标量技术,从而实现指令级并行操作,提高处理器的性能。并且随着vlsi(VeryLarge Scale Integration超大规模集成电路)技术的发展,整个处理器的核心甚至多个处理器核心都能够集成在一个芯片上。RISC指令集的体系结构能够给设计单芯多核处理器带来非常多优点,有利于处理器的性能提高。

    因为RISC指令集自身的优势,在处理器的高端server领域的处理器上得到了广泛的运用,而CISC指令集主要运用桌面领域的处理器产品中,比方intel的pentium系列和amd的k8系列处理器。然而如今RISC指令集也不断地向桌面领域渗入,相信以后的处理器指令集会慢慢的向RISC体系靠拢,使得处理器的指令集结构更加完好,功能更为强大,技术也越来越成熟。

    RISC指令集有很多特征,当中最重要的有:(1)、指令种类少,指令格式规范:RISC指令集通常仅仅使用一种或少数几种格式。指令长度单一(一般4个字节),而且在字边界上对齐。字段位置、特别是操作码的位置是固定的。(2)、寻址方式简化:差点儿全部指令都使用寄存器寻址方式,寻址方式总数一般不超过5个。其它更为复杂的寻址方式,如间接寻址等则由软件利用简单的寻址方式来合成。(3)、大量利用寄存器间操作:RISC指令集中大多数操作都是寄存器到寄存器操作,仅仅以简单的Load和Store操作訪问内存。因此,每条指令中訪问的内存地址不会超过1个,訪问内存的操作不会与算术操作混在一起。(4)、简化处理器结构:使用RISC指令集,能够大大简化处理器的控制器和其它功能单元的设计,不必使用大量专用寄存器,特别是同意以硬件线路来实现指令操作,而不必像CISC处理器那样使用微程序来实现指令操作。因此RISC处理器不必像CISC处理器那样设置微程序控制存储器,就能够高速地直接运行指令。(5)、便于使用VLSI技术:随着LSI和VLSI技术的发展,整个处理器(甚至多个处理器)都能够放在一个芯片上。RISC体系结构能够给设计单芯片处理器带来非常多优点,有利于提高性能,简化VLSI芯片的设计和实现。基于VLSI技术,制造RISC处理器要比CISC处理器工作量小得多,成本也低得多。(6)、加强了处理器并行能力:RISC指令集能够非常有效地适合于採用流水线、超流水线和超标量技术,从而实现指令级并行操作,提高处理器的性能。眼下经常使用的处理器内部并行操作技术基本上是基于RISC体系结构发展和走向成熟的。正因为RISC体系所具有的优势,它在高端系统得到了广泛的应用,而CISC体系则在桌面系统中占领统治地位。

    X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,Intel公司所生产的全部CPU仍然继续使用X86指令集。

    在中高档server中普遍採用RISC指令系统的CPU,特别是高档server全都採用RISC指令系统的CPU。在中高档server中採用RISC指令的CPU主要有Compaq(康柏,即新惠普)公司的Alpha、HP公司的PA-RISC、IBM公司的PowerPC、MIPS公司的MIPS和SUN公司的Spare。

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

    RISC和CISC是设计制造微处理器的两种典型技术,尽管它们都是试图在体系结构、操作执行、软件硬件、编译时间和执行时间等诸多因素中做出某种平衡,以求达到高效的目的,但採用的方法不同。

           ARM是精简指令集的代表,眼下,绝大部分移动设备採用的是ARM而不是x86处理器。x86是复杂指令集的代表

           复杂指令集,也称为CISC指令集,英文名是CISC。在CISC微处理器中,程序的各条指令是按顺序串行运行的,每条指令中的各个操作也是按顺序串行运行的。顺序运行的长处是控制简单,但计算机各部分的利用率不高,运行速度慢。事实上它是英特尔生产的x86系列(也就是IA-32架构)CPU及其兼容CPU,如AMD、VIA的。即使是如今新起的X86-64(也被称为AMD64)都是属于CISC的范畴。

    并行处理的费林分类法:(1)、单指令单数据流(SISD):是非并行计算的模型,典型的样例就是单核的CPU,全部的数据都被一个处理器顺次处理,某一时刻仅仅能使用一种指令;(2)、单指令多数据流(SIMD);(3)、多指令单数据流(MISD):指在同一个数据流上运行不同的指令。流水线模型能够被觉得是一种MISD;(4)、多指令多数据流(MIMD):是多核CPU的计算模型。

             单指令流多数据流(Single Instruction Multiple Data,缩写:SIMD):是一种採用一个控制器来控制多个处理器,同一时候对一组数据(又称“数据矢量”)中的每个分别运行同样的操作从而实现空间上的并行性的技术。在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,比如IntelMMXSSE以及AMD3D Now!技术。它可以复制多个操作数,并把它们打包在大型寄存器的一组指令集。它以同步方式,在同一时间内运行同一条指令。SIMD特别适合于多媒体应用等数据密集型运算。

    单指令流多数据流(SIMD)是一种实现数据级并行的技术,其典型代表是向量处理器(Vector Processor)和阵列处理器(Array Processor)SIMD技术的关键是在1条单独的指令中同一时候运行多个运算操作,以添加处理器的吞吐量。为此,SIMD结构的CPU有多个运行部件,但都在同一个指令部件的控制之下,中央控制器向各个处理单元发送指令,整个系统仅仅要求有一个中央控制器,仅仅要求存储一份程序,全部的计算都是同步的。

           SIMD包含:MMX(1996)、MMX2、SSE(1999)、SSE2(2001)、SSE3(2004)、SSSE3、SSE4.x、SSE5、AMD’s 3DNow!、NEON、Yeppp、AVX、FMA等。

           MMX(Multi-MediaExtension):技术的长处是添加了多媒体处理能力,能够一次处理多个数据,缺点则是只只能处理整型数,而且因为占用浮点数寄存器进行运算,以至于MMX指令集与x87浮点运算指令不能够同一时候运行,必须做密集的切换才干够正常运行,这样的情况势必造成整个系统运行质量的下降。

    SSE(Streaming SIMD Extensions):兼容MMX指令,能够通过SIMD和单时钟周期并行处理多个浮点数据来有效提高浮点运算速度,对图像处理、浮点运算、3D运算、视频处理、音频处理等诸多多媒体应用起到全面强化作用。具有SSE指令集支持的处理器有8128位的寄存器,每个寄存器能够存放4个单精度(32)浮点数。SSE同一时候提供了一个指令集,当中的指令同意把浮点数载入到这些128位寄存器中,这些数就能够在这些寄存器中进行算术逻辑运算,然后把结果送回主存。也就是说,SSE中的全部计算都能够针对4个浮点数一次性完毕,这样的批处理带来了效率的提升。

    SSE2(Streaming SIMD Extensions 2):指令集,扩展了SSE指令集,并可全然代替MMXSSE2指令集是Intel公司在SSE指令集的基础上发展起来的。相比于SSESSE2使用了144个新增指令,扩展了MMX技术和SSE技术,提高了诸如MPEG-2MP33D图形等应用程序的执行性能。在整数处理方面,随MMX技术引进的SIMD整数指令从64位扩展到了128 位,使SIMD整数类型操作的运行效率成倍提高;在浮点数处理方面,双精度浮点SIMD指令同意以 SIMD格式同一时候运行两个浮点操作,提供双精度操作支持有助于加速内容创建、財务、project和科学应用。除SSE2指令之外,最初的SSE指令也得到增强,通过支持多种数据类型(比如双字、四字)的算术运算,支持灵活、动态范围更广的计算功能。

    SSE3(Streaming SIMD Extensions 3):指令集是Intel公司在SSE2指令集的基础上发展起来的。相比于SSE2SSE3SSE2的基础上又添加了13SIMD指令,以提升Intel超线程(Hyper-Threading)技术的效能,终于达到提升多媒体和游戏性能的目的。

    眼下SIMD指令能够有四种方法进行使用各自是汇编语言,C++类,编译器Intrisincs和自己主动矢量化。

    參考文献:

    1、 http://zh.wikipedia.org/wiki/%E6%8C%87%E4%BB%A4%E9%9B%86%E6%9E%B6%E6%A7%8B

    2、 http://www.baike.com/wiki/CPU%E6%8C%87%E4%BB%A4%E9%9B%86

    3、 http://www.baike.com/wiki/%E7%B2%BE%E7%AE%80%E6%8C%87%E4%BB%A4%E9%9B%86

    4、 http://123.125.115.53/view/1177592.htm

    5、 https://www.kernel.org/pub/linux/kernel/people/geoff/cell/ps3-linux-docs/CellProgrammingTutorial/BasicsOfSIMDProgramming.html

    6、 http://share.onlinesjtu.com/mod/tab/view.php?id=303

    7、 http://courses.engr.illinois.edu/ece390/books/labmanual/inst-ref-simd.html

    8、 http://www.hayestechnologies.com/en/techsimd.htm

    9、 http://zerocool.is-a-geek.net/?p=422

    10、             http://blog.chinaunix.net/uid-20385936-id-3902720.html

    11、             http://www.songho.ca/misc/sse/sse.html

  • 相关阅读:
    centos7 安装高版本svn
    idea 常用快捷键
    IDEA 打可执行jar包(maven项目)
    服务器安装JDK
    阿里云服务器连接AWS-S3
    mysql5.7 修改密码,修改权限
    win10 手动安装mysql-8.0.11-winx64.zip
    centos7 关闭防火墙
    centos7 配置阿里云yum源
    centos7 源码安装nginx
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4009388.html
Copyright © 2020-2023  润新知