CN105988775A - 处理器、程序代码转换装置以及软件 - Google Patents
处理器、程序代码转换装置以及软件 Download PDFInfo
- Publication number
- CN105988775A CN105988775A CN201610151495.7A CN201610151495A CN105988775A CN 105988775 A CN105988775 A CN 105988775A CN 201610151495 A CN201610151495 A CN 201610151495A CN 105988775 A CN105988775 A CN 105988775A
- Authority
- CN
- China
- Prior art keywords
- instruction
- forwarding
- depositor
- circuit
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims description 129
- 230000008569 process Effects 0.000 claims description 121
- 238000003860 storage Methods 0.000 claims description 51
- 230000006870 function Effects 0.000 claims description 39
- 238000006243 chemical reaction Methods 0.000 claims description 33
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 claims description 11
- 230000000052 comparative effect Effects 0.000 claims description 10
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 claims description 9
- 238000004321 preservation Methods 0.000 claims description 8
- 239000004065 semiconductor Substances 0.000 claims description 7
- 230000003111 delayed effect Effects 0.000 claims description 5
- 239000000758 substrate Substances 0.000 claims description 4
- 238000000605 extraction Methods 0.000 claims description 2
- 230000005611 electricity Effects 0.000 claims 3
- 238000010586 diagram Methods 0.000 description 36
- 230000004087 circulation Effects 0.000 description 32
- 238000005457 optimization Methods 0.000 description 21
- 230000009471 action Effects 0.000 description 13
- 230000008859 change Effects 0.000 description 10
- 230000001351 cycling effect Effects 0.000 description 7
- 230000003252 repetitive effect Effects 0.000 description 7
- 230000000694 effects Effects 0.000 description 6
- 238000000151 deposition Methods 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 101000682954 Homo sapiens Ribosome biogenesis regulatory protein homolog Proteins 0.000 description 2
- 101150058817 RRT1 gene Proteins 0.000 description 2
- 102100023902 Ribosome biogenesis regulatory protein homolog Human genes 0.000 description 2
- 235000009499 Vanilla fragrans Nutrition 0.000 description 2
- 244000263375 Vanilla tahitensis Species 0.000 description 2
- 235000012036 Vanilla tahitensis Nutrition 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000005669 field effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- MWRWFPQBGSZWNV-UHFFFAOYSA-N Dinitrosopentamethylenetetramine Chemical compound C1N2CN(N=O)CN1CN(N=O)C2 MWRWFPQBGSZWNV-UHFFFAOYSA-N 0.000 description 1
- 241000196324 Embryophyta Species 0.000 description 1
- 244000131316 Panax pseudoginseng Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000000877 morphologic effect Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- 230000003245 working effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
- G06F9/3828—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种流水线方式的处理器,该处理器不必增加在寄存器文件中安装的寄存器数量,就能谋求通过软件流水线化来提高性能。针对每一个指令指定是禁止转发还是允许转发(转发关闭/启动),在执行转发被禁止的指令时,参照寄存器文件,在执行转发被允许的指令时,参照向上述寄存器文件写入数据的流水线的中途的流水线级来进行转发。特别是,设置转发控制电路和转发选择器,在构成VLIW的一个字的多个指令中的每一个中设置对转发的禁止/允许进行指定的字段,根据该字段的值来控制是参照寄存器(转发禁止)还是进行转发。
Description
技术领域
本发明涉及一种处理器、用于生成适用于上述处理器的程序的程序代码转换装置以及通过由计算机执行来作为上述程序代码转换装置发挥功能的软件,特别是能够适合利用于流水线型VLIW(VeryLong Instruction Word,超长指令字)处理器。
背景技术
已知有一种利用VLIW结构的指令字的处理器,VLIW结构的指令字是指为了提高运算性能而并行发出多个指令的指令字。即,处理器对单一的VLIW指令进行取出、解码、执行,数据路径处理该VLIW指令中包含的多个操作。
作为有效运用VLIW处理器的宽指令发出宽度的高速化手法,已知有一种软件流水线化手法。通常,说软件的执行时间的大部分被很小一部分循环占用,但是软件流水线化是使这种循环高速化的手法。即,通过进行最优化来减少每重复一次的执行循环数,该最优化是指以跨越循环的多次重复期间的方式来使操作移动。
作为VLIW处理器的软件流水线化时的性能瓶颈,举例有必须保持变量的多个实例。软件流水线化提高循环内的并行指令发出数,来提高性能。但是,已知当发展软件流水线化时,即缩小启动间隔(Initiation interval)时,通用寄存器的使用数量会增加,因此寄存器数量成为瓶颈,导致无法提高性能。寄存器数量增加的一个原因是跨越了循环内的多次重复的变量的利用。即,有时必须保持多个实例。但是,增加安装的寄存器数量直接关系到增加硬件,因此并不优选。
发明内容
下面说明用于解决这样的课题的手段,根据本说明书的描述以及附图能够使其他的课题和新特征变明确。
根据一个实施方式,如下文所述。
即,一种能够针对每一个指令对是禁止转发还是允许转发进行指定的处理器,在执行转发被禁止的指令时参照寄存器文件,在执行转发被允许的指令时参照向所述寄存器文件写入数据的流水线的中途的级。
发明效果
若简单地说明通过上述一个实施方式得到的效果,则如下文所述。
即,不必增加在寄存器文件中安装的寄存器数量,就能够谋求通过软件流水线化来提高性能。
附图说明
图1是示出能够指定转发(forwarding)的启动(ON)/关闭(OFF)的处理器的基本的结构例的框图。
图2是示出由图1的处理器执行的指令代码的结构例的说明图。
图3是示出图1的处理器中搭载的转发选择器的结构例的框图。
图4是示出图1的处理器中搭载的转发控制电路的功能的一例的流程图。
图5是示出能够指定转发的启动/关闭的处理器的利用VLIW的结构例的框图。
图6是示出由图5的处理器执行的指令字的结构例的说明图。
图7是示出图5的处理器中搭载的处理器控制电路的结构例的框图。
图8是示出图5的处理器中搭载的转发选择器的结构例的框图。
图9是示出图5的处理器中搭载的转发控制电路的功能的一例的流程图。
图10是示出由图5的处理器执行的用高级语言描述的程序的例子的说明图。
图11是示出由图5的处理器执行的用汇编语言描述的程序的例子的说明图。
图12是示出在图11的程序中使用的用汇编语言描述的指令的动作的说明图。
图13是示意地示出图5的处理器的动作例的时序图。
图14是示出在由图5的处理器执行的用汇编语言描述的程序中,不进行转发的启动/关闭指定的例子的说明图。
图15是示出图5的处理器的动作例的说明图。
图16是示出由实施方式2的处理器执行的指令代码的结构例的说明图。
图17是针对图16的指令代码中的转发源指定信息字段的说明图。
图18是示出实施方式2的处理器中搭载的转发控制电路的功能的一例的流程图。
图19是示出实施方式3的程序开发装置的功能的一例的流程图。
图20是示出基于利用程序代码转换(最优化)装置进行转换前的程序而实现的动作的示意性的时间图。
图21是示出基于利用程序代码转换(最优化)装置进行转换后的程序而实现的动作的示意性的时间图。
其中,附图标记说明如下:
1、2 处理器
IR 指令寄存器
CTRL 处理器控制部
IDE 指令解码器
OP-DE、OP-DE1~3 运算器控制信息流水线寄存器(DE级)
OP-RR、OP-RR1~3 运算器控制信息流水线寄存器(RR级)
FWD-DE、FWD-DE1~3 转发无效信息存储寄存器
SRC-DE、SRCS-DE1~3、SRCT-DE1~3 源操作数信息存储寄存器
DST-DE、DST-DE1~3 目标操作数信息存储寄存器(DE级)
DST-RR、DST-RR1~3 目标操作数信息存储寄存器(RR级)
DST-EX、DST-EX1~3 目标操作数信息存储寄存器(EX级)
FWDCNT、FWDCNTS1~S3、FWDCNTT1~T3 转发控制信号生成部
FSEL、FSEL-S1~S3、FSEL-T1~T3 转发选择器
EXEC、EXEC1~3 运算器(处理执行电路)
REGF 寄存器文件
P-RR、P-RR-S1~S3、P-RR-T1~T3 运算器输入端流水线寄存器(RR级)
P-EX、P-EX1~3 运算器输出端流水线寄存器(EX级)
ICODE 指令代码
OPEX、OPEX1~3 运算器(处理执行电路)控制信号
FSELS1~3、FSELT1~3 转发选择器选择控制信号
RRS1~3、RRT1~3 来自寄存器文件的读寄存器指定信号
RW1~3 向寄存器文件的回写寄存器指定信号
具体实施方式
1.实施方式的概要
首先,针对本申请公开的代表性的实施方式,说明其概要。在针对代表性的实施方式的概要说明中,标括号来参照的附图中的附图标记仅是例示标付有该附图标记的构成要素的概念所包含的要素。
(1)<能够指定转发的启动/关闭的处理器>
本申请公开的代表性的实施方式是被设置为能够针对每一个指令指定是禁止转发还是允许转发的处理器。在执行转发被禁止的指令时参照寄存器文件(REGF),在执行转发被允许的指令时参照向上述寄存器文件写入数据的流水线的中途的级(stage)(进行转发)。
通过这样,不必增加在寄存器文件中安装的寄存器数量,能够谋求通过软件流水线化来提高性能。这是因为,在根据执行结果而发出改写寄存器的指令之后,在回写(write back)该指令之前,能够使转发启动的(被允许转发的)指令和转发关闭的(被禁止转发并参照寄存器文件REGF)指令自由混合。
(2)<含有指定转发的启动/关闭的字段在内的指令>
在第1项中,能够由上述处理器执行的指令集包括将对禁止转发还是允许转发进行指定的字段(f)包含于指令代码的指令。
通过这样,能够易于针对每一个指令指定禁止转发还是允许转发。
(3)<VLIW>
在第2项中,上述处理器并行地发出由上述指令集所包含的多个指令的指令代码构成的指令字(ICODE),并行地执行上述多个指令,上述指令字包括将对禁止转发还是允许转发进行指定的字段包含于各个指令代码的一个以上的上述指令。
通过这样,在一个指令字由多个指令构成的VLIW处理器中,不必增加在寄存器文件中安装的寄存器数量,就能够谋求通过软件流水线化来提高性能。这是因为,能够针对VLIW的一个指令字中包含的多个指令的每一个都能够独立地对禁止转发还是允许转发进行指定。
(4)<含有指定转发源的字段的指令>
在第1项中,可由上述处理器执行的指令集包含如下这种指令,这种指令将对禁止转发还是允许来自上述流水线的哪个级的转发进行指定的字段(fsrc)包含于指令代码。
通过这样,不仅是单纯地禁止转发或者允许转发,在允许的情况下还能够指定以哪个流水线级作为转发源,从而能够提高自由度。在未指定转发源的情况下,优先从更靠前的级转发,即,优先从与回写级相距更远的流水线级进行转发。
(5)<VLIW>
在第4项中,上述处理器并行地发出由上述指令集所包含的多个指令的指令代码构成的指令字(ICODE),并行地执行上述多个指令,上述指令字包括将对禁止转发还是允许来自上述流水线的哪个级的转发进行指定的字段包含于各个指令代码的一个以上的上述指令。
通过这样,在一个指令字由多个指令构成的VLIW处理器中,不必增加在寄存器文件中安装的寄存器数量,能够谋求通过软件流水线化来进一步提高性能。这是因为,能够针对VLIW的一个指令字中包含的多个指令的每一个独立地对是禁止转发还是允许转发,而且对在允许的情况下以哪个流水线级作为转发源自由地进行指定。
(6)<能够指定转发的启动/关闭的处理器>
本申请公开的代表性的实施方式是一种对包含于指令集中且按照程序依次发出的指令以流水线方式来执行的处理器,该处理器以以下方式构成。
该处理器具有取出上述指令的取出电路(IR)、包含多个寄存器在内的寄存器文件(REGF)、转发选择器(FSEL)、处理执行电路(EXEC)、和基于上述取出的指令来控制上述处理执行电路的处理器控制电路(CTRL)。
上述指令集包含寄存器保存指令和寄存器参照指令。上述寄存器保存指令是,将使上述处理执行电路执行由该指令指定的处理的结果,保存在上述寄存器文件所包含的上述多个寄存器中的由该指令的目标操作数(rd)指定的寄存器中的指令。上述寄存器参照指令是,参照在上述寄存器文件所包含的上述多个寄存器中的由该指令的源操作数(rs、rt)指定的寄存器中保存的数据,使上述处理执行电路执行由该指令指定的处理的指令。一部分或者全部的上述寄存器参照指令将能够对禁止转发还是允许转发进行指定的字段(f)包含于指令代码。
上述处理器控制电路具有对上述取出的指令进行解码的指令解码器(IDE)、保持基于上述指令解码器的解码结果的多个流水线寄存器(OP-DE、OP-RR、FWD-DE、SRC-DE、DST-DE、DST-RR、DST-EX)、和转发控制电路(FWDCNT)。上述指令解码器对上述取出的指令进行解码,并输出上述指令的执行代码。上述指令解码器在上述指令是上述寄存器保存指令时,输出指定目标寄存器的目标操作数代码。上述指令解码器在上述指令是上述寄存器参照指令时,输出指定源寄存器的源操作数代码。上述指令解码器在上述指令是将能够对禁止转发还是允许转发进行指定的字段包含于指令代码的寄存器参照指令时输出该字段的解码结果。上述多个流水线寄存器按照各个流水线级保存上述目标操作数代码(DST-DE、DST-RR、DST-EX)。
上述转发控制电路基于能够对禁止转发还是允许转发进行指定的字段的解码结果,来控制上述转发选择器。在转发被禁止时,上述转发控制电路利用上述转发选择器,从上述寄存器文件读取出由上述源操作数代码指定的寄存器的值并供给至上述处理执行电路。在转发被允许时,上述转发控制电路对在上述多个流水线寄存器中针对各流水线级保持的上述目标操作数代码与上述源操作数代码进行比较,通过上述转发选择器执行从比较结果一致的流水线级向上述处理执行电路的转发。
通过这样,不必增加在寄存器文件中安装的寄存器数量,能够谋求通过软件流水线化来提高性能。此处,处理执行电路(EXEC)可以是算术运算电路(ALU)、乘法电路(MUL)、桶式(Barrel)移位器(SFT)等运算电路,或者加载/存储电路等存储器访问电路,或者分支控制电路等。
(7)<VLIW>
在第6项中,上述处理器具有N个(N是任意的自然数)上述处理执行电路(EXEC1~3),构成为能够利用对应的处理执行电路并行地执行将上述指令集所包含的上述N个指令包含于一个字的指令字。
在上述N个中的M个(M是N以下的任意的自然数)处理执行电路(EXEC1~3)上,分别连接有与各个输入数对应的数量的转发选择器(FSEL-S1~S3、FSEL-T1~T3)。
上述指令解码器对上述取出的上述指令字中包含的上述N个指令并行地进行解码,并输出与上述N个处理执行电路中的每一个对应的解码结果。在与上述M个处理执行电路对应的解码结果中包含指定了禁止转发还是允许转发的字段的解码结果。
上述处理器控制电路具有与上述M个处理执行电路对应的M个转发控制电路(FWDCNTS1~S3、FWDCNTT1~T3),上述M个转发控制电路分别基于对禁止转发还是允许转发进行指定的字段的解码结果,执行对于对应的处理执行电路的转发控制。
通过这样,在一个指令字由多个指令构成的VLIW处理器中,不必增加在寄存器文件中安装的寄存器数量,能够谋求通过软件流水线化来提高性能。这是因为,能够针对VLIW的一个指令字中包含的多个指令的每一个独立地对禁止转发还是允许转发进行指定。上述M个处理执行电路是能够进行转发的启动/关闭控制的槽(slot),另外的N-M个处理执行电路是未采用转发的启动/关闭控制的槽。若针对全部槽都采用转发的启动/关闭控制则自由度提高,但电路规模会变大,另一方面,通过限制为一部分(M个)来进行转发的启动/关闭控制的指令虽然会产生在这些槽以外无法进行配置的制约,但是能够防止电路规模增大。
此处,处理执行电路(EXEC1~3)与第6项同样地,可以是算术运算电路(ALU)、乘法电路(MUL)、桶式移位器(SFT)等运算电路,或者加载/存储电路等存储器访问电路,或者分支控制电路等。处理执行电路(EXEC1~3)可以将对全部槽任意地指定其功能的多功能的处理执行电路搭载于全部槽,也可以将具有如上述举例示出的那样的单纯功能或者单一功能的处理执行电路适当地搭载于各槽。若如前者那样将多功能的处理执行电路搭载于全部槽,则电路规模变大,但编程的自由度却变得最大,另一方面,若如后者那样,则编程的自由度受到一定程度限制,但能够将电路规模限制得较小。作为两者的中间选项,也可以使多功能的处理执行电路与单纯功能或者单一功能的处理执行电路混合存在。
(8)<来自其他槽的转发>
在第7项中,上述处理器控制电路在上述多个流水线寄存器中,按照各个流水线级保持与上述N个处理执行电路各自对应的上述目标操作数代码(DST-DE1~3、DST-RR1~3、DST-EX1~3)。
上述处理器控制电路具有与上述M个处理执行电路对应的M个转发控制电路(FWDCNTS1~S3、FWDCNTT1~T3)。上述M个转发控制电路分别基于对禁止转发还是允许转发进行指定的字段的解码结果,对与对应的处理执行电路连接的一个或者多个转发选择器(FSEL-S1~S3,FSEL-T1~T3)进行以下的控制。在转发被禁止时,上述转发控制电路从上述寄存器文件读取出由上述源操作数代码指定的寄存器的值,并供给至该处理执行电路,上述源操作数代码与上述一个或者多个转发选择器分别对应。在转发被允许时,上述转发控制电路对在上述多个流水线寄存器中针对各流水线级保持的、且与上述N个处理执行电路各自对应的上述目标操作数代码和与上述一个或者多个转发选择器对应的上述源操作数代码分别进行比较。其结果是,上述转发控制电路使该转发选择器执行从比较结果一致的流水线级向上述处理执行电路的转发。
通过这样,能够使得从未采用转发的启动/关闭控制的上述N-M个槽也能够转发。
(9)<含有指定转发源的字段的指令>
在第6项中,取代上述一部分或者全部的寄存器参照指令或在上述一部分或者全部的寄存器参照指令的基础上,一部分或者全部的上述寄存器参照指令将表示禁止转发还是允许来自上述流水线的哪个级的转发的、能够指定转发源的字段(fsrc)包含于指令代码。
在上述取出的指令是将禁止转发或者能够指定上述转发源的字段包含于指令代码的寄存器参照指令时,上述指令解码器进一步输出该字段的解码结果。
上述转发控制电路基于该解码结果,控制上述转发选择器。在转发被禁止时,上述转发控制电路利用上述转发选择器,从上述寄存器文件读取出由上述源操作数代码指定的寄存器的值并供给至上述处理执行电路。在上述转发源被指定时,上述转发控制电路对在上述多个流水线寄存器的被指定的流水线级保持的上述目标操作数代码与上述源操作数代码进行比较,使上述转发选择器执行从比较结果一致的流水线寄存器向上述处理执行电路的转发。
通过这样,与第4项同样地,不仅是单纯地禁止转发或者允许转发,还能够在允许的情况下指定以哪个流水线级作为转发源,从而能够提高自由度。
(10)<VLIW>
在第9项中,上述处理器具有N个(N是任意的自然数)上述处理执行电路(EXEC1~3),能够利用对应的处理执行电路并行地执行将上述指令集所包含的上述N个指令包含于一个字的指令字。
在上述N个中的M个(M是N以下的任意的自然数)处理执行电路(EXEC1~3)上,分别连接有与各个输入数对应的数量的转发选择器(FSEL-S1~S3、FSEL-T1~T3)。
上述指令解码器对上述取出的上述指令字中包含的上述N个指令并行地进行解码,输出与上述N个处理执行电路各自对应的解码结果。在与上述M个处理执行电路对应的解码结果中,包含指定了禁止转发还是允许转发的字段的解码结果、或者包含禁止转发或者能够指定上述转发源的字段的解码结果中的一方或者两方。
上述处理器控制电路具有与上述M个处理执行电路对应的M个转发控制电路(FWDCNTS1~S3、FWDCNTT1~T3),上述M个转发控制电路分别基于上述解码结果,执行对于对应的处理执行电路的转发控制。
通过这样,与第7项同样地,在一个指令字由多个指令构成的VLIW处理器中,不必增加在寄存器文件中安装的寄存器数量,就能够谋求通过软件流水线化来提高性能。进一步地,与第4项和第9项同样地,不仅是单纯地禁止转发或者允许转发,还能够在允许的情况下指定以哪个流水线级作为转发源,从而能够提高自由度。
(11)<来自其他槽的转发>
在第10项中,上述处理器控制电路在上述多个流水线寄存器中针对各流水线级保持与上述N个处理执行电路各自对应的上述目标操作数代码(DST-DE1~3、DST-RR1~3、DST-EX1~3)。
上述处理器控制电路具有与上述M个处理执行电路对应的M个转发控制电路(FWDCNTS1~S3、FWDCNTT1~T3)。上述M个转发控制电路分别基于对禁止转发还是允许转发、或指定上述转发源的字段的解码结果,对与对应的处理执行电路连接的一个或者多个转发选择器(FSEL-S1~S3、FSEL-T1~T3)进行以下的控制。
在转发被禁止时,上述转发控制电路从上述寄存器文件读取出由上述源操作数代码指定的寄存器的值,并供给至该处理执行电路,上述源操作数代码与上述一个或者多个转发选择器分别对应。
在转发被允许时,上述转发控制电路对在上述多个流水线寄存器中针对各流水线级保持的、且与上述N个处理执行电路各自对应的上述目标操作数代码和与上述一个或者多个转发选择器对应的上述源操作数代码分别进行比较。其结果是,上述转发控制电路通过该转发选择器执行从比较结果一致的流水线寄存器向上述处理执行电路的转发。
在上述转发源被指定时,对目标操作数代码和与上述转发选择器对应的上述源操作数代码进行比较,该目标操作数代码是,在与上述N个处理执行电路对应且针对各流水线级保持的目标操作数代码中的、在上述转发源被指定的流水线级的流水线寄存器中保持的目标操作数代码。其结果是,上述转发控制电路通过该转发选择器执行从比较结果一致的流水线寄存器向上述处理执行电路的转发。
通过这样,能够使得从未采用转发的启动/关闭控制的上述N-M个槽也能够转发。
(12)<LSI(Large Scale Integrated circuit,超大规模集成电路)>
在第6项~第11项中的任一项中,上述处理器形成于单一的半导体基板上。
通过这样,处理器集成于单一的半导体芯片,减小安装面积、功耗、成本等。
(13)<程序代码转换(最优化)装置>
本申请公开的代表性的实施方式是一种程序代码转换装置,该程序代码转换装置对由处理器执行的程序的程序代码进行转换,该程序代码由指令集中包含的多个指令构成,该程序代码转换装置以下述方式构成。
上述处理器包括由多个寄存器构成的寄存器文件(REGF)和处理执行电路(EXEC),并通过包括参照上述寄存器文件的寄存器读取步骤(RR)和将值写入上述寄存器文件的回写步骤(WB)的流水线构成。
上述指令集包含寄存器参照指令、寄存器保存指令和寄存器移动指令。
上述寄存器参照指令用于在上述寄存器读取步骤中,参照在上述寄存器文件中包含的多个寄存器中的、由该指令的源操作数指定的寄存器中存储的值,使上述处理器执行由该指令规定的处理。
上述寄存器保存指令用于在仅比上述寄存器读取步骤延迟了由上述流水线的级数规定的延迟量(DA)的上述回写步骤中,将使上述处理器执行了由该指令规定的处理的结果保存在上述寄存器文件中包含的多个寄存器中的、由该指令的目标操作数指定的寄存器中。
上述寄存器移动指令用于在上述寄存器读取步骤中读取出在上述寄存器文件中包含的多个寄存器中的、由该指令的源操作数指定的寄存器中保存的值,并在上述回写步骤中将该值写入由该指令的目标操作数指定的寄存器。
全部或者一部分上述寄存器参照指令还将对禁止转发还是允许转发进行指定的转发无效标志(f)包含于操作数中。在根据上述转发无效标志而禁止转发时,利用上述处理器在上述寄存器读取步骤中参照上述寄存器文件。在根据上述转发无效标志而允许转发时,从通过上述处理器执行上述寄存器保存指令或者上述寄存器移动指令来将数据写入由上述目标操作数指定的寄存器的流水线的中途的级,参照在由上述源操作数指定的寄存器中保存的值。
上述程序代码转换装置能够执行以下的各步骤。
从由上述指令集中包含的多个指令构成的上述程序代码中搜索寄存器移动指令(M)(S4)。
提取利用目标操作数来指定由在上述搜索中发现的寄存器移动指令的源操作数(RSM)指定的寄存器的寄存器保存指令(A)(S5)。
针对利用源操作数来指定由在上述搜索中发现的上述寄存器移动指令的目标操作数(RDM)指定的寄存器的后续的寄存器参照指令(X),在从上述寄存器保存指令起的上述延迟量(DA)以内的执行步骤中执行该寄存器参照指令(X)的情况下,将该寄存器参照指令(X)替换为利用转发无效标志进行了禁止转发的指定的寄存器参照指令(S7)。
通过这样,能够在使第1项~第12项中规定的处理器执行的程序中,进行用于谋求通过软件流水线化来提高性能的最优化。
(14)<向能够转发的步骤的指令移动>
在第13项中,上述程序代码转换装置针对利用源操作数来由在上述搜索中发现的上述寄存器移动指令的目标操作数指定的寄存器指定的后续的寄存器参照指令(X),执行以下的处理。在从上述寄存器保存指令起延迟了上述延迟量(DA)以上的执行步骤中执行该寄存器参照指令(X)的情况下,判断是否能够移动至在上述延迟量以内执行的执行步骤,在能够移动的情况下,在移动了之后,将该寄存器参照指令(X)替换为利用转发无效标志进行了允许转发的指定的寄存器参照指令(S7)。
通过这样,能够更加有效地利用转发,从而能够谋求进一步提高性能。
(15)<寄存器移动指令的删除>
在第14项中,上述程序代码转换装置针对利用源操作数来指定由在上述搜索中发现的上述寄存器移动指令的目标操作数指定的寄存器的后续的全部寄存器参照指令,在比上述寄存器保存指令延迟了上述延迟量的执行步骤中执行的情况下,判断是否能够移动至在上述延迟量以内执行的执行步骤。其结果是,在能够移动的情况下,在移动了之后,将寄存器参照指令替换为利用转发无效标志进行了禁止转发的指定的寄存器参照指令(S7)。而且,在将上述全部寄存器参照指令都移动至在上述延迟量以内执行的执行步骤时,从上述程序中删除在上述搜索中发现的上述寄存器移动指令(S8)。
通过这样,能够更加有效地利用转发,能够谋求进一步提高性能。
(16)<VLIW>
在第13项~第15项中的任一项中,上述处理器具有N个(N是任意的自然数)上述处理执行电路(EXEC1~3),能够利用对应的处理执行电路并行地执行将上述指令集所包含的上述N个指令包含于
通过这样,在一个指令字由多个指令构成的VLIW处理器中,能够更加有效地利用转发,能够谋求进一步提高性能提高。
(17)<编译器>
在第13项~第16项中的任一项中,上述程序代码转换装置根据用高级语言描述的程序,生成由上述指令集中包含的多个指令构成的上述程序代码。
通过这样,能够提供能起到第13项~第16项的效果的编译器。
(18)<程序代码转换(最优化)软件>
本申请公开的一个实施方式是一种软件,通过利用计算机执行该软件,来实现在第13项~第17项中的任一项中记载的程序代码转换装置的功能。
通过这样,能够提供一种用于实现能起到第13项~第17项的效果的程序代码转换(最优化)装置的软件。
2.实施方式的详细内容
针对实施方式更加详细地进行说明。
(实施方式1)<能够指定转发的启动/关闭的处理器>
图1是示出能够针对每一个指令指定转发的启动/关闭的处理器的基本的结构例的框图。本实施方式1的处理器1具有取出电路IR、寄存器文件REGF、转发选择器FSEL、处理执行电路EXEC、和基于取出的指令来控制处理执行电路EXEC的处理器控制电路CTRL。处理执行电路EXEC例如是算术运算电路ALU、乘法电路MUL、桶式移位器SFT等运算电路,或者加载/存储电路等存储器访问电路,或者分支控制电路等。也可以构成为安装能够执行多种处理的多功能的电路作为处理执行电路EXEC,来执行由指令代码指定的某一种处理。处理器1也可以构成为包括省略了图示的主要发挥指令存储器的功能的非易失性存储器、主要发挥数据存储器或工作存储器的功能的RAM(Random Access Memory:随机存储存储器)、中断控制电路、直接存储控制器(Direct Memory Controller)、外围模块和将它们相互结合的总线等。这些电路并无特别限制,例如,使用公知的CMOS(Complementary Metal-Oxide-Semiconductor field effect transistor:互补金属氧化物半导体场效应晶体管)LSI的制造技术而形成于硅等的单一的半导体基板上。通过将处理器1集成于单一的半导体芯片,来减小安装面积、功耗和成本等。另外,也可以具有多组图示的处理器的核心部分。在图1所示的框图中,在块之间的布线中包含由多个信号布线组成的总线布线,但省略明确标明总线。这一点,针对本申请说明书所参照的其他附图中记载的框图而言也是同样的。
由处理器1执行的指令的指令集包含寄存器参照指令和寄存器保存指令。寄存器参照指令是指在执行指令时从寄存器文件REGF读入数据的指令,含有源操作数。除了运算指令以外,还包含加载指令和参照寄存器的分支指令等。寄存器保存指令是指将执行了指令的结果存储(写入)于寄存器文件REGF的指令,含有目标操作数。除了运算指令和存储指令以外,还包含寄存器间接分支指令中的伴随着寄存器值的基于后置递增(Post-increment)、前置递增(Pre-increment)等的更新的指令。
图2是示出由图1的处理器执行的指令代码的结构例的说明图。指令代码含有操作码字段opcode、转发无效信息字段f、第一源操作数字段rs、第二源操作数字段rt以及目标操作数字段rd。操作码字段opcode是对根据该指令使处理执行电路EXEC执行的处理进行指定的字段。转发无效信息字段f是对禁止转发还是允许转发(转发关闭/启动)进行指定的字段。第一源操作数字段rs和第二源操作数字段rt是为了根据该指令使处理执行电路EXEC执行的处理,而对存储有从寄存器文件REGF输入的数据的寄存器名或者寄存器编号进行指定的操作数。另外,目标操作数字段rd是为了存储该处理结果,而对寄存器文件REGF的寄存器名或者寄存器编号进行指定的操作数。在处理器1的指令集中,源操作数和目标操作数的数量除了是上述举例示出的各两个和一个的指令以外,也可以包含没有源操作数的指令和/或含有3个以上源操作数的指令,还可以包含没有目标操作数的指令和/或含有两个以上目标操作数的指令。含有至少一个源操作数的指令也可以还含有转发无效信息字段f。如图2例示的含有源操作数和目标操作数这两者的指令,在被分类为上述的寄存器参照指令的同时,也被分类为寄存器保存指令。
返回到图1的说明。
处理器1进行流水线动作。在图1中示出处理器1由解码(DE)级、寄存器读取(RR)级、执行(EX)级以及回写(WB)级这4级流水线构成的例子,但是流水线级数可以任意地变更。在图1中例示的处理器1具有流水线寄存器P-RR和P-EX。流水线寄存器P-RR是在流水线的寄存器读取(RR)级保持从寄存器文件REGF读出的数据的寄存器,流水线寄存器P-EX是在流水线的执行(EX)级保持从处理执行电路EXEC输出的数据的寄存器。将从寄存器文件REGF读出的数据、从处理执行电路EXEC输出的数据以及从流水线寄存器P-EX输出的数据输入至转发选择器FSEL,由处理器控制电路CTRL进行控制的结果为,选择上述数据之一输入至流水线寄存器P-RR。转发是指,基于先前的其他指令的来自处理执行电路EXEC的输出,在被保持于在回写(WB)级的被写入寄存器文件REGF之前的流水线级的阶段,在需要该数据的后续指令的寄存器读取(RR)级中将该数据输入至流水线寄存器P-RR的动作。就图1的转发选择器FSEL而言,在由处理器控制电路CTRL进行控制的结果是禁止转发的情况下,在寄存器读取(RR)级,将从寄存器文件REGF读出的数据输入至流水线寄存器P-RR。另一方面,在允许转发的情况下,转发选择器FSEL将在寄存器读取(RR)级从处理执行电路EXEC输出的数据或者在执行(EX)级从流水线寄存器P-EX输出的数据输入至流水线寄存器P-RR。详细地在后文描述。
处理器控制电路CTRL具有:对取出的指令进行解码的指令解码器IDE;保存指令解码器IDE的解码结果的多个流水线寄存器OP-DE、OP-RR、FWD-DE、SRC-DE、DST-DE、DST-RR、DST-EX;和转发控制电路FWDCNT。
指令解码器IDE对取出的指令进行解码,并输出指令的执行代码。在输出的执行代码中含有例如操作码、转发无效信息、源操作数代码和目标操作数代码。流水线寄存器OP-DE和OP-RR分别是在解码(DE)级和寄存器读取(RR)级保持操作码的流水线寄存器。流水线寄存器FWD-DE是在解码(DE)级保持转发无效信息INVFWD的流水线寄存器。SRC-DE是在解码(DE)级保持源操作数代码RS的流水线寄存器。流水线寄存器DST-DE、DST-RR和DST-EX是,在解码(DE)级、寄存器读取(RR)级以及执行(EX)级的各个流水线级保存目标操作数代码的流水线寄存器。流水线寄存器OP-RR中保持的操作码被供给至处理执行电路EXEC,控制基于下一个执行(EX)级的处理执行电路EXEC的处理的内容。流水线寄存器SRC-DE中保持的源操作数代码RS被供给至寄存器文件REGF,在寄存器读取(RR)级从由源操作数代码指定的寄存器名(或者寄存器编号)的寄存器读出数据,经由转发选择器FSEL供给至寄存器读取(RR)级的流水线寄存器。流水线寄存器DST-EX中保持的目标操作数代码DST-EX1被供给至寄存器文件REGF,在回写(WB)级将处理执行电路EXEC的执行结果写入由DST-EX1指定的寄存器名(或者寄存器编号)的寄存器。
转发控制电路FWDCNT基于能够对禁止转发还是允许转发进行指定的字段f的解码结果,控制转发选择器FSEL。在禁止转发时,转发控制电路FWDCNT利用转发选择器FSEL,从寄存器文件REGF读出由源操作数代码指定的寄存器的值并供给至处理执行电路EXEC。在允许转发时,转发控制电路FWDCNT将在流水线寄存器DST-DE、DST-RR、DST-EX中针对各流水线级保持的目标操作数代码与在流水线寄存器SRC-DE中保持的源操作数代码进行比较。若有一致的代码,则进行从一致的流水线级向处理执行电路EXEC的转发。即,不等待向寄存器文件REGF的回写(WB),经由转发选择器FSEL将流水线的中途的步骤的值(处理执行电路EXEC的输出值本身或者流水线寄存器P-EX的值)供给至处理执行电路EXEC的流水线寄存器P-RR。
图3是示出处理器1中搭载的转发选择器FSEL的结构例的框图,图4是示出转发控制电路FWDCNT的功能的一例的流程图。从寄存器文件REGF读出的数据、来自处理执行电路EXEC的在回写(WB)级的数据(流水线寄存器P-EX的输出)以及来自处理执行电路EXEC的在执行(EX)级的数据(处理执行电路EXEC的输出值本身)输入至转发选择器FSEL。转发选择器FSEL基于从转发控制电路FWDCNT供给的选择控制信号FSELS,选择上述输入的数据中的一个来写入处理执行电路EXEC的流水线寄存器P-RR。当转发无效信息INVFWD是1时(S10),即,当转发被禁止时,转发控制电路FWDCNT进行如下的控制:设为选择控制信号FSELS=0(S20),使转发选择器FSEL选择从寄存器文件REGF读出的数据来写入流水线寄存器P-RR。当转发无效信息INVFWD是0时(S10),即,当转发被允许时,转发控制电路FWDCNT将源操作数代码RS与在流水线寄存器DST-RR中保存的DST-RR1进行比较(S11),若一致则设为选择控制信号FSELS=2(S21)。在不一致的情况下,接着与在流水线寄存器DST-EX中保存的DST-EX1进行比较(S12),若一致则使选择控制信号FSELS=1(S22),在还不一致的情况下,设为选择控制信号FSELS=0(S23)。此外,分配给转发无效信息INVFWD或者选择控制信号FSELS的数值是任意的,此处例示的只不过是一例。
通过这样,不必增加在寄存器文件REGF中安装的寄存器数量,就能够谋求通过软件流水线化来提高性能。
<VLIW处理器>
若将到目前为止说明的实施方式应用于VLIW处理器,则更优选。
图5是示出能够对每一个指令指定转发的启动/关闭的处理器的VLIW的结构例的框图。VLIW处理器2具有取出电路IR、处理器控制电路CTRL、3槽的处理执行电路EXEC1~3和寄存器文件REGF。处理执行电路EXEC1~3分别在输入部具有各两个的转发选择器FSEL-S1和FSEL-T1、FSEL-S2和FSEL-T2以及FSEL-S3和FSEL-T3。进一步地,为了构成流水线,处理执行电路EXEC1~3分别在输入部具有各两个的流水线寄存器P-RR-S1和P-RR-T1、P-RR-S2和P-RR-T2以及P-RR-S3和P-RR-T3,在输出部具有流水线寄存器P-EX1、P-EX2以及P-EX3。处理执行电路EXEC1~3例如可以是算术运算电路ALU、乘法电路MUL、桶式移位器SFT等运算电路,或者加载/存储电路等存储器访问电路,或者分支控制电路等,可以安装能够执行多种处理的多功能的电路,执行由指令代码指定的某一种处理。可以在全部3个槽中配置能够执行全部功能的处理执行电路,也可以在各个槽中适当地配置单功能或者限定了能够执行的功能的种类的处理执行电路。若在全部3个槽中都配置能够执行全部功能的处理执行电路,则电路规模变大,但由于能够执行的指令的种类不取决于槽而是任意的,所以编程的自由度变高,能够抑制处理所需要的步骤数量。另一方面,若在各个槽中适当地配置单功能或者限定了能够执行的功能的种类的处理执行电路,则能够抑制电路规模。在图5中示出3个槽的例子,但是槽数是任意的。VLIW处理器2也可以还具有省略图示的主要发挥指令存储器的功能的非易失性存储器、主要发挥数据存储器或工作存储器的功能的RAM、中断控制电路、直接存储控制器、外围模块、将它们相互结合的总线等。这些电路并无特别限制,例如,使用公知的CMOSLSI的制造技术形成于硅等的单一的半导体基板上。通过将VLIW处理器2集成于单一的半导体芯片,来减小安装面积、功耗和成本等。
取出电路IR取出将3个指令代码包含于一个字的超长指令字(VLIW),将3个指令并行地供给至处理器控制电路CTRL。处理器控制电路CTRL对供给来的3个指令并行地进行解码,使3个槽的处理执行电路EXEC1~3并行工作。由于分别与处理执行电路EXEC1~3连接的流水线寄存器的动作与引用图1的上述说明是同样的,所以省略说明。另外,处理执行电路EXEC1~3的控制信号、寄存器文件REGF的读出以及写入控制信号也与图1是同样的,在图5中省略图示。
图6是示出由VLIW处理器2执行的指令字的结构例的说明图。由VLIW处理器2执行的指令字是将多个指令代码包含于一个字的超长指令字,包含与槽1~3分别对应的3个指令代码。各指令代码是配合与能够由所安装的处理执行电路EXEC1~3执行的处理来规定的。在图5中示出槽1~3的全部处理执行电路EXEC1~3分别具有两个寄存器输入、一个寄存器输出和转发启动/关闭功能的例子。与槽1~3对应的3个指令代码分别含有操作码字段opcode、转发无效信息字段f、第一源操作数字段rs、第二源操作数字段rt以及目标操作数字段rd。
图7是示出VLIW处理器2中搭载的处理器控制电路CTRL的结构例的框图。处理器控制电路CTRL具有对取出的指令进行解码的指令解码器IDE、分别保持基于指令解码器IDE的与各槽对应的解码结果的多个流水线寄存器和多个转发控制电路。转发控制电路与源操作数的数量对应,在各槽中各设有两个。即,与槽1对应,设有流水线寄存器OP-DE1、OP-RR1、FWD-DE1、SRCS-DE1、SRCT-DE1、DST-DE1、DST-RR1和DST-EX1以及转发控制电路FWDCNT-S1和FWDCNT-T1。与槽2对应,设有流水线寄存器OP-DE2、OP-RR2、FWD-DE2、SRCS-DE2、SRCT-DE2、DST-DE2、DST-RR2和DST-EX2以及转发控制电路FWDCNT-S2和FWDCNT-T2。与槽3对应,设有流水线寄存器OP-DE3、OP-RR3、FWD-DE3、SRCS-DE3、SRCT-DE3、DST-DE3、DST-RR3和DST-EX3以及转发控制电路FWDCNT-S3和FWDCNT-T3。
指令解码器IDE对取出的指令进行解码,输出与各槽对应的操作码、转发无效信息、源操作数代码和目标操作数代码。流水线寄存器OP-DE1~3和OP-RR1~3分别在解码(DE)级和寄存器读取(RR)级保存各槽的操作码。流水线寄存器FWD-DE1~3在解码(DE)级保存各槽的转发无效信息INVFWD1~3。SRCS-DE1~3和SRCT-DE1~3在解码(DE)级分别保存各槽的源操作数代码RS和RT。流水线寄存器DST-DE1~3、DST-RR1~3和DST-EX1~3针对解码(DE)级、寄存器读取(RR)级以及执行(EX)级的各流水线级来保持各槽的目标操作数代码。在流水线寄存器OP-RR1~3中保持的操作码作为用于对下一个执行(EX)级的基于处理执行电路EXEC1~3的处理的内容进行控制的控制信号OPEX1~3,被分别供给至处理执行电路EXEC1~3。在流水线寄存器SRCS-DE1~3中保持的源操作数代码RS1~3和在流水线寄存器SRCT-DE1~3中保持的源操作数代码RT1~3分别作为用于对读出对象的寄存器名(或者寄存器编号)进行指定的控制信号RRS1~3和RRT1~3被供给至寄存器文件REGF。在流水线寄存器DST-EX1~3中保持的目标操作数代码DST-EX1~3作为对处理执行电路EXEC1~3的执行结果的在回写(WB)级的写入进行控制的控制信号RW1~3被供给至寄存器文件REGF。
转发控制电路FWDCNTS1~S3和FWDCNTT1~T3分别在槽1~3中与源操作数rs和rt分别对应地设置,基于能够对禁止转发还是允许转发进行指定的字段f的解码结果,来控制转发选择器FSEL-S1~S3和FSEL-T1~T3。当转发被禁止时,转发控制电路FWDCNTS1~S3和FWDCNTT1~T3利用转发选择器FSEL-S1~S3和FSEL-T1~T3,从寄存器文件REGF读出由源操作数代码指定的寄存器的值来供给至处理执行电路EXEC1~3。当转发被允许时,转发控制电路FWDCNTS1~S3和FWDCNTT1~T3将在SRCS-DE1~3和SRCT-DE1~3中分别保持的源操作数代码与在DST-RR1~3和DST-EX1~3中保持的、槽1~3的各流水线级的目标操作数代码分别进行比较。若有一致的代码,则经由对应的转发选择器,进行从一致的槽的流水线级向处理执行电路的对应的源输入的转发。
图8是示出VLIW处理器2中搭载的转发选择器FSEL-S1~S3和FSEL-T1~T3各自的结构例的框图,图9是示出转发控制电路FWDCNTS1~S3的功能的一例的流程图。转发选择器FSEL-S1~S3和FSEL-T1~T3是全部相同的结构,转发控制电路FWDCNTS1~S3也是全部相同的结构。转发控制电路FWDCNTS1~S3分别在槽1~3中与源操作数rs对应地设置,向转发选择器FSEL-S1~S3输出选择控制信号RSELRS。向转发选择器FSEL-S1~S3输入有:来自在不转发时的寄存器文件REGF的数据;和作为转发对象的数据的来自槽1~3的EX级的数据和来自槽1~3的WB级的数据。转发选择器FSEL-S1~S3基于从转发控制电路FWDCNTS1~S3供给的选择控制信号RSELRS,选择上述数据之一,经由流水线寄存器P-RR-S1~S3来供给至处理执行电路EXEC1~3的rs端源输入。与处理执行电路EXEC1~3的rt端对应设置的转发控制电路FWDCNTT1~T3也是与rs端的上述转发控制电路FWDCNTS1~S3全部相同的结构,向转发选择器FSEL-T1~T3输出选择控制信号RSELRT。向转发选择器FSEL-T1~T3还输入有:来自在不转发时的寄存器文件REGF的数据;和作为转发对象的数据的来自槽1~3的EX级的数据和来自槽1~3的WB级的数据。转发选择器FSEL-T1~T3基于从转发控制电路FWDCNTT1~T3供给的选择控制信号RSELRT,选择上述数据之一,经由流水线寄存器P-RR-T1~T3来供给至处理执行电路EXEC1~3的rt端源输入。
如图9所示,当转发无效信息INVFWD是1时(S30),转发控制电路FWDCNTS1~S3进行如下的控制,设为选择控制信号FSELS=0(S40),使转发选择器FSEL-S1~S3选择从寄存器文件REGF读出的数据来写入流水线寄存器P-RR-S1~S3。当转发无效信息INVFWD是0时,转发控制电路FWDCNTS1~S3将源操作数代码RS与在流水线寄存器DST-RR1~3中保持的DST-RR1~3分别依次进行比较(S31~S33),并且与在DST-EX1~3中保持的DST-EX1~3分别依次进行比较(S34~S36)。其结果是,转发控制电路FWDCNTS1~S3从选择控制信号FSELS输出与比较结果一致的流水线寄存器对应的值(S41~S47)。即,将源操作数代码RS与在流水线寄存器DST-RR1中保持的DST-RR1进行比较(S31),若一致则设为选择控制信号FSELS=6(S41)。在不一致的情况下,将RS与在DST-RR2中保持的DST-RR2进行比较(S32),若一致则设为FSELRS=5(S42)。在不一致的情况下,将RS与在DST-RR3中保持的DST-RR3进行比较(S33),若一致则设为FSELRS=4(S43)。在不一致的情况下,将源操作数代码RS与在流水线寄存器DST-EX1中保持的DST-EX1进行比较(S34),若一致则设为选择控制信号FSELS=3(S44)。在不一致的情况下,将RS与DST-EX2中保存的DST-EX2进行比较(S35),若一致则设为FSELRS=2(S45)。在不一致的情况下,将RS与在DST-EX3中保持的DST-EX3进行比较(S36),若一致则设为FSELRS=1(S46)。在还不一致的情况下,设为选择控制信号FSELS=0(S47)。此外,分配给转发无效信息INVFWD或者选择控制信号FSELS的数值的意思是任意的,此处例示的只不过是一例。虽然省略图示,但是与处理执行电路EXEC1~3的rt端对应地设置的转发控制电路FWDCNTT1~T3的功能与rs端的上述转发控制电路FWDCNTS1~S3的功能是同样的,向转发选择器FSEL-T1~T3输出选择控制信号RSELRT。
以上,如在图5例示的那样,针对3个槽的处理执行电路EXEC1~3全部具有相同的功能并分别具有两个源和一个目标的情况进行了说明,但是如上所述,槽的数量是任意的,各槽中安装的功能也是任意的。与各槽中安装的处理执行电路EXEC所具有的源的数量对应地,处理器控制电路CTRL具有相同数量的转发控制电路,并控制与处理执行电路EXEC连接的相同数量的转发选择器FSEL。在一部分槽中也可以安装仅能够执行寄存器保存指令的不具有源的处理执行电路EXEC。例如,在要访问的地址为由立即数(immediate值)指定的加载指令(load immediate指令)或者写入值由立即数规定的移动指令(move immediate指令)的情况下,不具有源操作数。在安装有仅具有这样的功能的处理执行电路EXEC的槽中,不安装转发选择器FSEL,处理器控制电路CTRL不具有与该槽对应的转发控制电路。这样的不具有源的处理执行电路EXEC也可以发挥转发源的功能。在图5~图9中示出允许来自任意的其他槽的转发的结构例,也可以考虑所执行的软件的特征,或者基于电路规模或布线密度的制约,而变更为仅允许来自有限范围的转发。
<软件流水线>
VLIW处理器适合于软件流水线化。在图5中由于纸面的限制而例示了3个槽的VLIW处理器,在以下所示的实施方式中,为了帮助理解而示出简单的例子,但是在VLIW处理器中安装的槽数是任意的,槽数越多,越能够更有效地对包括大量指令步骤的重复循环进行软件流水线化。
图10是示出由图5所示的VLIW处理器2执行的用高级语言描述的程序的例子的说明图。将长字(long word)型的数组变量MY_DATA的值写入由指针data指示的地址,将系数COEFFICIENT的值写入长字变量coef,启动重复(while)循环。在循环内执行两个处理,这两个处理分别是从由指数i指示的地址读入数据data[i]*并乘以系数coef之后将运算后的值存储于相同地址的处理,和使指数i每次增加1的处理。此处符号*表示指针。此外,该处理是所谓的读-修改-写(read-modify-write)处理,在数组运算中经常使用。
图11是示出由图5的处理器执行的用汇编语言描述的程序的例子的说明图,图12是示出在图11的程序中使用的用汇编语言描述的指令的动作的说明图。加载(load)指令ld使操作数带有源操作数rs、目标操作数rd和转发无效信息invfwd,从表示寄存器rs的地址加载并写入寄存器rd。但是invfwd==1的情况下rs不转发。存储(store)指令st使操作数带有两个源操作数rs和rt以及转发无效信息invfwd,将寄存器rt的内容保存于表示寄存器rs的地址。但是在invfwd==1的情况下rt转发,而rs不转发。加法(add)指令add使操作数带有两个源操作数rs和rt以及目标操作数rd,计算rs+rt,并将运算结果写入rd。乘法(multiply)指令mul使操作数带有两个源操作数rs和rt以及目标操作数rd,计算rs*rt,将运算结果写入rd。此处符号*表示乘法。分支(branch)指令br使操作数带有label,向label无条件分支。移动(move)指令mv使操作数带有源操作数rs和目标操作数rd,将寄存器rs的数据写入寄存器rd。
图11是用汇编语言描述的程序的一例。示出将图10所示的程序的重复循环转换(编译)了的部分。
在步骤1中,映射有加载(ld)指令和加法(add)指令。即,利用一个字的VLIW并行发出加载(ld)指令和加法(add)指令,并由不同的槽并行地执行。根据加载(ld)指令,从映射了指数i的寄存器r0所表示的地址将数据data[i]读入寄存器r1。根据加法(add)指令,将存储指数i的寄存器r0的值加上在未图示的初始化例行程序中被初始化为1的寄存器r9的值1,并写回寄存器r0。指数i递增i++。
在步骤2中,映射有加载(ld)指令、加法(add)指令和乘法(mul)指令。即,利用一个字的VLIW并行发出加载(ld)指令、加法(add)指令和乘法(mul)指令,并由不同的槽并行地执行。根据加载(ld)指令,从映射了指数i的寄存器r0所表示的地址将数据data[i]读入寄存器r1,根据加法(add)指令,将存储指数i的寄存器r0的值加上寄存器r9的值1并写回寄存器r0。此时的指数i是根据步骤1的加法(add)指令已经进行递增的值,被写回寄存器r0的值是进一步进行递增的值。根据乘法(mul)指令,将在步骤1中加载了数据data[i]的寄存器r1的值,与在未图示的初始化例行程序中被初始化为系数值COEFFICIENT的寄存器r2的值相乘,并将结果写入寄存器r3。
在步骤3中,映射有存储(st)指令、乘法(mul)指令和分支(br)指令。即,利用一个字的VLIW并行发出存储(st)指令、乘法(mul)指令和分支(br)指令,并由不同的槽并行地执行。根据存储(st)指令,将作为在步骤1中加载数据data[i]并在步骤2中将数据data[i]与COEFFICIENT相乘的结果而保存在寄存器r3中的数据,存储于寄存器r0所表示的地址。此处,在存储(st)指令中附加的转发无效信息被设为INVFWD=1,成为不进行转发的设定。存储(st)指令所参照的寄存器r0的值根据步骤1和步骤2的加法(add)指令,而进行了二次递增,但是其结果是都没有到达回写(WB)级,而未被写入寄存器文件REGF。因此,当在步骤3中存储(st)指令参照寄存器文件REGF的寄存器r0时,直接参照在步骤1中加载(ld)指令所参照的值。其结果是,将数据data[i]与COEFFICIENT的积写回与存储有数据data[i]的地址相同的地址。
图13是示意地示出VLIW处理器2的上述的动作的时序图。纵向示出循环数,各指令与其依赖关系即变量的参照关系一并示出,同时,示出在寄存器文件REGF中存储的寄存器r0的值以及能够作为寄存器r0的值来转发的值。循环1是重复循环的最开始,与上述步骤1对应,执行加载(ld)指令和加法(add)指令。加载(ld)指令和加法(add)指令都参照x0作为寄存器r0的值。加载(ld)指令的结果在下一个循环2中被乘法(mul)指令参照,乘法(mul)指令的结果在下一个循环3中被存储(st)指令参照。循环3的存储(st)指令与循环1的加载(ld)指令参照相同的寄存器r0,将乘法结果存储于由相同的值x0表示的地址。在循环1中加法(add)指令使作为寄存器r0的值来参照的x0进行递增以输出x1。由于此时的作为加法结果的x1是寄存器读取(RR)级,所以将该加法结果x1写入寄存器文件REGF的寄存器r0是在回写(WB)级的循环4。因此,在至此为止的循环中,加法结果x1作为可转发的值被保存于流水线寄存器P-EX等中。由于循环2的加载(ld)指令和加法(add)指令是重复循环的第二次,需要参照经递增的指数i,所以通过转发来参照该加法结果x1。循环2的加法(add)指令进一步输出加法结果x2,该加法结果x2也作为能够转发的值而被保存于流水线寄存器P-EX等。如以上所述,在保存指数i的寄存器r0的值在回写(WB)级被更新以前,能够开始下一个重复循环,进行软件流水线化。在这个例子中的启动间隔是一个循环。此时,对于存储(st)指令,由于转发被无效化,未反映出递增的结果就参照寄存器文件REGF中保存的值,所以能适当地执行读-修改-写的处理。像这样,能够针对每一个指令指定是禁止转发还是允许转发(转发关闭/启动)。
图14是示出不指定启动/关闭转发的例子的说明图。与图11所示的汇编程序相比较,由多出一个步骤的5个步骤构成。在步骤1和步骤2中追加移动(mv)指令,步骤2的加法(add)指令和步骤3的分支(br)指令移动至步骤4,步骤4的存储(st)指令移动至步骤5。保存指数i的r0利用步骤1的加法(add)指令进行递增,另一方面,步骤3的存储(st)指令必须参照指数i的相同的值,即递增前的值,因此,利用步骤1的移动(mv)指令将该递增前的值复制至寄存器r4,步骤3的存储(st)指令参照该寄存器r4。同样地,在第二次的重复循环中,经递增的保存指数i的r0的值被步骤2的加载(ld)指令参照,并在步骤4中进一步进行递增,另一方面,步骤5的存储(st)指令必须参照指数i的相同的值,即递增前的值。因此,利用步骤2的移动(mv)指令将保存加载(ld)指令所参照过的指数i的r0的值复制至寄存器r5,步骤5的存储(st)指令参照该寄存器r5。
如以上所述,在不对转发的启动/关闭进行指定的图14的程序中,所使用的寄存器是r0~r5和r9这7个寄存器,构成重复循环的步骤数是4个步骤。与之相对,就对转发的启动/关闭进行指定的图11的程序而言,能够使用寄存器是r0~r3和r9这5个寄存器,将使用量减少两个,构成重复循环的步骤数是3个步骤,将步骤数减少1个步骤。像这样,由于能够针对每一个指令指定是禁止转发还是允许转发(转发关闭/启动),所以不必增加在寄存器文件中安装的寄存器数量,就能够谋求通过软件流水线化来提高性能。
图15是更加详细地示出引用图11和图13说明了的VLIW处理器2的上述的动作的说明图。纵向示出执行循环和各循环中的槽1~3的状态,横向示出各流水线级的VLIW指令和处理器控制部CTRL的各流水线寄存器值。VLIW处理器2的流水线级数是任意的,但是举例示出由解码(DE)级、寄存器读取(RR)级、执行(EX)级以及回写(WB)级这4级流水线构成的情况。
在循环1中,将图11的步骤1的加载(ld)指令和加法(add)指令分别发送至槽1和槽2的寄存器读取(RR)级,将图11的步骤2的加载(ld)指令、加法(add)指令和乘法(mul)指令分别发送至槽1、槽2和槽3的解码(DE)级。分别将作为槽1的加载(ld)指令的源操作数(rs)的r0保存于SRCS-DE1,将作为目标操作数的r1保存于DST-DE1。此时,转发无效信息为INVFWD=0,转发被允许(启动),但是由于在DST-RR1~3和DST-EX1~3中没有适宜的转发源,所以转发选择器FSEL-S1的选择控制信号FSELS1=0。作为槽2的加法(add)指令的源操作数rs和rt的r0和r9分别保存于SRCS-DE2和SRCT-DE2,以及作为目标操作数的r0保存于DST-DE2。此时,转发无效信息也为INVFWD=0,转发被允许(启动),但是由于DST-RR1~3和DST-EX1~3中没有适宜的转发源,所以转发选择器FSEL-S2的选择控制信号FSELS2=0。
在循环2中,步骤2的加载(ld)指令、加法(add)指令和乘法(mul)指令分别被发送至槽1、槽2和槽3的寄存器读取(RR)级。作为槽1的加载(ld)指令的源操作数(rs)的r0保存于SRCS-DE1,作为目标操作数的r1保存于DST-DE1。此时,转发无效信息为INVFWD=0,转发被允许(启动),但是由于在DST-RR1~3和DST-EX1~3中没有适宜的转发源,所以转发选择器FSEL-S1的选择控制信号FSELS1=0。作为槽2的加法(add)指令的源操作数rs和rt的r0和r9分别保存于SRCS-DE2和SRCT-DE2,作为目标操作数的r0保存于DST-DE2。此时,转发无效信息为INVFWD=0,转发被允许(启动),DST-RR2=r0与SRCS-DE2=r0一致并被选择作为转发源,使转发选择器FSEL-S2的选择控制信号FSELS2=5。即,在来自循环1的槽2的加法(add)指令的输出还位于寄存器读取(RR)级的阶段,转发至循环2的槽2的加法(add)指令的源操作数(rs)。作为槽3的乘法(mul)指令的源操作数rs和rt的r1和r2分别保存于SRCS-DE3和SRCT-DE3,作为目标操作数的r3保存于DST-DE3。此时,转发无效信息INVFWD=0,转发被允许(启动),DST-RR1=r1与SRCS-DE3=r1一致并被选择作为转发源,使转发选择器FSEL-S3的选择控制信号FSELS3=6。即,在来自循环1的槽2的存储(st)指令的输出还位于寄存器读取(RR)级的阶段,转发至循环2的槽3的乘法(mul)指令的源操作数(rs)。
在循环3中,将步骤3的存储(st)指令和乘法(mul)指令分别发送至槽1和槽2的寄存器读取(RR)级。作为槽1的存储(st)指令的源操作数rs和rt的r0和r3分别保存于SRCS-DE1和SRCT-DE1。此时,由于转发无效信息INVFWD=1,转发被禁止(关闭),所以针对源操作数rs的转发被禁止(关闭),但是针对源操作数rt的转发被允许(启动)。因此,使转发选择器FSEL-S1的选择控制信号FSELS1=0。另一方面,在转发被允许(启动)的源操作数rt侧,DST-RR3=r3与SRCT-DE1=r3相一致,因此,转发选择器FSEL-T1的选择控制信号FSELT1=4。即,在来自循环2的槽3的乘法(mul)指令的输出还位于寄存器读取(RR)级的阶段,转发至循环3的槽1的存储(st)指令的源操作数(rt)。作为槽2的乘法(mul)指令的源操作数rs和rt的r1和r2分别保存于SRCS-DE2和SRCT-DE2,作为目标操作数的r3保存于DST-DE2。此时,转发无效信息INVFWD=0,转发被允许(启动),DST-RR1=r1和DST-EX1=r1均与SRCS-DE3=r1相一致,因此,选择最新更新的DST-RR1=r1作为转发源,使转发选择器FSEL-S2的选择控制信号FSELS2=6。即,在来自循环2的槽2的存储(st)指令的输出还位于寄存器读取(RR)级的阶段,转发至循环3的槽2的乘法(mul)指令的源操作数(rs)。
在循环4中,将步骤4的存储(st)指令发送至槽1的寄存器读取(RR)级。作为槽1的存储(st)指令的源操作数rs和rt的r0和r3分别保存于SRCS-DE1和SRCT-DE1。此时,由于转发无效信息INVFWD=1,转发被禁止(关闭),所以针对源操作数rs的转发被禁止(关闭),但是针对源操作数rt的转发被允许(启动)。因此,使转发选择器FSEL-S1的选择控制信号FSELS1=0。另一方面,针对转发被允许(启动)的源操作数rt侧,DST-RR2=r3与SRCT-DE1=r3相一致,因此使转发选择器FSEL-T1的选择控制信号FSELT1=5。即,在来自循环3的槽2的乘法(mul)指令的输出还位于寄存器读取(RR)级的阶段,转发至循环4的槽1的存储(st)指令的源操作数(rt)。
如根据以上的详细动作例所理解的那样,由于实际上发生转发是在某个指令的处理结果残留于到达回写(WB)级之前的级的情况,所以对转发的启动/关闭进行指定的指令是通过配置于在执行向转发源的寄存器的回写之前的步骤来发挥效果。因此,处理器的流水线级数越多,就越能够谋求通过软件流水线化来提高性能。
(实施方式2)<能够指定转发源的处理器>
在实施方式1中,说明了能够针对每一个指令对禁止转发还是允许转发进行指定的处理器,但是在允许的情况下,除了不指定转发源的单纯的允许以外,还可以构成为能够进行伴随着转发源的指定的允许。即,只要在由处理器执行的指令集中,取代将对禁止转发还是允许转发进行指定的字段(f)包含于指令代码的指令、或者在该指令的基础上,包含如下的指令即可,该指令为将对禁止转发或者允许来自流水线的哪个级的转发进行指定的字段(fsrc)包含于指令代码的指令。通过这样,不仅是单纯地禁止转发或者允许转发,还能够在允许的情况下指定以哪个流水线级作为转发源,能够提高自由度。以下,进行详细地说明。
图16是示出由实施方式2的处理器执行的指令代码的结构例的说明图。指令代码含有操作码字段opcode、转发源指定信息字段fsrc、第一源操作数字段rs、第二源操作数字段rt以及目标操作数字段rd。与图2所示的由实施方式1的处理器执行的指令代码的结构例的不同点是,取代转发无效信息字段f而含有转发源指定信息字段fsrc。针对其他的操作码和操作数的字段,由于与引用图2来说明了的实施方式1的说明同样,所以省略说明。
图17是针对图16的指令代码中的转发源指定信息字段的说明图。转发源指定信息字段fsrc例如由2位构成,00是将通常的转发设置为有效的指定,01是将来自执行(EX)级的转发设置为无效的指定,10是将来自执行(EX)级以及回写(WB)级的转发设置为无效的指定,11是设置为输入禁止。fsrc=00的将通常的转发设置为有效的指定与图2中的利用f=0(INVFWD=0)来允许转发(转发启动)的指定是同等的。fsrc=10的将来自执行(EX)级以及回写(WB)级的转发设置为无效的指定与图2中的利用f=1(INVFWD=1)来禁止转发(转发关闭)的指定是同等的。在处理器的流水线级数更多的情况下,能够增加转发源指定信息字段fsrc。通过这样,能够更加精细地对来自各流水线级的转发的有效/无效进行指定。
在指令集中能够分别包含任意数量的如下指令,即,如图2所示的具有1位(bit)的转发无效信息字段f的指令、如图17所示的具有2位或者3位以上的转发源指定信息字段fsrc的指令和不具有任一者的指令。
能够执行在这样的指令集中包含的指令的处理器的结构与图1所示的处理器1或者图5所示的VLIW处理器2是同样的。此时,转发选择器FSEL、FSEL-S1~S3和FSEL-T1~T3的结构也与图3和图8所示的结构是同样的。处理器控制电路CTRL的结构除了流水线寄存器FWD-DE和FW-DE1~3取代保存转发源指定信息字段fsrc的流水线寄存器以外,与图1和图7所示的结构是同样的。转发控制电路FWDCNT、FWDCNTS1~S3和FWDCNTT1~T3的功能变更为基于转发源指定信息字段fsrc,来适当地生成对转发选择器FSEL、FSEL-S1~S3和FSEL-T1~T3进行控制的选择控制信号FSELS、FSELS1~3、FSELT和FSELT1~3。
图18是示出在实施方式2的处理器中搭载的转发控制电路FWDCNTS1~S3的功能的一例的流程图。转发控制电路FWDCNTT1~T3也同样。当转发源指定信息fsrc==10时(S50),即,转发控制电路FWDCNTS1~S3当将来自执行(EX)级以及回写(WB)级的转发设置为无效时,转发控制电路FWDCNTS1~S3使选择控制信号FSELS=0(S60)。通过这样,转发选择器FSEL-S1~S3被控制为,选择从寄存器文件REGF读出的数据来写入流水线寄存器P-RR-S1~S3,不进行转发。当转发源指定信息fsrc==01时(S51),即,当将来自执行(EX)级的转发设置为无效时,由于只要判断可否进行来自回写(WB)级的转发即可,所以向后述的步骤S55分支。当转发源指定信息fsrc既非10也非01时,执行与图9所示的同样的转发控制。将源操作数代码RS与在流水线寄存器DST-RR1~3中保存的DST-RR1~3分别依次进行比较(S52~S54),再与在DST-EX1~3中保存的DST-EX1~3分别依次进行比较(S55~S57),从选择控制信号FSELS输出与相一致的流水线寄存器对应的值(S62~S67)。在与任一者都不相当的情况下,输出FSELS=0(S68)。该功能由于与图9所示的步骤S31~S36以及S41~S47的功能是同样的,所以省略说明。
如以上所述,不仅是单纯地禁止转发或者允许转发,还能够在允许的情况下指定以哪个流水线级作为转发源,能够提高自由度。将能够执行这样的指令的处理器设置为VLIW处理器,由此不必增加在寄存器文件中安装的寄存器数量,就能够谋求通过软件流水线化来提高性能。另外,能够使在VLIW处理器中并行发出的多个指令混合存在以下的指令:如图2所示的能够仅单纯地对禁止转发还是允许转发进行指定的指令;与如图16所示的在允许的情况下还能够指定以哪个流水线级作为转发源的指令。能够将能配置这些指令的槽设置为任意的,另一方面,也能够固定于一部分槽。前者使得自由度提高,后者使得电路规模减小。另外,与在实施方式1中的说明同样地,能够允许来自其他任意的槽的转发,另一方面,也能够仅限于来自一部分槽的转发。前者使得自由度变高,后者使得电路规模降低。
(实施方式3)<程序代码转换(最优化)装置>
转发在将先前执行的指令的结果写入由该指令指定的目标寄存器的流水线级之前执行参照该目标寄存器的指令时,发挥功能。此处,将先前的指令称为寄存器保存指令,将之后的指令称为寄存器参照指令。在实施方式1以及2中示出了,将寄存器参照指令设置为能够仅对禁止转发还是允许转发进行指定的指令,或者,在允许的情况下还能够指定以哪个流水线级作为转发源的指令,由此能够谋求通过软件流水线化来提高性能。在本实施方式3中,对用于更加积极地利用该技术的程序代码转换(最优化)装置进行说明。程序代码转换(最优化)装置嵌入有由编译器、汇编器和连接器(linker)组成的程序开发装置的一部分功能。
图19是示出本实施方式3的程序开发装置的功能的一例的流程图。程序开发装置的功能包括S1~S9的各步骤。在步骤1(S1)中,对于输入的用高级语言描述的程序进行该描述的词法分析,并转换为中间表示级的程序。在步骤2(S2)中,对于该中间表示级的程序进行规定的最优化。例如,在目标处理器为VLIW的情况下,在步骤2(S2)中,执行如下的最优化,该最优化是指将中间表示级的程序中含有的程序代码分配给构成VLIW的多个槽中的适当的槽来将执行步骤数最小化。这些功能与安装于公知的编译器中的功能是同样的。在通常的程序开发装置中,在步骤2(S2)之后前进到目标指令转换步骤(S9),将被最优化了的中间表示级的程序代码转换为机器语言的指令代码。
在本实施方式3的程序开发装置中,追加步骤3(S3),利用转发无效信息来进行最优化。步骤3(S3)是由例如步骤4(S4)~步骤8(S8)构成的。
首先,在步骤4(S4)中搜索寄存器移动指令。此处,寄存器移动指令是指将由源操作数指定的寄存器中存储的值写入由目标操作数指定的寄存器的指令。在汇编语言中由通常移动(mv)指令来表示。
接着,在步骤5(S5)中,将在S4中提取出的寄存器移动指令设为M,将该源操作数以及目标操作数分别设为RSM以及RDM,搜索定义RSM的指令并将其设为A。指令A是在指令M之后的步骤或者与M相同的步骤中被执行的寄存器保存指令。
接着,在步骤6(S6)中,针对使用RDM的全部后续指令X在接下来的步骤7(S7)进行处理。指令X是在指令M之后的步骤中执行的寄存器参照指令。
在步骤7(S7)中,针对指令X,判断是否能够进行从指令A向A的延迟DA以下的步骤移动。此处,指令A是定义RSM的寄存器保存指令,延迟DA是指从指令A的某个步骤到指令A的执行结果更换为RSM为止的期间(步骤数)。在能够将指令X从指令A向A的延迟DA以下的步骤移动的情况下,设为指令X的转发无效信息INVFWD=1(转发关闭),将源操作数从RDM变更为RSM,并向从指令A起的延迟DA以下的步骤移动。在从最初就将指令X配置于从指令A起的A的延迟DA以下的步骤的情况下也是同样的。
在针对在步骤6(S6)中提取的全部的指令X进行了步骤7(S7)的处理之后,在步骤8(S8)中,在未剩余有使用RDM的指令的情况下,删除指令M。
通过这样,在使在实施方式1以及2中说明了的处理器执行的程序中,能够进行用于谋求通过软件流水线化来提高性能的最优化。即,能够通过分析程序来判断用于软件流水线化的转发启动/关闭指定,并自动地赋予适当的转发无效信息。
程序代码转换(最优化)装置除了嵌入有由编译器、汇编器和链接器组成的程序开发装置的一部分的功能以外,也可以作为追加至现有的程序开发装置中的软件而被提供。
图20是示出基于利用程序代码转换(最优化)装置进行转换前的程序而实现的动作的示意性的时间图。相当于在进行了图19所示的流程图中的步骤2(S2)的最优化之后,即,在进行利用转发无效信息的最优化之前的中间表示级的程序。纵向示出处理器的执行循环,用椭圆表示被执行的指令,用长方形表示被参照或者保存有执行结果的寄存器。虚线示出一个循环的间隔,作为指令A的add r0,r1,r2是参照源寄存器r0和r1来进行加法运算,并将加法结果保存于目标寄存器r2的加法指令。圈出作为指令A的add r0,r1,r2的椭圆表示读寄存器(RR)循环,示意地图示了在两个循环后的回写(WB)级进行向目标寄存器r2的写入。将从指令A到该目标寄存器的回写的循环数设置为延迟DA。在这个例子中DA=2。作为指令M的mv r2,r3是将指令A想要改写内容的r2复制到另一个寄存器r3的移动(mv)指令。通过将作为指令M的mv r2,r3配置于作为指令A的add r0,r1,r2之前或者相同的循环,来将被指令A改写之前的r2的值保存至寄存器r3。作为后面的级的指令X的add r3,r9,r4是参照被保存的r3的加法指令。
图21是示出基于利用程序代码转换(最优化)装置进行转换后的程序而实现的动作的示意性的时间图。程序代码转换(最优化)装置根据图19所示的流程图,在图20所示的中间表示级的程序中搜索寄存器移动指令M(S4)。提取图20所示的移动指令(mv r2,r3)来作为指令M。此时,源寄存器RSM=r2,目标寄存器RDM=r3。接着,搜索对源寄存器RSM=r2进行定义的指令A。加法指令add r0,r1,r2与此相当。在步骤6(S6)中搜索使用RDM=r3的全部后续指令X。在图20和21中加法指令add r3,r9,r4与此相当。在步骤7(S7)中进行移动指令X的操作。即,将作为指令X的加法指令add r3,r9,r4移动至指令A的延迟DA以下的循环,即,如图21所示移动至例如指令A的一个循环后的循环。与此伴随地,使该指令X的转发无效信息INVFWD=1来关闭(禁止)转发,将指令X的源操作数从RDM=r3变更为RSM=r2。通过这样,由于转发被关闭(禁止),所以指令X(add r2,r9,r4,1)不仅能够通过转发来参照作为紧前面的指令A(add r0,r1,r2)的执行结果的r2,还能够参照被指令A(add r0,r1,r2)改写以前的r2的内容。在图21中省略图示,但是由于当针对同样的全部指令X进行步骤7(S7)的移动时,未剩余参照r3的指令,所以删除不需要的寄存器移动指令M(mv r2,r3)(S8)。
当将图20与图21进行比较时可知,通过将指令X配置于能够进行来自指令A的转发的循环而具有缩短整体的循环数的效果,并且由于删除寄存器移动指令M,所以能够减少实际上执行的指令数,进一步地,也能够减少使用的寄存器数量。
以上,基于实施方式具体地说明了由本发明人完成的发明,但是本发明并不限定于此,在不脱离该主旨的范围内当然可以进行各种各样的变更。
例如,处理器1或者VLIW处理器2可以作为与高速缓冲存储器、公共总线、与公共总线连接的非易失性存储器、RAM、中断控制电路或直接存储控制器、外围模块等连接的高功能的处理器来安装,还可以作为由多个处理器1和VLIW处理器2构成的多处理器来安装。
Claims (18)
1.一种处理器,其特征在于,
能够针对每一个指令对是禁止转发还是允许转发进行指定,在执行转发被禁止的指令时参照寄存器文件,在执行转发被允许的指令时参照向所述寄存器文件写入数据的流水线的中途的级。
2.如权利要求1所述的处理器,其特征在于,
能够由所述处理器执行的指令集包括将对是禁止转发还是允许转发进行指定的字段包含于指令代码的指令。
3.如权利要求2所述的处理器,其特征在于,
并行地发出由在所述指令集中包括的多个指令的指令代码构成的指令字,并行地执行所述多个指令,所述指令字包括一个以上的、将对是禁止转发还是允许转发进行指定的字段包含于各个指令代码的所述指令。
4.如权利要求1所述的处理器,其特征在于,
能够由所述处理器执行的指令集包括将对是禁止转发还是允许来自所述流水线的哪个级的转发进行指定的字段包含于指令代码的指令。
5.如权利要求4所述的处理器,其特征在于,
并行地发出由在所述指令集中包括的多个指令的指令代码构成的指令字,并行地执行所述多个指令,所述指令字包括一个以上的、将对是禁止转发还是允许来自所述流水线的哪个级的转发进行指定的字段包含于各个指令代码的所述指令。
6.一种处理器,其通过流水线方式执行包含在指令集中且按照程序被依次发出的指令,所述处理器的特征在于,
具有:取出电路,其取出所述指令;寄存器文件,其包括多个寄存器;转发选择器;处理执行电路;以及处理器控制电路,其基于所述取出的指令来控制所述处理执行电路,
所述指令集包括寄存器保存指令和寄存器参照指令,
所述寄存器保存指令是如下的指令,即,将使所述处理执行电路执行由该指令指定的处理的结果,保存在所述寄存器文件所包含的所述多个寄存器中的由该指令的目标操作数指定的寄存器,
所述寄存器参照指令是如下的指令,即,参照在所述寄存器文件所包含的所述多个寄存器中的由该指令的源操作数指定的寄存器中保存的数据,使所述处理执行电路执行由该指令指定的处理,
一部分或者全部的所述寄存器参照指令将能够对是禁止转发还是允许转发进行指定的字段包含于指令代码,
所述处理器控制电路具有:指令解码器,其对所述取出的指令进行解码;多个流水线寄存器,其保持基于所述指令解码器的解码结果;以及转发控制电路,
所述指令解码器对所述取出的指令进行解码,并输出所述指令的执行代码、当所述指令是所述寄存器保存指令时指定目标寄存器的目标操作数代码、当所述指令是所述寄存器参照指令时指定源寄存器的源操作数代码、以及当所述指令是将能够对是禁止转发还是允许转发进行指定的字段包含于指令代码的寄存器参照指令时该字段的解码结果,
所述多个流水线寄存器针对各个流水线级保持所述目标操作数代码,
所述转发控制电路基于能够对是禁止转发还是允许转发进行指定的字段的解码结果,
在转发被禁止时,通过所述转发选择器从所述寄存器文件读取出由所述源操作数代码指定的寄存器的值,并供给至所述处理执行电路,
在转发被允许时,对在所述多个流水线寄存器中针对各个流水线级保持的所述目标操作数代码与所述源操作数代码进行比较,通过所述转发选择器执行从比较结果一致的流水线级向所述处理执行电路的转发。
7.如权利要求6所述的处理器,其特征在于,
所述处理器具有N个所述处理执行电路,能够利用对应的处理执行电路并行地执行将在所述指令集中包括的所述N个的指令包含于一个字的指令字,其中N是任意的自然数,
所述N个处理执行电路中的M个处理执行电路分别连接有与各自的输入数对应的数量的转发选择器,其中M是N以下的任意的自然数,
所述指令解码器并行地对所述取出的在所述指令字中包括的所述N个的指令进行解码,输出与所述N个处理执行电路中的每一个对应的解码结果,在与所述M个处理执行电路对应的解码结果中包括被指定了是禁止转发还是允许转发的字段的解码结果,
所述处理器控制电路具有与所述M个处理执行电路对应的M个转发控制电路,
所述M个转发控制电路分别基于被指定是禁止转发还是允许转发的字段的解码结果,执行针对对应的处理执行电路的转发控制。
8.如权利要求7所述的处理器,其特征在于,
所述处理器控制电路在所述多个流水线寄存器中,针对各个流水线级保持与所述N个处理执行电路中的每一个对应的所述目标操作数代码,
所述处理器控制电路具有与所述M个处理执行电路对应的M个转发控制电路,
所述M个转发控制电路分别基于被指定是禁止转发还是允许转发的字段的解码结果,针对与对应的处理执行电路连接的一个或者多个转发选择器,
在转发被禁止时,从所述寄存器文件读取出由分别与所述一个或者多个转发选择器对应的所述源操作数代码指定的寄存器的值,并供给至该处理执行电路,
在转发被允许时,对在所述多个流水线寄存器中针对各个流水线级保持的、且与所述N个处理执行电路中的每一个对应的所述目标操作数代码、和与所述一个或者多个转发选择器对应的所述源操作数代码分别进行比较,通过该转发选择器执行从比较结果一致的流水线级向所述处理执行电路的转发。
9.如权利要求6所述的处理器,其特征在于,
取代所述一部分或者全部的寄存器参照指令或者在所述一部分或者全部的寄存器参照指令的基础上,一部分或者全部的所述寄存器参照指令将能够对是禁止转发还是表示允许来自所述流水线的哪个级的转发的转发源进行指定的字段包含于指令代码,
当所述取出的指令是将能够对是否禁止转发或所述转发源进行指定的字段包含于指令代码的寄存器参照指令时,所述指令解码器还输出该字段的解码结果,
所述转发控制电路基于该解码结果,
在转发被禁止时,通过所述转发选择器从所述寄存器文件读取出由所述源操作数代码指定的寄存器的值,并供给至所述处理执行电路,
在所述转发源被指定时,对在所述多个流水线寄存器的被指定的流水线级保持的所述目标操作数代码与所述源操作数代码进行比较,通过所述转发选择器执行从比较结果一致的流水线寄存器向所述处理执行电路的转发。
10.如权利要求9所述的处理器,其特征在于,
所述处理器具有N个所述处理执行电路,能够利用对应的处理执行电路并行地执行将在所述指令集中包括的所述N个的指令包含于一个字的指令字,其中N是任意的自然数,
所述N个处理执行电路中的M个处理执行电路分别连接有与各自的输入数对应的数量的转发选择器,其中M是N以下的任意的自然数,
所述指令解码器并行地对所述取出的在所述指令字中包括的所述N个的指令进行解码,输出与所述N个处理执行电路中的每一个对应的解码结果,在与所述M个处理执行电路对应的解码结果中,包括被指定了是禁止转发还是允许转发的字段的解码结果、能够对是否禁止转发或所述转发源进行指定的字段的解码结果中的一方或者双方,
所述处理器控制电路具有与所述M个处理执行电路对应的M个转发控制电路,
所述M个转发控制电路分别基于所述解码结果,执行针对对应的处理执行电路的转发控制。
11.如权利要求10所述的处理器,其特征在于,
所述处理器控制电路在所述多个流水线寄存器中,针对各个流水线级保持与所述N个处理执行电路中的每一个对应的所述目标操作数代码,
所述处理器控制电路具有与所述M个处理执行电路对应的M个转发控制电路,
所述M个转发控制电路分别基于对是否禁止转发、是否允许转发或所述转发源进行指定的字段的解码结果,针对与对应的处理执行电路连接的一个或者多个转发选择器,
在转发被禁止时,从所述寄存器文件读取出由分别与所述一个或者多个转发选择器对应的所述源操作数代码指定的寄存器的值,并供给至该处理执行电路,
在转发被允许时,对在所述多个流水线寄存器中针对各个流水线级保持的、且与所述N个处理执行电路中的每一个对应的所述目标操作数代码、和与所述一个或者多个转发选择器对应的所述源操作数代码分别进行比较,通过该转发选择器执行从比较结果一致的流水线寄存器向所述处理执行电路的转发,
在所述转发源被指定时,对特定目标操作数代码和与所述转发选择器对应的所述源操作数代码分别进行比较,通过该转发选择器执行从比较结果一致的流水线寄存器向所述处理执行电路的转发,所述特定目标操作数代码是指,与所述N个处理执行电路对应的、针对各个流水线级保存的目标操作数代码中,被保持于所述转发源被指定的流水线级的流水线寄存器中的目标操作数代码。
12.如权利要求6所述的处理器,其特征在于,
形成于单一的半导体基板上。
13.一种程序代码转换装置,其对由在指令集中包含的多个指令构成并由处理器执行的程序的程序代码进行转换,所述程序代码转换装置的特征在于,
所述处理器包括由多个寄存器构成的寄存器文件和处理执行电路,并由包括参照所述寄存器文件的寄存器读取步骤和将值写入所述寄存器文件的回写步骤在内的流水线构成,
所述指令集包含寄存器参照指令、寄存器保存指令和寄存器移动指令,
所述寄存器参照指令是如下的指令,即,用于在所述寄存器读取步骤中参照在所述寄存器文件所包含的多个寄存器中的由该指令的源操作数指定的寄存器中保存的值,使所述处理器执行由该指令规定的处理,
所述寄存器保存指令是如下的指令,即,用于在比所述寄存器读取步骤起仅延迟了由所述流水线的级数规定的延迟量的所述回写步骤中,将使所述处理器执行了由该指令规定的处理的结果,保存在所述寄存器文件所包含的多个寄存器中的由该指令的目标操作数指定的寄存器,
所述寄存器移动指令是如下的指令,即,用于在所述寄存器读取步骤中读取出在所述寄存器文件所包含的多个寄存器中的由该指令的源操作数指定的寄存器中保存的值,并在所述回写步骤中将该值写入由该指令的目标操作数指定的寄存器,
全部或者一部分所述寄存器参照指令还将对是禁止转发还是允许转发进行指定的转发无效标志包含于操作数,在根据所述转发无效标志而转发被禁止时,通过所述处理器在所述寄存器读取步骤中参照所述寄存器文件;在根据所述转发无效标志而转发被允许时,所述处理器执行所述寄存器保存指令或者所述寄存器移动指令,由此从将数据写入由所述目标操作数指定的寄存器流水线的中途的级,参照在由所述源操作数指定的寄存器中保存的值;
所述程序代码转换装置从由所述指令集所包含的多个指令构成的所述程序代码中搜索寄存器移动指令,
提取利用目标操作数来指定由在所述搜索中发现的寄存器移动指令的源操作数指定的寄存器的寄存器保存指令,
针对利用源操作数来指定由在所述搜索中发现的所述寄存器移动指令的目标操作数指定的寄存器的后续的寄存器参照指令,在从所述寄存器保存指令起的所述延迟量以内的执行步骤中被执行的情况下,替换为利用转发无效标志进行了禁止转发的指定的寄存器参照指令。
14.如权利要求13所述的程序代码转换装置,其特征在于,
针对利用源操作数来指定由在所述搜索中发现的所述寄存器移动指令的目标操作数指定的寄存器的后续的寄存器参照指令,在从所述寄存器保存指令起延迟了所述延迟量以上的执行步骤中被执行的情况下,判断是否能够移动至在所述延迟量以内执行的执行步骤,在能够移动的情况下,在移动了之后,替换为利用转发无效标志进行了允许转发的指定的寄存器参照指令。
15.如权利要求14所述的程序代码转换装置,其特征在于,
针对利用源操作数来指定由在所述搜索中发现的所述寄存器移动指令的目标操作数指定的寄存器的后续的全部的寄存器参照指令,在从所述寄存器保存指令起延迟了所述延迟量以上的执行步骤中被执行的情况下,判断是否能够移动至在所述延迟量以内执行的执行步骤,在能够移动的情况下,在移动了之后,替换为利用转发无效标志进行了允许禁止转发的指定的寄存器参照指令,
在所述全部的寄存器参照指令移动至在所述延迟量以内执行的执行步骤时,从所述程序中删除在所述搜索中发现的所述寄存器移动指令。
16.如权利要求13所述的程序代码转换装置,其特征在于,
所述处理器具有N个所述处理执行电路,能够利用对应的处理执行电路并行地执行将所述指令集中包括的所述N个的指令包含于一个字的指令字,其中N是任意的自然数。
17.如权利要求13所述的程序代码转换装置,其特征在于,
根据用高级语言描述的程序,生成由所述指令集中包括的多个指令构成的所述程序代码。
18.一种软件,其特征在于,
通过由计算机执行来发挥权利要求13所述的程序代码转换装置的功能。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015054448A JP6422381B2 (ja) | 2015-03-18 | 2015-03-18 | プロセッサ、プログラムコード変換装置及びソフトウェア |
JP2015-054448 | 2015-03-18 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105988775A true CN105988775A (zh) | 2016-10-05 |
Family
ID=56924736
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610151495.7A Pending CN105988775A (zh) | 2015-03-18 | 2016-03-16 | 处理器、程序代码转换装置以及软件 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20160274916A1 (zh) |
JP (1) | JP6422381B2 (zh) |
CN (1) | CN105988775A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729027A (zh) * | 2017-10-12 | 2018-02-23 | 惠州Tcl移动通信有限公司 | 一种基于文件安装虚拟处理的方法、移动终端及存储介质 |
CN111752611A (zh) * | 2019-03-27 | 2020-10-09 | 联发科技股份有限公司 | 数据转发的方法及装置 |
CN114116229A (zh) * | 2021-12-01 | 2022-03-01 | 北京奕斯伟计算技术有限公司 | 调节指令流水线的方法及装置、存储器和存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732337A (zh) * | 2020-12-30 | 2021-04-30 | 深圳市力为自动化有限公司 | 界面显示方法及绕线设备、计算机存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020116599A1 (en) * | 1996-03-18 | 2002-08-22 | Masahiro Kainaga | Data processing apparatus |
US6615333B1 (en) * | 1999-05-06 | 2003-09-02 | Koninklijke Philips Electronics N.V. | Data processing device, method of executing a program and method of compiling |
CN1900904A (zh) * | 2005-07-19 | 2007-01-24 | 国际商业机器公司 | 用于改善按次序的处理器的性能的方法和系统 |
CN101194225A (zh) * | 2005-04-14 | 2008-06-04 | 高通股份有限公司 | 其中条件指令无条件提供输出的系统及方法 |
CN101361039A (zh) * | 2006-01-20 | 2009-02-04 | 松下电器产业株式会社 | 处理器 |
CN101676865A (zh) * | 2008-09-19 | 2010-03-24 | 国际商业机器公司 | 处理器和计算机系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2933026B2 (ja) * | 1996-08-30 | 1999-08-09 | 日本電気株式会社 | 複数命令並列発行/実行管理装置 |
JP3737573B2 (ja) * | 1996-09-09 | 2006-01-18 | 株式会社東芝 | Vliwプロセッサ |
JP3449186B2 (ja) * | 1997-08-19 | 2003-09-22 | 富士通株式会社 | パイプラインバイパス機能を有するデータ処理装置 |
-
2015
- 2015-03-18 JP JP2015054448A patent/JP6422381B2/ja active Active
-
2016
- 2016-02-29 US US15/056,952 patent/US20160274916A1/en not_active Abandoned
- 2016-03-16 CN CN201610151495.7A patent/CN105988775A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020116599A1 (en) * | 1996-03-18 | 2002-08-22 | Masahiro Kainaga | Data processing apparatus |
US6615333B1 (en) * | 1999-05-06 | 2003-09-02 | Koninklijke Philips Electronics N.V. | Data processing device, method of executing a program and method of compiling |
CN101194225A (zh) * | 2005-04-14 | 2008-06-04 | 高通股份有限公司 | 其中条件指令无条件提供输出的系统及方法 |
CN1900904A (zh) * | 2005-07-19 | 2007-01-24 | 国际商业机器公司 | 用于改善按次序的处理器的性能的方法和系统 |
CN101361039A (zh) * | 2006-01-20 | 2009-02-04 | 松下电器产业株式会社 | 处理器 |
CN101676865A (zh) * | 2008-09-19 | 2010-03-24 | 国际商业机器公司 | 处理器和计算机系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107729027A (zh) * | 2017-10-12 | 2018-02-23 | 惠州Tcl移动通信有限公司 | 一种基于文件安装虚拟处理的方法、移动终端及存储介质 |
CN107729027B (zh) * | 2017-10-12 | 2021-11-23 | 惠州Tcl移动通信有限公司 | 一种基于文件安装虚拟处理的方法、移动终端及存储介质 |
CN111752611A (zh) * | 2019-03-27 | 2020-10-09 | 联发科技股份有限公司 | 数据转发的方法及装置 |
CN114116229A (zh) * | 2021-12-01 | 2022-03-01 | 北京奕斯伟计算技术有限公司 | 调节指令流水线的方法及装置、存储器和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP2016173793A (ja) | 2016-09-29 |
US20160274916A1 (en) | 2016-09-22 |
JP6422381B2 (ja) | 2018-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100497078B1 (ko) | 프로그램 제품 및 데이터 처리장치 | |
Hauck et al. | The Chimaera reconfigurable functional unit | |
CN104424129B (zh) | 基于指令读缓冲的缓存系统和方法 | |
US5450556A (en) | VLIW processor which uses path information generated by a branch control unit to inhibit operations which are not on a correct path | |
US5333280A (en) | Parallel pipelined instruction processing system for very long instruction word | |
CN204945992U (zh) | 一种处理器 | |
CN114003547A (zh) | 可重构并行处理 | |
EP2372530A1 (en) | Data processing method and device | |
KR100346515B1 (ko) | 수퍼파이프라인된수퍼스칼라프로세서를위한임시파이프라인레지스터파일 | |
CN105988775A (zh) | 处理器、程序代码转换装置以及软件 | |
US4377846A (en) | Arithmetic unit for generating constants in an electronic computer of the microprogram-controlled type | |
CN102782672A (zh) | 用于高效嵌入式同类多核平台的基于瓦片的处理器架构模型 | |
JP3469941B2 (ja) | プログラム実行制御装置および方法 | |
US20230061711A1 (en) | Inter-layer communication techniques for memory processing unit architectures | |
US5307300A (en) | High speed processing unit | |
US5274777A (en) | Digital data processor executing a conditional instruction within a single machine cycle | |
CN101727435B (zh) | 一种超长指令字处理器 | |
US6658561B1 (en) | Hardware device for executing programmable instructions based upon micro-instructions | |
CN110914801B (zh) | 在数据处理设备中的向量交叉 | |
CN101361039A (zh) | 处理器 | |
JP5145659B2 (ja) | ベクトルリネーミング方式およびベクトル型計算機 | |
JP4444305B2 (ja) | 半導体装置 | |
Döbrich et al. | Exploring online synthesis for CGRAs with specialized operator sets | |
US10990394B2 (en) | Systems and methods for mixed instruction multiple data (xIMD) computing | |
JPH03269728A (ja) | パイプライン計算機における命令実行制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20161005 |