指令集概述
計(jì)算機(jī)指令就是指揮機(jī)器工作的指示和命令,程序就是一系列按一定順序排列的指令,執(zhí)行程序的過(guò)程就是計(jì)算機(jī)的工作過(guò)程。指令集,就是CPU中用來(lái)計(jì)算和控制計(jì)算機(jī)系統(tǒng)的一套指令的集合,而每一種新型的CPU在設(shè)計(jì)時(shí)就規(guī)定了一系列與其他硬件電路相配合的指令系統(tǒng)。而指令集的先進(jìn)與否,也關(guān)系到CPU的性能發(fā)揮,它也是CPU性能體現(xiàn)的一個(gè)重要標(biāo)志。每款CPU在設(shè)計(jì)時(shí)就規(guī)定了一系列與其硬件電路相配合的指令系統(tǒng)。指令的強(qiáng)弱也是CPU的重要指標(biāo),指令集是提高微處理器效率的最有效的工具之一。從現(xiàn)階段的主流體系結(jié)構(gòu)講,指令集可分為復(fù)雜指令集和精簡(jiǎn)指令集兩部分。
在計(jì)算機(jī)中,指示計(jì)算機(jī)硬件執(zhí)行某種運(yùn)算、處理功能的命令稱(chēng)為指令。指令是計(jì)算機(jī)運(yùn)行的最小的功能單位,而硬件的作用是完成每條指令規(guī)定的功能。一臺(tái)計(jì)算機(jī)上全部指令的集合,就是這臺(tái)計(jì)算機(jī)的指令系統(tǒng)。指令系統(tǒng)也稱(chēng)指令集,是這臺(tái)計(jì)算機(jī)全部功能的體現(xiàn)。而人們?cè)O(shè)計(jì)計(jì)算機(jī)首要考慮的是它擁有的功能,也就是首先要按功能檔次設(shè)計(jì)指令集,然后按指令集的要求在硬件上實(shí)現(xiàn)。指令系統(tǒng)不僅僅是指令的集合,還包括全部指令的指令格式、尋址方式和數(shù)據(jù)形式。所以,各計(jì)算機(jī)執(zhí)行的指令系統(tǒng)不僅決定了機(jī)器所要求的能力,而且也決定了指令的格式和機(jī)器的結(jié)構(gòu)。反過(guò)來(lái)說(shuō),不同結(jié)構(gòu)的機(jī)器和不同的指令格式應(yīng)該具有與之相匹配的指令系統(tǒng)。為此,設(shè)計(jì)指令系統(tǒng)時(shí),要對(duì)指令格式、類(lèi)型及操作功能給予應(yīng)有的重視。軟件是為了使用計(jì)算機(jī)而編寫(xiě)的各種系統(tǒng)和用戶(hù)的程序,程序由一個(gè)序列的計(jì)算機(jī)指令組成。從這個(gè)角度上說(shuō),指令是用于設(shè)計(jì)程序的一種計(jì)算機(jī)語(yǔ)言單位。
計(jì)算機(jī)的指令系統(tǒng)是指一臺(tái)計(jì)算機(jī)上全部指令的集合,也稱(chēng)計(jì)算機(jī)的指令集。指令系統(tǒng)包括指令格式、尋址方式和數(shù)據(jù)形式。一臺(tái)計(jì)算機(jī)的指令系統(tǒng)反映了該計(jì)算機(jī)的全部功能,機(jī)器類(lèi)型不同,其指令系統(tǒng)也不同,因而功能也不同。指令系統(tǒng)的設(shè)置和機(jī)器的硬件結(jié)構(gòu)密切相關(guān),一臺(tái)計(jì)算機(jī)要有較好的性能,必須設(shè)計(jì)功能齊全、通用性強(qiáng)、內(nèi)含豐富的指令系統(tǒng),這就需要復(fù)雜的硬件結(jié)構(gòu)來(lái)支持。
常見(jiàn)的指令集有:Intel的x86,EM64T,MMX,SSE,SSE2,SSE3,SSSE3 (Super SSE3),SSE4A,SSE4.1,SSE4.2,AVX,AVX2,AVX-512,VMX等指令集;和AMD的x86,x86-64,3D-Now!指令集。
RISC指令集是以后高性能CPU的發(fā)展方向。它與傳統(tǒng)的CISC(復(fù)雜指令集)相對(duì)。相比而言,RISC的指令格式統(tǒng)一,種類(lèi)比較少,尋址方式也比復(fù)雜指令集少。使用RISC指令集的體系結(jié)構(gòu)主要有ARM、MIPS。MIPS 指令集是最早實(shí)現(xiàn)商用的精簡(jiǎn)指令集(RISC)之一,上個(gè)世紀(jì)80年代初由斯坦福大學(xué)的研究小組研發(fā),并在1984年成立MIPS計(jì)算機(jī)公司 [3] 。隨后MIPS 成為上世紀(jì)90年代最流行的指令集,一度與 x86 和ARM 指令集齊名。RISC具有設(shè)計(jì)更簡(jiǎn)單、設(shè)計(jì)周期更短等優(yōu)點(diǎn),并可以應(yīng)用更多先進(jìn)的技術(shù),開(kāi)發(fā)更快的下一代處理器。MIPS是出現(xiàn)最早的商業(yè)RISC架構(gòu)芯片之一,新的架構(gòu)集成了所有原來(lái)MIPS指令集,并增加了許多更強(qiáng)大的功能。隨著移動(dòng)互聯(lián)網(wǎng)的興起,MIPS 指令集逐漸衰落,公司也多次輾轉(zhuǎn)被收購(gòu)。
Intel AVX指令集在SIMD計(jì)算性能增強(qiáng)的同時(shí)也沿用了的MMX/SSE指令集。不過(guò)MMX/SSE的不同點(diǎn)在于增強(qiáng)的AVX指令,從指令的格式上就發(fā)生了很大的變化。x86 (IA-32/Intel 64)架構(gòu)的基礎(chǔ)上增加了prefix (Prefix),所以實(shí)現(xiàn)了新的命令,也使更加復(fù)雜的指令得以實(shí)現(xiàn),從而提升了x86 CPU的性能。AVX并不是x86 CPU的擴(kuò)展指令集,可以實(shí)現(xiàn)更高的效率,同時(shí)和CPU硬件兼容性也好,并且也有著足夠的擴(kuò)展空間,這都和其全新的命令格式系統(tǒng)有關(guān)。更加流暢的架構(gòu)就是AVX發(fā)展的方向,換言之,就是擺脫傳統(tǒng)x86的不足,在SSE指令的基礎(chǔ)上AVX也使SSE指令接口更加易用。針對(duì)AVX的最新的命令編碼系統(tǒng),Intel也給出了更加詳細(xì)的介紹,其中包括了大幅度擴(kuò)充指令集的可能性。比如Sandy Bridge所帶來(lái)的融合了乘法的雙指令支持。從而可以更加容易地實(shí)現(xiàn)512bits和1024bits的擴(kuò)展。而在2008年末到2009年推出的meniikoa CPU“Larrabee (LARAB)”處理器,就會(huì)采用AVX指令集。從地位上來(lái)看AVX也開(kāi)始了Intel處理器指令集的新篇章。