高性能可扩展指令集计算Word文档格式.docx
《高性能可扩展指令集计算Word文档格式.docx》由会员分享,可在线阅读,更多相关《高性能可扩展指令集计算Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
![高性能可扩展指令集计算Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-2/2/3103f7f8-54d4-427d-ab58-eb184c694aac/3103f7f8-54d4-427d-ab58-eb184c694aac1.gif)
另外一种方式是指在32位RISC结构中所采用的一套紧缩16位指令集。
ARM-7TDMI【14】是指
ARM-7的16位紧缩指令集版本;
TR4101是指MIPS-R3000(【1】,【14】)的16位紧缩指令结构。
这些带16位紧缩指令集的RISCs结构很复杂因为它们需要与此刻的RISC兼容,而且这种版本只能寻址8个寄放器,从而减弱了其性能。
3.扩展指令集
为了详述EISC的指令集,咱们先从现有的一些处置器(特别是MIPS-R3000)的指令集分析开始,为此咱们采用了【15】、语言库【16】、LIBSTDC++语言库【17】和各类测试例程。
这样分析能得出嵌入式微处置器系统的一般特性(其中某些特性是这些处置器共有的)。
。
16个通用寄放器一般能达到最优。
Load和Store指令利用频繁,而且大部份采用短偏移量寻址
小常数利用频率高
为了更有效地支持这些特性,EISC结构利用16位定长指令系统而且通过扩展偏移量和常数来构造32位指令系统。
同时采取了两项技术来增加代码密度:
构造专用寄放器表来执行push和pop指令;
利用硬件互锁来解决深度管道问题(再也不需要利用许多NOP指令)。
下面,咱们分析MIPS-R3000来讲明EISC主要体系结构的特点。
EISC寄放器
MIPS-R3000有34个32位寄放。
其中2个专门用来“乘和除”;
5个是专用寄放器,用来进行堆栈操作、帧指针和条件码操作;
其余的27个是通用寄放器。
为了研究代码长度和利用的寄放器数量的关系,咱们采用不同数量的寄放器,运用EGCSC/C++编译器产生基于C/C++库和测试例程的代码,而且进行比较。
从表1里,咱们能看到随着通用寄放器数量愈来愈少,代码也变得愈来愈大(咱们把利用27个寄放器的例子定位标准,为100),Load和Store指令的利用频率也在增加。
由于Load和Store指令利用存储器和总线,它们直接影响发送数据的位宽。
咱们可以看到当通用寄放器数量从22减到16时,程序规模和所用的Load、Store指令数量都没
有什么大的转变。
当采用8个寄放器时,寄放器显然太少,此时Load、Store指令几乎加倍。
因此,EISC采用了16个寄放器。
No.ofRegs
Programsize
Load/Store
Move
27
%
24
22
20
18
%
16
14
12
10
8
Table-1.Programsizevs.numberof
registersforMIPS-R3000.
Instruction
Frequency
move
lw,sw
nop
addiu
li
lui
sh,sb,lh,lb,lhu,lbu
bnez,bne,beqz,beq,bltz...
j,jal
jr
Addu,subu,and,or,xor,nor,negu
Andi,ori,xori
jalr
slt,sltu,slti,sltiu
sll,srl,sra,sllv,srlv,srav
Mult,multu,div,divu
Break,mfhi,mflo
Table-2InstructionfrequencyofMIPS-R3000
withsixteengeneral-purposeregisters.
Load、Store体系
表2列出了编程时只利用16个通用寄放器的MIPS-R3000CPU所利用的所有指令的频率。
EISC结构有点象RISC结构,它所有的操作都通过寄放器,采用寄放器操作对象,对存储器的访问只通过Load、Store指令。
从表2各类指令出现的频率咱们可清楚地看到在这种情况下(只利用16个通用寄放器),Load、Store结构对处置器性能的影响也已经很小。
其原因是因为采用存储器参数的指令(如addu、Subu、and等)出现的频率很小。
16位定长可扩展指令
从表2中咱们也可得出MOVE指令利用频率最高,达到20-27%。
EISC有16个寄放器,因此需要4bits来表示目的和源寄放器。
这样16bits完全能知足MOVE指令的操作利用。
利用16位定长指令也可简化硬件。
虽然大多数指令(如MOVE指令)都能用16位定长进行操作。
但同时也有另外一些指令像利用当即数的指令(如Load、Store操作)因为受偏移量和常量位数的限制,它不能完全用16位定长进行操作。
其中Load、Store指令的93.5%需要利用32位操作数。
对lw(输入字)和sw(存储字)的特性进行更详细的分析,咱们能够得出大约61%的指令涉及到堆栈指针,大约40%的指令利用索引寄放器。
在后一种情况,有77%只需用3bits偏移量就可表示出来。
Offsetlength
Stackpointer%)
Indexregister
%)
3bit
4bit
5bit
6bit
7bit
Table3Characteristicsof
'
lw'
and'
sw'
instructions
Constantrange
-32--+31
-64--+63
-128--+127
-256--+255
Others
100%
Table4OperandSizeof
‘li’instruction
利用当即数的指令(如li-输入当即数)并超级常利用,仅仅占全数指令的%.另外,从表4咱们可以看出93.6%的指令用8bits表示即可。
这样一来,绝大多数指令可以用短的偏移量或当即数来实现。
这样的情况既适合于像lw(输入字)和sw(存储字)这样的指令,也适合于诸如addiu、slti、sltiu这样的算术指令。
3.4扩展寄放器和扩展标志位
EISC结构利用E标志(扩展寄放器和扩展标志位)从相近的指令中形成长操作数。
E标志是一个集合。
当一个操作数送到32位扩展寄放器(即%ER)时,E标志位置1。
用Leri指令(加载扩展寄放器指令)来实现条件转换,由E-flag进行控制,在扩展寄放器中形成长当即数。
如图1所示。
Load、Store指令利用E-flag来构造有效地址或32位常量。
如图2所示,当E标志位置1时,有效地址=%ER<
<
4+偏移量+索引寄放器。
因为32位Load、Store指令数量很少,所以这种方式对微处置器的性能影响不大。
InstructionMnemonics:
LERI
InstructionFormat:
LERIconstant
InstructionRepresentation:
bit15-14=01
bit13-0=constantdatabit13-0
Operation;
If(Eflagis0)Load%ERwithsignextendedconstant
ELSE%ER=%ER<
14+Constant
SetEflag
Figure1.OperationoftheLERIinstruction
InstructionFunction:
Load/Store
bit15-14=00
bit13-12,7=Operation
000:
signextend8bitloadLDBSRCDST
001:
signextend16bitloadLDSSRCDST
010:
32bitloadLDSRCDST
011:
Zeroextend8bitloadLDBUSRCDST
100:
8bitstoreSTBSRCDST
101:
16bitstoreSTSSRCDST
110:
32bitstoreSTSRCDST
111:
Zeroextend16bitloadLDSUSRCDST
bit11-8=Source/Destinationregister.%R0to%R15.
bit6-4=offsetbit2-0if8bitload/store
=offsetbit3-1if16bitload/store
=offsetbit4-2if32bitload/store
bit3-0=Indexregister.%R0thru%R15.
Effectiveoperandaddress:
EA
Operation:
If(Eflagis0)
EA=Zeroextendoffset+Indexregister
If(Eflagis1)
if(32/16bitload/store)
EA=%ER<
4+Offset+Indexregister
if(8bitload/store)
EA=%ER<
3+Offset+Indexregister
Figure2.OperationoftheLDinstruction
堆栈指针
如表3所示,涉及到堆栈指针的Load、Store指令和涉及到索引寄放器的Load、Store指令需要不同长度的操作数。
对于前一种情况,所需偏移量要超过5位;
而对于后一种情况,大部份指令(大约77%)只需用3位操作数。
正因为如此,32位EISC指令集用7位来表示Load、Store指令的堆栈操作。
在上面的分析实验中,堆栈操作(push和pop)利用频率很高(约%)。
而且当8个寄放器绑定在一路时,push、pop寄放器操作数大约为。
这表明值得加入push、pop表类型的指令。
相对RISC机械来讲,这种方式在CISC结构中更常常利用。
它能减少push、pop指令所用的存储器量,但也带来一些问题。
它影响超标量和深层管道设置。
一个很简单的解决方式就是禁止在这样的设置中的单指令执行多重push、pop指令。
由于不需要完全知足二进制兼容,这种方式完全可行。
从表2可以看出Addiu(当即数加法指令)利用频率是%。
在这些指令当中,堆栈指针利用频率达到35%,而且95%利用7位常数操作码。
所以32位EISC指令集针对堆栈指针概念了7位常数操作码计算能力。
其余指令
如表2所示,条件转移指令利用的频度为%。
在EISC指令集中,通过进位标志位、符号标志位、零标志位和溢出标志位形成14种条件转移指令。
这些指令的偏移量定为9bits,并通过扩展标志位扩展到32位。
也同时可看到,在所有的ALU指令中约48.5%利用二个操作数,%利用三个操作数。
可是,三操作数指令能通过利用MOVE指令和相应的二操作数指令来代替。
在EISC结构中就采取了这种方式。
像乘和减这样的指令用得很少,但它们在多媒体应用中很有效,而且这种指令的性能很大部份取决于操作方式。
EISC用2个32位寄放器(%ML和%MH)来存储乘、减操作的结果。
EISC也可加入一系列的协处置器来完成特别的功能。
每一个协处置器有16个通用寄放器。
“0”协处置器是一个系统协处置器,用来管理缓存、管道和存储器等。
另外一些协处置器用来进行浮点运算和多媒体加速。
协处置器指令位数通过利用扩展寄放器能扩到20位或30位。
4.性能评估
咱们用RCD(相对码密度)来评价EISC结构并现有的微处置器进行比较对比。
RCD概念如下:
32位EISC码密度用来比较的微处置器的程序大小
RCD=―――――――――――=――――――――――――――――――
用来比较的微处置器的码密度32位EISC的程序大小
在这次评估中咱们用一个交叉C/C++编译器,对C/C++库和测试例程别离在32位EISC和现存的微处置器上进行编译测试,然后得出RCD数据如表7所示。
Processor
RCD
32bitEISC
MC88000
MIPS-R3000
MC5200(Coldfire)
TR4101(MIPS-16)
MC68000
MIPS-R4000
MC68332
MIPSTX-39
MC68020
ARM-7
MN10300
ARM-7TDMI(THUMB)
Pentium(I80386)
PowerPC601
I80960
SPARCV8
ARC
SPARCLITE
SH-3
PA-RISC
V850
Alpha-RISC
M32R
Table7.RelativeCodeDensityof32-bitEISC.
TR4101
ARM-7TDMI
Load/Store
Table8Comparisonbetween32bitEISC
and16bitcompressedRISC
从表7,通过比较EISC和现有的微处置器测试结果,咱们可以看出EISC的相对码密度是最高的(即码块最小)。
如,在测试基准例程中,EISC的码密度比MIPS-R3000高66%(采用32位RISC结构测试例程)。
ARM-7与EISC相较,相对码密度达到.
乃至CISC处置器如MC68000、I80386,它们的RCD数字也从到不等。
这说明CISC处置器的程序规模也比EISC的大20%到40%.
与EISCRCD数字最接近的是ARM-7TDMI和TR4101。
它们是16位紧缩RISC处置器。
可是这些结构只能寻址8个通用寄放器,它们加大了Load、Store指令的利用频度,也就相应增加了必需的存储带宽。
如,
TR4101的程序规模比EISC的大7%,Load、Store指令的操作频度却大18%。
这样一来,TR4101就需要比EISC高25%的数据发送率。
对ARM-7TDMI来讲,也需要多30%的数据发送率。
5.结论
这篇文章提出了一种新的结构EISC(可扩展指令集计算机)。
它主要面向嵌入式系统市场。
嵌入式处置器的性能价钱比特别受其存储系统的容量和带宽的影响。
在这方面EISC比现有的处置器有了很大的提高。
通过利用扩展寄放器和扩展标志位,EISC有一套高效的定长16位指令集。
它采取短偏移量和当即数,而且这种短偏移量和当即数通过对扩展标志位的操作可扩展到32位。
利用这套机制,EISC结构能够取得更高的代码密度,相当于现有的RISC处置器140%到220%,比CISC高20%到40%,乃至与诸如ARM-7TDMI这样子的RISC处置器相较,虽然它们利用16位紧缩指令集,EISC的程序规模仍然比其小5%到15%,而且其Load、Store指令利用频率低15%。
因此,EISC结构超级适合于要求代码小、存储带宽低的嵌入式应用系统中。
6.参考文献
[1]ManfredSchlett,"
TrendsinEmbedded-MicroprocessorDesign,"
IEEEComputer,pp.44-50,Aug.1998.
[2]D.Patterson,"
ReducedInstructionSetComputer,"
Comm.ACM,Vol.28,No.1,pp.8-21,Jan.1985.
[3]DezsoSimaetal.,"
SuperscalarInstructionIssue,"
IEEEMicro,pp.28-39,Oct.1987.
[4]B.Giesekeetal.,"
A600MHzSuperscalarRISCMicroprocessorwithout-of-orderexecution,"
ISSCCDigestTech.Papers,pp.176-177,Feb.1997.
[5]C.A.Maieretal.,"
A533MHzBiCMOSSuperscalarRISCMicroprocessor,"
IEEEJournalofSolid-StateCircuits,Vol.32,No.11,pp.1625-1634,Nov.1997.
[6]CharlesF.Webbetal.,"
A400MHzS/390Micro-processor,"
IEEEJournalofSolid-StateCircuits,Vol.32,No.11,pp.1665-1675,Nov,1997.
[7]PaulE.Gronowskietal.,"
High-PerformanceMicroprocessorDesign,"
IEEEJournalofSolid-StateCircuits,Vol.33,No.5,pp.676-686,May1998.
[8]DougBurger,"
LimitedBandwidthtoAffectProcessorDesign,"
IEEEMicro,pp.55-62,Dec.1997
[9]A.Wolfe&
A.Chanin,“ExecutingCompressedProgramsonanEmbeddedRISCArchitecture,”Proceedingsofthe25thAnnualInternationalSymposiumonMicroarchitecture,December1992.
[10]M.KozuchandA.Wolfe,“CompressionofEmbeddedSystemPrograms,”IEEEInternationalConferenceonComputerDesign,1994.
[11]C.W.Fraser,T.A.Proebsting,"
CustomInstructionSetsforCodeCompression"
unpublished,October1995.
[12]C.LefurgyandT.Mudge,"
CodeCompressionforDSP"
CASES'
98,Dec.4-5,1998,.~tnm/compress
[13]C.LefurgyandT.Mudge,"
FastSoftware-managedCodeDecompression"
CASES’99,October1-3,1999,Segarsetal.,"
EmbeddedControlProblems,Thumb,andtheARM7TDMI"
IEEEMicro,pp.22-30,Oct.1995
[14]P.Weicker,"
DHRYSTONEBenchmarkProgram"
CACMVol27,No10,10/84pg.1013.(TranslatedfromADAbyRickRichardson).