CN1608247A - 自动指令集体系结构的产生 - Google Patents
自动指令集体系结构的产生 Download PDFInfo
- Publication number
- CN1608247A CN1608247A CN02820604.5A CN02820604A CN1608247A CN 1608247 A CN1608247 A CN 1608247A CN 02820604 A CN02820604 A CN 02820604A CN 1608247 A CN1608247 A CN 1608247A
- Authority
- CN
- China
- Prior art keywords
- instruction
- configuration
- instruction set
- set architecture
- hardware spending
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
一个自动建立指令集体系结构(ISA)的数字计算机系统,它潜在的利用了VLIW指令、矢量操作、混合操作以及专用操作,从而在保持硬件开销低于设计者预设极限的条件下提高一组应用的性能,或者在给定所需的性能水平的条件下将硬件开销最小化。
Description
技术领域
本发明涉及数字计算机系统。更确切的,本发明涉及数字计算机系统中程序员可视特征的自动确定。
背景技术
一个指令集体系结构(ISA)描述了对程序员可视的处理器的指令、操作以及寄存器文件(Hennessy等人,
computer architecture,A Quantitative Approach,第二版,第二章)。一个用于一般目的的处理器的ISA会被设计成对很多应用提供一个合理水平的性能。与此相反,对于一个嵌入式或者专用处理器,其ISA就必须被设计成对一组特殊的应用提供尽可能多的性能改善,或者满足一个最小性能要求。例如,一个用来对视频数据流进行解码的应用的性能就必须满足实时解码视频这样的最低要求。所以,用于执行视频数据流解码应用的处理器的ISA就必须提供应用所需要的最低水平的性能需求,而这是不用考虑该ISA对其它应用的性能水平的。
同时,我们希望能够将实施ISA所需的处理器硬件开销达到最小。所以,ISA设计者需要在所需的应用性能与实施ISA的处理器硬件开销之间做出权衡。
在设计ISA时,设计者可以采用多种技术,它们中的每一个在潜在的性能改善和硬件开销方面都具有不同的折衷。这些技术包括超长指令字(VLIW)(Hennessy等人,
computer architecture,A Quantitative Approach,第二版,4.4节,284-285页)、矢量操作(Hennessy等人,
computer architecture,A Quantitative Approach,第二版,附录B)、混合操作以及专用。
A.
VLIW
VLIW技术允许单个指令包括多个独立操作。一个VLIW指令被分成多个时隙,每个时隙可以包括一个操作。要描述一个VLIW指令只需确定每个时隙中可能发生的指令即可。例如,一个两时隙VLIW指令允许在第一时隙内是一个加载操作,而在第二时隙内是一个乘法操作。
如果ISA被设计来使用VLIW,一个源程序编译器(例如,C或C++编译器)可以采用软件流水线以及指令调度技术来把多个操作打包到单个VLIW指令中,这将有可能提高性能(Lam,“软件流水线:一个VLIW机器的有效调度技术(Software Pipelining:An EffectiveScheduling Technique for VLIW Machines)”,
Proceedings of the SIGPLAN 1988 Conference on Programming Language Design and Implementation;Krishnamurthy,“对流水线处理器调度的论文回顾(A Brief Survey of Papers on Scheduling for Pipelined Processors)”,SIGPLAN Notices,25卷,#7,1990年7月)。然而,设计一个使用VLIW的ISA与不使用VLIW相比会增加硬件开销。由于一个VLIW指令会并行发出和执行多个独立的操作,所以硬件必须包括多个并行的解码器。同样,如果同一个VLIW指令中的多个操作访问同一个寄存器文件,那么该寄存器文件就必须有足够的端口来满足这些访问。此外,如果VLIW指令允许在该指令中出现一个操作多次出现,那么实施该操作的硬件就必须被复制以使得该操作的这些情形可以并行执行。
所以,每个VLIW指令中的时隙数、满足每个VLIW指令操作所需的寄存器文件端口数、以及每个VLIW指令所允许的操作组合会影响到指令所带来的性能改善以及实施指令所需的逻辑的硬件开销。例如,一个允许在两个时隙中都出现一个整数加法操作的两时隙VLIW指令就需要整数寄存器文件具有至少四个读取端口(每个加法需要两个整数寄存器作为输入),至少两个写入端口(每个加法产生一个写入到整数寄存器中的结果),以及需要加法逻辑的两个复本。和一个非VLIW指令相比,这样加上的解码逻辑、寄存器文件端口以及加法逻辑就会增加很多硬件开销,然而,如果能够并行执行两个加法指令从而提高应用的性能,那么这样的硬件开销就是合理的。
为了简化包括VLIW指令的ISA设计,现有技术的PICO系统(Aditya等人,“VLIW和EPIC处理器的自动体系综合(AutomaticArchitectural Synthesis of VLIW and EPIC Processors)”,
Proc. International Symposium on System Synthesis,ISSS’99,San Jose,CA,1999年11月,107-113页)会通过搜索VLIW处理器空间并评价每个ISA的开销和性能来自动建立一个VLIW ISA。在PICO所搜索的设计空间中,一个VLIW处理器的特征在于寄存器文件的大小和类型、指令中的操作以及允许的操作组合。通过使用搜索的结果,设计者就可以选择一个满足性能和硬件开销要求的VLIW ISA。
B.
矢量操作
矢量操作技术通过建立能够一次作用在多于一个数据元素上的矢量操作来增加数据的吞吐量(矢量操作也被称为SIMD操作)。矢量操作的特征在于它作用在每个数据元素上的操作,以及它所并行操作的数据元素的个数,也就是矢量长度。
例如,一个宽度为四的矢量整数加法操作会将各自包含四个整数的两个输入矢量相加,然后产生一个包含四个整数的结果矢量。如果ISA被设计来使用矢量操作,那么源程序编译器就可能会使用自动并行处理以及矢量化技术(Wolfe,
优化超级计算机的超级编译器 (Optimizing Supercompilers for Supercomputers),MIT出版社,Cambridge,MA,1989;Zima、Hans等人,
用于并行和矢量机器的 超级编译器(Supercompilers for Parallel and Vector Machines),ACM出版社/Addison-Wesley,Reading,MA 1991)来提高一个或者多个应用循环的性能。然而,就如同VLIW,使用矢量操作会增加硬件开销,这是因为矢量操作需要能够并行作用在多个数据元素上的逻辑。同样,矢量操作需要能够容纳数据元素矢量的矢量寄存器文件。
例如,一个宽度为四的矢量整数加法操作需要能够并行将四个整数相加的逻辑,以及需要一个能够容纳包含四个整数值的矢量的矢量寄存器文件。所以,设计一个使用矢量操作的ISA就需要设计者确定一组矢量操作、矢量操作所作用的数据元素数、以及矢量操作所访问的矢量寄存器文件中的寄存器数,从而在应用性能和硬件开销之间做出权衡。为了简化使用了矢量操作的ISA的设计,技术上就需要一种自动的ISA产生系统,它产生的矢量操作能够在权衡硬件开销的同时提高应用性能。
C.
混合操作
混合操作(fused operation)产生的操作包含多个简单操作。混合操作技术与混合乘法-加法(Hennessy等人,
computer architecture, A Quantitative Approach,第二版,A.7部分)的本质类似,但与混合乘法-加法不同,混合操作的语义与简单操作语义的组合相同。
用混合操作来代替简单操作可以减小代码的规模以及发出指令的带宽,还可以减小对寄存器文件端口的要求。同时,混合操作的等待时间可以比简单操作的组合的等待时间要小。混合操作的一个例子就是Tensilica的Xtensa体系结构(
Xtensa Instruction Set Architecture Reference Manual,第5章,170页)中的移位1加法(add-with-shift-by-1)操作。移位1加法会将一个值左移一位,然后与另外一个值相加,所以它是一个由左移操作和一个加法操作组成的混合操作。一个移位1加法操作代替了两个简单操作,并且仍然在一个周期中执行。
如果混合操作需要附加的逻辑或者混合操作需要附加的寄存器文件端口来访问它的操作数(operand),那么使用混合操作就会增加硬件开销。确定一组能够给一组应用带来性能改善的混合操作,并对性能改善与实施混合操作的硬件开销进行权衡是一项很难的任务。所以,为了简化使用了混合操作的ISA的设计,技术上就需要一个自动ISA建立系统,它所建立的混合操作可以在权衡硬件开销的同时提高应用的性能。
D.
专用
专用技术所建立的操作总是对它的一个或多个操作数使用一个比原操作更小范围的值。例如,如果一个应用不需要原始操作的所有通用性,那么一个16位的乘法操作就有可能被转用化成一个对常数的乘法,或者被转用化成一个8位乘法。由于操作是作用在一个更加有限的输入集上的,所以实现该专用操作所需的逻辑就有可能比原操作所需的逻辑简单得多。
例如,一个总是进行与3相乘的操作的专用乘法就会比一个通用乘法操作所需的逻辑少得多。然而,应用也许除了专用版本外还需要操作的通用版本,那么增加一个专用操作就会增加硬件开销。由于常值操作数不需要在执行操作之前被调入寄存器,所以一个专用操作能够提高性能。
例如,使用通用乘法来进行乘以3的操作需要将常数“3”载入寄存器,然后再被用作乘法的输入(假设乘法读取两个寄存器作为输入),而专用的乘以3操作就不需要寄存器载入这一步。
确定一组能够给一组应用带来性能改善的专用操作,并对性能改善与实施专用操作的硬件开销进行权衡是一项很难的任务。所以,为了简化使用了专用操作的ISA的设计,技术上就需要一个自动ISA建立系统,它所建立的专用操作可以在权衡硬件开销的同时提高应用的性能。
为了在给定硬件开销的条件下将性能改善最大化,或者在给定性能改善的条件下将硬件开销最小化,设计者所必须考虑的ISA应该能够包括矢量操作、混合操作、专用操作以及包含了这些技术的操作(例如,一个操作可以对两个四整数矢量进行四个并行累积乘3计算,从而产生一个四整数矢量结果)的任何组合。此外,设计者必须考虑使用VLIW来允许并行发出和处理多个独立操作。在设计一个性能与硬件开销相平衡的ISA时,同时考虑四种技术是一个非常困难的任务。所以,技术上就需要一个自动ISA建立系统,它使用VLIW、矢量操作、混合操作以及专用操作来建立一个在权衡硬件开销的同时还会提高应用性能的ISA。
发明内容
鉴于现有技术中的上述问题,本发明的优选实施例会自动产生一个指令集体系结构(ISA),该指令集体系结构潜在的运用了VLIM指令、矢量操作、混合操作以及专用操作,其目的在于提高一组应用的性能,同时又能将硬件开销保持在设计者所设定的限度以下,或者是在给定所需的性能的条件下减小硬件开销。
附图说明
通过阅读对优选实施例的详细描述,以及附图,本发明实施例的这些以及其它方面将会变得更加明了,在附图中:
图1是根据本发明一个实施例的vec4配置;
图2是根据本发明一个实施例的流程图;
图3是根据本发明一个实施例的标量配置;
图4A和4B是根据本发明一个实施例的C代码的一个区域以及相应的依赖关系图;
图5是根据本发明一个实施例的一个修改的vec4依赖关系图;
图6是根据本发明一个实施例的四周期调度;
图7是根据本发明一个实施例的混合操作的依赖关系图;
图8A和8B是根据本发明一个实施例的一个依赖关系图以及使用混合图所导致的调度;
图9是根据本发明一个实施例的专用操作的依赖关系图;
图10是根据本发明一个实施例的一个ISA设计过程,它被用来在不超过给定开销预算的情况下将性能改善最大化;以及
图11是一个ISA设计过程,它被用来在达到或超过改善目标的情况下将开销最小化。
具体实施方式
本发明的优选实施例会自动产生一个指令集体系结构(ISA),该指令集体系结构潜在的运用了VLIM指令、矢量操作、混合操作以及专用操作,其目的在于提高一组应用的性能,同时又能将硬件开销保持在设计者所设定的限度以下,或者是在给定所需的性能的条件下减小硬件开销。
本发明从一组原始操作中得到由ISA所执行的操作。在优选实施例中,原始操作包括支持原始ISA上的应用语言所必需的操作,也可以包括用户明确定义的操作,这里所说的原始ISA例如Xtensa ISA的配置。在优选实施例中,用户定义新操作所使用的是Tensilica指令扩展(TIE)语言(如Killian等人的美国专利No.6,282,633,以及申请序列No.09/246,047和09/506,502中所描述的内容,这两篇文献在这里被用作参考)。如果想知道TIE的进一步信息,请参阅《Tensilica应用专用微处理器解决方案综述手册》(Tensilica Application SpecificMicroprocessor Solutions Overview Handbook)的第4章,该书可以在网上获得:http://www.tensilica.com/technology_pdf.html。如下所述,本发明将通过对原始操作采用矢量操作、混合操作以及专用操作技术来产生新的操作。接着,本发明使用VLIM来产生包含一个或多个原始或者新操作的新指令。
1.操作类
本发明将原始操作和新操作分成操作类(operation classes)。理想情况下,一个操作类代表了由共享硬件所实施的、需要相同寄存器文件资源的操作。例如,一个32位整数加法操作和一个32位整数减法操作都是从两个输入寄存器读取然后对一个输出寄存器写入。同时,实施加法和减法操作所需的逻辑是共享的;所以加法和减法操作应该放在同一个操作类中。然而,本发明并不要求操作类是按这种方式来形成的。优选实施例采用了下面的操作类:
MEMORY(存储器):该操作类包括了所有访问存储器的原始操作,这包括用户定义的加载和存储。MEMORY操作类还包括使用矢量操作、混合操作和/或专用操作从原始存储器操作得到的所有新操作。
USER、USER’、USER”…(用户,用户’,用户”…):这些操作类包含除了用户定义的加载和存储以外的所有原始用户定义操作,以及使用矢量操作、混合操作和/或专用操作从用户定义操作得到的所有新操作。由一个MEMORY类操作以及一个USER类操作组成的混合操作不包含在USER类中。所有用户定义操作被基于它们的操作数(operand)的用途而被分为不同的USER类,从而所有具有相同操作数用途的用户定义操作都被放在相同的USER操作类中。
MULT(乘法):该操作类包括除了用户定义操作以外的所有进行乘法的原始操作。该操作类也包括使用矢量操作、混合操作和/或专用操作从原始乘法操作得到的所有新操作。由一个MEMORY类操作和/或一个USER类操作,以及一个MULT类操作组成的混合操作不属于MULT类。
ALU:该操作类包括了没有被MEMORY、MULT或USER操作类所包含的所有原始操作和新操作。这些原始操作例如加法、减法、移位等等。
每个操作都产生了或者使用了由一个或多个类型所代表的值。原始操作会产生和使用原始类型。一个原始类型表示了应用程序语言中的内部类型,或者表示了在优选实施例中通过现有TIE ctype构建来指定的用户定义类型。在优选实施例中,应用是通过C以及C++程序语言来表达的,所以,内部类型就指的是有符号和无符号型字符char(字符)、short(短整型)、int(整型)以及long(长整型),还有float(浮点型)和double(双精度型)。用户可以手动的限制一个操作类中的原始操作,使它们只作用在某些类型上。例如,如果应用不需要对浮点型或者双精度型值的操作,那么这些操作就可以从操作类中删除,从而就减少了实施操作类所需的硬件。
本发明所建立的新操作会产生和使用原始类型以及新类型。新类型是由本发明建立的,它代表了一个原始类型的矢量形式。例如,一个新类型可以表示带有四个整型值的矢量。从使用原始整型值的原始加法操作出发,本发明可以建立一个能够使用四整型矢量这样的新类型的宽度为四的新矢量加法操作。
每个原始类型都被包含在一个寄存器文件中。多种类型可以共享相同的寄存器文件。在优选实施例中,一个寄存器文件被用来包含所有的原始内部整型类型(有符号和无符号的字符、短整型、整型以及长整型),而一个寄存器文件被用来包含所有的原始实型类型(浮点和双精度)。在优选实施例中,对于每个原始用户定义类型,用户会通过使用现有技术TIE regfile构建来指定寄存器文件包含该类型。
如下所述,每个新类型都包含在由本发明所建立的一个新寄存器文件中。在优选实施例中,如果建立了代表内部整型类型的矢量形式的新类型,那么一个新寄存器文件就被用来包含所有这些新类型,如果建立了代表内部实型类型的矢量形式的新类型,那么也会有一个新寄存器文件被用来包括所有这些类型。为了使用户定义寄存器文件中包含用户定义类型的矢量形式,本发明还为每个用户定义寄存器文件建立了一个新寄存器文件。
在下面的例子中,我们假定MULT和ALU类包含作用在整型类型(也就是有符号和无符号的字符、短整型、整型以及长整型)上的原始操作,而不包括作用在实型类型上的原始操作(也就是浮点和双精度)。存在一个单个的USER类,它包括一个用户定义操作,MUL24,它将两个用户定义的代表24位整数的int24类型相乘,然后产生一个整型结果。MEMORY类包含了用来加载和存储整型类型以及int24类型的原始操作。
2.ISA配置
ISA的特性是通过一个或多个ISA配置来描述的。ISA中所包含的操作、指令以及寄存器文件是由组成ISA的每个ISA配置所需的操作、指令以及寄存器文件所形成的集合。在优选实施例中,一个ISA配置包括下面这些参数:
1.矢量长度(VL)。可能的取值为大于零的整数。该参数表示了由配置所代表的操作的矢量宽度,从而也就给出了每个矢量单元中所含的标量单元的数量。VL=1表示该操作是作用在一个标量上的,也就是说该配置没有使用矢量操作。
2.发出宽度(IW)。可能的取值为大于零的整数。该参数表示了每个VLIW指令中所能包含的操作的数量。IW=1表示每个指令包含一个操作,也就是说该配置没有使用VLIW。
3.操作类(OC)。配置实施一组一个或多个操作类。如果一个配置实施了一个操作类,那么该配置就会支持该操作类中的所有操作,并且包括执行这些操作所必需的硬件。
4.指令模板集(ITS)。一组包含一个或多个指令模板的集合,它们一起描述了将操作类组合到一个VLIW指令中可能的所有方式。每个指令模板通过对每个指令时隙指定一个操作类来描述一个可能的组合。例如,要表示一个两时隙VLIW指令在时隙0具有一个存储器操作,且在时隙1有一个乘法操作,那么这样的一个指令模板就是{MEMORY,MULT}。一个指令模板集表示了所有可能的模板,这样,ITS={{MEMORY,MULT},{ALU,ALU}}就表示每个指令可以包括一个存储器操作以及一个乘法操作(分别在时隙0和1),或者可以包括两个ALU操作(每个时隙中一个)。
5.操作宽度(OW)。可能的取值为1/n,其中‘n’是VL的一个因子。对于每个操作类,该参数表示了操作所作用的元素占被操作矢量元素个数的分数。例如,在一个矢量长度为4的配置中,一个满(OW=1)宽度的乘法会并行进行4个乘法,也就是对矢量中每个元素各做一次乘法。一个半(OW=0.5)宽度的乘法会并行进行2个乘法,该乘法只会对矢量的4个元素中的两个作用(所以要进行两次乘法操作才能完成对4个元素的乘法)。
6.组合操作集(COS)。如下所述,通过使用混合操作技术和/或专用技术所形成的一组包含一个或多个新操作的集合。
例如,图1中所示的vec4配置表示了能够最多并行对4个标量进行操作的一个操作集,其中MEMORY类和ALU类操作是对所有的四个元素并行操作,而MULT类和USER类是对两个元素并行操作。该配置包括了来自所有操作类的操作,并且允许在每个指令中编码两个操作,其指令模板表示了所允许的操作时隙安排。该配置没有实施组合操作。
实施ISA配置所需的硬件仅仅是为了实现配置参数所描述的特征而必须的寄存器文件和逻辑。在优选实施例中,一个配置的硬件开销包括操作发出和解码逻辑、操作执行逻辑、寄存器文件入口和寄存器文件端口的开销。
配置的IW和ITS决定了需要多少操作解码和发出逻辑的并行实体。ITS中的指令模板表示了每个解码器必须能够解码。用于发出时隙的解码器必须对任何模板出现在该时隙的每个操作类中的所有操作进行解码。对于vec4的例子,时隙0中的解码器必须对MEMORY和ALU类操作进行解码,时隙1中的解码器必须对MULT、ALU以及USER类操作进行解码。
配置的VL、OC、ITS以及OW决定了实行配置所需的操作所必需的逻辑。OC表示了在配置的逻辑中必须实施什么操作类,也就是什么操作。VL和OW表示了每个操作所作用的数据元素的个数,也就表示了执行逻辑必须并行进行的计算数量。ITS表示了能够并行发出并执行的操作类,从而也就表示了每个操作所需的执行逻辑的并行实体数量。
例如,vec4配置实施了所有的操作类,所以配置所需要的硬件就包括实现包含在所有操作类中所有操作所必需的逻辑。由于VL=4,OW[MEMORY]=OW[ALU]=1,所以MEMORY和ALU操作类中的每个操作都会并行操作四个数据元素,从而实现每个操作的逻辑就必须并行进行四个计算。由于VL=4,OW[MUL]=OW[USER]=0.5,所以MULT和USER操作类中的每个操作都会并行操作两个数据元素,从而实现每个操作的逻辑就必须并行进行两个计算。vec4配置的{ALU,ALU}模板表示两个ALU类操作可以被同时执行,所以实现配置所需要的逻辑必须包含ALU类操作所需逻辑的两份复制。
配置的IW和ITS决定了每个寄存器文件所需的寄存器文件端口数。每个寄存器文件的寄存器文件端口数指的是在任何指令模板中可能发生的操作所需要的最大端口数量。对于vec4的例子,{ALU,ALU}模板表示了两个ALU类操作会同时执行。假设ALU操作类中任何操作所需的最多整数寄存器文件访问是两个整数寄存器文件读取和一个整数寄存器文件写入,那么{ALU,ALU}模板就需要四个整数寄存器文件读取端口和两个整数寄存器文件写入端口。所有指令模板中最大寄存器文件要求就是该配置的要求。
如下所述,配置所需的每个寄存器文件中的入口数是在ISA被建立时确定的。一旦知道了寄存器文件入口的数量,那么这些寄存器文件入口的硬件开销就会被加到配置的初始硬件开销中。
3.建立和使用一个新的ISA
如图2所示,本发明的一个优选实施例将采用下面的步骤来建立一个用于一组应用的ISA。
1.建立一组ISA配置,这些配置一起描述了将有可能被用来提高应用性能的所有操作、指令以及寄存器文件。
2.给每个配置分配一定的开销,如上所述,这些开销代表了要实现配置要求的操作、指令以及寄存器文件所需要的硬件开销。
3.分析应用并搜集应用中每个区域的信息,其中所建立的ISA将会为所述应用的区域提供性能改善。
4.对于一组ISA配置中的每个配置,评价每个应用区域,从而确定配置中所包含的操作、指令以及寄存器文件所提供的性能改善。如果需要,还会建立包含混合和/或专用操作的新ISA配置,并把它们加到这一组ISA配置中。
5.确定一起定义一个ISA的一个或多个配置,这里的ISA是为了将应用的性能最优化,同时还要使硬件开销低于一个设定的预算,或者,这里的ISA是为了将硬件开销最小化,同时还提供一个必需的性能水平。
6.产生ISA所需的硬件。
4.建立ISA配置
本发明的一个实施例通过枚举VL、IW、OC、ITS以及OW参数值的所有组合来建立一组ISA配置。如下所述,包含混合或者专用操作的配置将在稍后建立(也就是说每个建立的配置的COS参数是空的)。为了避免建立过多的配置,将会基于目标处理器的极限以及用户的引导来给允许的参数值加上限制。例如,发出宽度将通过在指令的每个时隙中对操作的opcodes以及操作数进行编码所需的比特数来进行限制。此外,如果目标处理器最多允许一个存储器接口,那么MEMORY操作类就最多只能在一个指令模板的一个时隙中出现。
作为对自动产生ISA配置的一个替换,用户也可以专门的来选择那些需要被考虑到的配置集。
一个被称为SCALAR(标量)的特殊ISA配置总是会被建立。SCALAR表示的指令集在每个指令中只允许一个操作,并且只进行标量操作。SCALAR配置被用作一个供其它配置进行对比的基准。图3表示了一个可能的SCALAR配置。
每个ISA配置都被分配有一个初始开销,该初始开销表示了要实现组成配置的指令、操作以及寄存器文件所需的逻辑的硬件开销。可以通过建立实际的用来实现配置所需的逻辑,然后检测所用硬件的大小来得到最确切的硬件开销。该逻辑可以通过使用像Synopsys’DesignCompiler中所提供的那些逻辑合成技术来自动产生。然而,这是相当耗时的,从而也是不切实际的。取而代之,可以从有限数量的配置所综合的内容中搜集出一个典型硬件开销的数据库。
例如,该数据库可以记录一个加法器、一个乘法器、一个寄存器文件端口、一个存储器接口等等的开销。通过使用该数据库,就可以从配置的组成部分的开销来快速估计出配置的初始开销。一个配置的初始开销没有包括任何组合操作的开销或者寄存器文件入口的开销。这些开销将会在后来按下文所述加到配置中。
5.评价ISA配置带来的改善
本发明的一个优选实施例下面将会对应用的每个区域确定每个ISA配置所带来的改善,以及寄存器文件的需求。在优选实施例中,一个区域(region)是一个没有包含在任何循环中的循环套(loop nest)或者简单基本块(Aho等人,
Compilers:Principle,Techniques,and Tools,9.4节,528-529页)代码。对于每个配置,该改善就是相对于SCALAR配置而言该配置所能带来的循环次数的减少。
对每个区域,本发明搜集了被用来确定配置对该区域带来的改善的分析信息。该分析信息包括下面的内容:
1.DEP_GRAPH:区域中操作的依赖关系图(Morgan,
Building an Optimizing Compiler,242页)。
2.EXEC_CNT:该区域的执行计数。在优选实施例中,该执行计数来自真实或者估计的分布图(profile)(Wall,“利用真实或者估计的分布图来预测程序特性(Predicting Program Behavior Using Real orEstimated Profiles)”,
Proceedings of the ACM SIGPLAN 1991 Conference on Programming Language Design and Implementation),或者来自用户提供的指示。真实分布图是从应用的真实执行过程中搜集的,而估计的分布图则是通过观察循环的结构或者应用的其它性质而得到的。用户提供的指示被插到应用中,通过诸如编译指示这样的信息来确定一个区域的执行计数。
3.VL:一组可以用于本区域操作的矢量长度,它们与短长度矢量相比可以潜在的提供性能改善。本发明采用传统的依赖性分析(Maydan等人,“提取数据依赖性分析的一个有效方法(An EfficientMethod for Extract Data Dependence Analysis)”,PLDI 1991,1-14页)循环变换(Wolf等人,“考虑了高速缓存与调度的组合循环变换(Combining Loop Transformations Considering Caches AndScheduling)”,
Proc.MICRO’96,274-286页,1996)以及矢量化技术来确定该区域是否被矢量化,从而就可以开发矢量操作。如果该区域是矢量化的,那么VL就表示了该区域可以使用什么矢量长度,从而提供相对于短矢量的性能改善。如果该区域不能够被矢量化,也就是VL={1},那么该区域就只能使用非矢量操作。
例如,图4A和4B分别表示了一个C代码的区域和相应的依赖关系图。该代码使用了用户定义的int24类型以及用户定义的MUL24操作,这两者都在上面定义过。load const操作是一个ALU类操作,它将一个整数寄存器设定成一个特定的常值。该区域执行100次,且可以被矢量化来开发宽度为2或者宽度为4的矢量操作。
对于每个区域,优选实施例都通过使用分析信息来评价每个ISA配置所带来的改善。一些配置没有提供执行该区域所必需的操作,所以它们就被分配以负的改善。这些配置没有实现区域所要求的操作类,或者它们的矢量长度与短矢量长度相比没有带来性能的改善。示例中的区域包括用户定义的MUL24操作,所以只有能实现USER操作类的ISA配置才能够被用来实现该区域。类似的,VL=8的配置和一个VL=4而其它都一样的配置相比,不会带来任何性能的改善。
如果一个配置可以被用来实施该区域,那么确定该配置给该区域带来的好处的第一步骤就在于使用一个指令调度算法来准确确定执行该区域所需要的循环次数以及该区域所需的最小寄存器数。优选实施例对表示循环的区域使用了任何现有技术的软件流水线算法,而对其它区域使用了任何现有技术的调度算法。
作为对软件流水线或者调度算法的一个替换,可以像软件流水线中那样通过使用资源界限来估计执行区域所需要的循环数。调度算法确定了用最少循环数来实现区域所需的指令,并且确定了要保存指令所操作的所有值所需要的最小寄存器数。
在启用调度算法之前,每个属于一个操作宽度小于一的操作类的操作必须作为一个迭代操作来实施,或者必须被复制。如果该操作是作为一个迭代操作来实现的,那么就使用同样的逻辑来产生结果的多个部分。由于是反复使用同样的逻辑来产生整个结果,所以迭代操作的等待时间就长于非迭代操作。如果操作是被复制的,那么就会产生操作的多个版本来产生整个输出。每个版本的操作使用相同的输入。每个版本的操作使用相同的输入,但产生输出的不同部分。例如,上面的vec4配置会进行半宽度MUL24操作。所以,要计算一个四MUL24结果的矢量就需要两个操作,MUL24_0操作计算两个矢量元素,MUL24_1操作计算另外两个矢量元素。
由于一个操作所有的复制都依赖相同的输入,产生同一输出的不同部分,所以依赖关系图就被修改来表示复制的操作为形成输入操作数和输出操作数之间的一个依赖链。例如,vec4配置就需要图5中所示的修改的依赖关系图。
接着,调度算法将被用来修改依赖关系图。例如,在示例区域使用现有技术软件流水线算法以及ISA配置将会产生图6中所示的四周期调度。由于vec4配置允许时隙0中的MEMORY类操作与时隙1中的一个USER或者一个ALU操作结成一组,所以该调度是可能的。
可以通过使用混合操作和/或专用技术来进一步减少循环次数。混合操作技术将两个或者更多的独立操作组合到一个新的操作中。由于混合操作比原始操作需要更少的发出时隙,并且混合操作的等待时间可以比原始操作的整个等待时间要短,所以用混合操作来取代原始操作就可以减少循环次数。
一组候选的独立操作就可以是依赖关系途中任何相连的部分,其中该部分中的操作可以作为单个的混合操作来实施。可以对能够作为一个混合操作的操作个数和类进行限制,还可以对混合操作中操作数的个数进行限制。对操作类的限制是为了限制混合操作所需的硬件资源。
例如,将混合操作中的MEMORY类操作限制成一就确保了实施混合操作所需的硬件最多需要一个存储器接口。限制操作数的个数可以确保混合操作是按允许的比特数来编码的。一个操作可以使用的比特数依赖于指令的大小以及配置的IW(也就是在指令中编码的操作的个数)。对于本例,我们假设混合操作被限制成最多包含一个MEMORY类操作,而对MULT、ALU以及USER类操作个数没有限制,并且操作数被限制成最多四个。
示例的依赖关系图中存在一个包含所有操作的依赖关系图的相连部分;然而,将所有操作都组合到一个混合操作中将会需要多个MEMORY类操作。由于这将会超过一个MEMORY类操作的限制,所以这样的一个相连部分将不会被考虑采用。类似的,其它的相连的部分也被排除在考虑范围之外。
对于每个候选的混合操作,依赖关系图会被修改来使用该候选混合操作,然后被重新调度来确认该操作是否能带来循环的减少。在优选实施例中,混合操作的等待时间是从一个保存了实现每个操作的逻辑所需的时间的数据库来确定的,这一时间不包括对操作解码、或者对操作数读取或写入所用的时间。一个混合操作所需的时间就是在表示混合操作的依赖关系图的部分中,沿任何依赖链的操作所需的时间总和的最大值,再加上对操作解码以及对操作数读取和写入所用的时间。对于每个带来循环减少的混合操作,会建立一个ISA配置的复本,混合操作会被加入到配置的组合操作集中,配置的开销会由于混合操作的开销而增加。确定每个混合操作的开销的方法与确定ISA配置开销的方法一样。优选实施例会查阅组成部分硬件开销的数据库,从而混合操作的开销就是各个操作开销的总和。例如,使用了带有vec4配置的示例依赖关系图,图7中依赖关系图的连接部分就代表了一个候选混合操作。该混合操作的等待时间是一个周期。
图8A和8B表示了为使用混合操作以及相应的调度而修改的依赖关系图。由于采用混合操作会将周期数从四降到三,所以就会建立ISA配置的一个复本,混合操作会被加入到ISA配置复本中,ISA配置复本的开销会由于进一步包括混合操作的开销而增加。
假设对于图4A中区域,SCALAR配置需要六周期调度,那么图8B中的调度就会提供一个三周期的改进。如果配置采用矢量操作来减少区域的执行频率,那么就可以进一步减少周期。例如,由于vec4配置是作用在长度为四的矢量上的,所以示例区域中的循环只须执行25次而不是100次,这样指令的执行频率就只有SCALAR配置的四分之一。每个配置带来的改善是通过获得相对于SCALAR配置的周期数的减少而得到的。
调度算法还确定了每种类型所需要的最少寄存器数。所有区域中,每种类型所需的最多寄存器数与每个配置记录在一起。同时,每个配置的开销会由于考虑了配置所需的寄存器开销而增加。
在发现每个配置给每个区域所带来的好处之后,每个配置会再次被检验以确认是否可以通过使用专用技术来减少配置的硬件开销,所述专用技术是通过将一个普通操作用一个作用在一个或多个常值上或者作用在一个更小范围的值上的操作来代替。对于每个配置,专用技术会检测每个区域的依赖关系图来发现候选专用操作。依赖关系图中一个或多个输入是常值或小范围值的任何操作都是一个专用候选。例如,图5(A)中的依赖关系图就具有图9中依赖关系图所代表的候选专用操作。
如果一个专用候选能够用一个专用操作来替代通用版本,那么它就可以降低硬件开销。所以,如果任何区域都不需要专用候选中通用操作,那么通用操作就可以被专用操作所代替,从而潜在的降低硬件开销。例如,在没有区域需要混合操作的通用版本(store c[i],add)的情况下,图9中依赖关系图所表示的专用候选就会潜在的降低硬件开销。
如果一个通用操作可以被专用操作所代替,那么就会建立ISA配置的一个复本,专用操作会被加入到配置的组合操作组中(如果通用操作是一个混合操作,就取代相应的混合操作),从而配置的开销就会被降低,降低的量就是专用操作开销与相应通用操作开销之间的差值。例如,假设任何区域都不需要混合操作的通用版本(store c[i],add),那么它就会在配置中被专用混合(store c[i],add 12)操作所代替,从而配置的开销就会由于专用和通用操作开销之间的差别而降低。
6.确定组成ISA的ISA配置
优选实施例现在就具有了每个ISA配置的开销和寄存器要求,以及该配置对每个区域所带来的性能改善。接下来,本发明将搜集包括一个或多个配置的解决方案集,从而满足下面的两个条件之一。解决方案集中的配置一起组成了ISA。
1.给定硬件开销预算,在解决方案集中的配置的总开销不超过预算的条件下,希望将解决方案集中的配置所带来的改善最大化。
2.给定性能改善目标,在配置所带来的性能改善能够达到或超过该目标的前提下,希望将解决方案集中的配置的总硬件开销最小化。
下面的步骤(也表示在图10中)被用来在不超过给定的开销预算的同时将性能改善最大化。
1.对于每个配置,通过把配置给每个区域所带来的改善相加来计算配置带来的总的性能改善。
2.将带来最大总性能改善(如果有多个配置都具有最大总性能改善,那就选开销最小的)且开销不超过预算的配置,也就是配置MAX,加到解决方案集中。
3.预算减去MAX配置的开销。
4.对于剩下的每个配置,在假设解决方案集中的配置所提供的指令、操作以及寄存器文件也可以使用的情况下,重新计算该配置给每个区域带来的性能改善。
5.对于剩下的每个配置,在解决方案集中的配置所需的逻辑和寄存器已经存在的情况下,降低该配置的开销以使得它代表了为实现该配置所必需的逻辑和寄存器而增加的开销。在优选实施例中,一个配置增加的开销是通过只计算没有存在于解决方案集配置中的那些配置部分而得到的。和前面一样,每个部分的硬件开销是通过使用硬件开销数据库来估计的。例如,假设解决方案集包括一个实施一宽度为4的ALU操作类的配置。如果某个配置A需要一个宽度为1、2或4的ALU操作类,那么由于一个解决方案集配置已经提供了该类所需的逻辑,所以该类所需的逻辑的开销就会从配置A的开销中被删除。类似的,如果配置A需要一个宽度为8的ALU操作类,该类所需的逻辑的开销就是宽度为4的ALU操作类所需的逻辑的开销与宽度为8的ALU操作类所需的逻辑的开销的差。所以,配置A的开销就被降低到考虑宽度为8的ALU操作类逻辑的硬件开销与增加开销之间的差值。
6.如果剩下的开销预算大于零,那么就回到步骤1。
下面的步骤(也表示在图11中)被用来在达到或超过改善目标的同时将开销最小化。
1.对于每个配置,通过把配置给每个区域所带来的改善相加来计算配置带来的总的性能改善。
2.选择开销最低但同时带来的改善大于或等于改善目标的配置。如果没有任何一个配置带来的改善大于或等于改善目标,那么就选择改善最大的配置(如果多个配置都具有最大性能改善,那就选择开销最小的)。将该配置,也就是配置MIN,加到解决方案集中。
3.改善目标减去MIN配置的改善。
4.将配置MAX换成配置MIN,其它与上文的步骤4一样。
5.与上文的步骤5一样。
6.如果剩下的改善目标大于零,那么就回到步骤1。
7.
产生描述ISA的硬件
解决方案集表示了描述本发明正在建立的ISA的一组ISA配置。现在就必须明确要实施ISA所需的硬件。这一部分就列出了要实施已建立的ISA所必需的硬件。
要保存解决方案集中的每一种类型所需的寄存器数就是解决方案集中每个配置所需的寄存器数的最大值。对寄存器的需求还可以进一步组合以考虑不同类型之间寄存器的共享。例如,在优选实施例中,一个单个寄存器文件就被用于所有矢量整数类型。所以,矢量整数寄存器文件中的寄存器数就是任何整数矢量类型所需的最大寄存器数。
每个寄存器文件入口的宽度是由寄存器文件所包含的最大类型的宽度所决定的。例如,vec4配置就需要矢量整数寄存器文件足够宽,以保存四个最大整数类型,也就是长整型;并且需要矢量用户寄存器文件必须足够宽以容纳四个int24类型值。假设任何区域所需的最小矢量整数寄存器的数量是十六,并且任何区域所需的最小矢量用户寄存器数是四,那么ISA的硬件就必须实施一个十六入口矢量寄存器文件以容纳四个整数值的矢量(也就是每个入口128位),并且必须实施一个四入口矢量寄存器文件来容纳用户定义的四int24类型的矢量(也就是每个入口96位)。
每个寄存器文件上所需的读取和写入端口数是通过考察描述ISA的所有配置的指令模板而得到的。每个寄存器文件所需的寄存器文件读取和写入端口数就是发生在任何指令模板中的操作所需的最大读取和写入端口数。
ISA的硬件还必须包括实施每个配置所需的操作的逻辑。例如,vec4配置的逻辑必须实施所有MEMORY和ALU类操作的宽度为四的矢量版本(因为VL=4,以及OW[MEMORY]=OW[ALU]=1),以及必须实施所有MULT和USER类操作的宽度为二的矢量版本(因为VL=4,以及OW[MULT]=OW[USER]=0.5)。
上述的优选实施例只是为了解释本发明,而本发明并不仅限于此。本发明各种变形对于已经阅读了本说明书的熟悉技术的人士是明了的,本发明以及所附的权利要求书就是为了也包括这些变形。
权利要求书
(按照条约第19条的修改)
1.一种系统,包括:
用于接收至少一个用高级语言编写的软件程序的装置;以及
用于自动生成一个被优化以执行所述程序的指令集体系结构的装置,其中所述指令集体系结构被表示成一组包括一个或多个扩展指令的配置,所述扩展指令基于现存标准或现存的用户定义的指令集体系结构中的指令。
2.根据权利要求1的系统,其中
所述扩展指令在现存标准或现存的用户定义的指令集体系结构中的状态和寄存器文件上操作。
3.权利要求2中的系统,其中的扩展指令包括现存指令的矢量化版本。
4.权利要求2中的系统,其中的扩展指令包括现存指令的VLIW组合。
5.权利要求2中的系统,其中的扩展指令包括现存指令的混合组合。
6.权利要求2中的系统,其中的扩展指令包括现存指令的专用版本。
7.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的矢量版本。
8.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的VLIW组合。
9.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的混合组合。
10.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的专用版本。
11.权利要求2中的系统,其中的扩展指令包括现存指令的矢量化、VLIW、混合以及专用版本中的至少两个。
12.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的矢量化、VLIW、混合以及专用版本中的至少两个。
13.权利要求2中的系统,其中:
指令集体系结构的产生是受从所述至少一个软件程序中所搜集的分析信息引导的;以及
对于能从所产生的指令集算法中得到性能改善的每个代码区域都进行分析信息的搜集。
14.权利要求13中的系统,其中分析信息包括从实际或估计的分布图信息来得到的每个区域的执行计数。
15.权利要求13中的系统,其中分析信息包括从用户提供的提示得到的每个区域的执行计数。
16.权利要求13中的系统,其中的分析信息包括每个区域的依赖关系图。
17.权利要求13中的系统,其中的分析信息包括能被用来提高每个区域性能的一组操作矢量长度。
18.权利要求13中的系统,其中每个区域被一组指令集体系结构配置进行评价,以确定在该配置所表示的指令、操作、寄存器文件以及状态可以用于该区域的情况下所产生的性能改善。
19.权利要求18中的系统,其中:
指令集体系结构的产生是使用对每个指令集体系结构配置的硬件开销的估计作为指导,所述硬件开销包括实现配置所代表的指令、操作、寄存器文件以及状态所必需的逻辑开销;以及
对每个区域的每个指令集体系结构配置的硬件开销和性能改善被用来确定一起描述所产生的指令集体系结构的一组指令集体系结构配置,从而就可以使软件程序的性能尽可能提高,而所产生的指令集体系结构的硬件开销又不会超出开销预算。
20.权利要求18中的系统,其中:
指令集体系结构的产生是使用对每个指令集体系结构配置的硬件开销的估计作为指导,所述硬件开销包括实现配置所代表的指令、操作、寄存器文件以及状态所必需的逻辑开销;以及
对每个区域的每个指令集体系结构配置的硬件开销和性能改善被用来确定一起描述所产生的指令集体系结构的一组指令集体系结构配置,从而使得所产生的指令集体系结构的硬件开销尽可能小,而又能提供一个大于或等于性能目标的性能改善。
21.权利要求18中的系统,其中对每个区域的每个指令集体系结构配置的硬件开销和性能改善被用来确定一起描述所产生的指令集体系结构的一组指令集体系结构配置,从而使得所产生的指令集体系结构的硬件开销小于性能改善的一个预设的函数。
22.权利要求18中的系统,其中一个特定指令集体系结构配置对一个特定区域的性能改善是通过一个作用在该区域的修改的依赖关系图上的指令调度算法来决定的。
23.权利要求22中的系统,其中所述依赖关系图被修改以将操作宽度小于一的操作进行复制。
24.权利要求22中的系统,其中所述依赖关系图被修改以将一组操作用一个单个混合操作来代替。
25.权利要求18中的系统,其中一个特定指令集体系结构配置对一个特定区域的性能改善是通过使用资源界限来确定的。
26.权利要求2中的系统,指令集体系结构的产生是使用对每个指令集体系结构配置的硬件开销的估计作为指导,所述硬件开销包括实现配置所代表的指令、操作、寄存器文件以及状态所必需的逻辑开销。
27.权利要求26中的系统,其中硬件开销是通过将指令集体系结构配置中存在的多个部分的硬件开销相加来估计的。
28.权利要求26中的系统,其中硬件开销被减小以代表当专用操作代替通用操作时的减少后的必需逻辑。
29.一种系统,包括:
用于接收至少一个用高级语言编写的软件程序的装置;以及
用于自动生成一个被优化以执行所述至少一个程序的指令集体系结构的装置,其中基于对所述至少一个程序的分析增加一个或多个新的扩展指令到现存的指令集体系结构的指令中,
其中所述新的指令包含现存指令的矢量化版本。
30.一种系统,包括:
用于接收至少一个用高级语言编写的软件程序的装置;以及
用于自动生成一个被优化以执行所述至少一个程序的指令集体系结构的装置,其中基于对所述至少一个程序的分析增加一个或多个新的寄存器文件,
其中所述新的寄存器文件是现存标准或现存的用户定义的指令集体系结构的矢量化版本。
31.一种系统,包括:
用于接收至少一个用高级语言编写的软件程序的装置;以及
用于自动生成一个被优化以执行所述至少一个程序的指令集体系结构的装置,其中基于对所述至少一个程序的分析增加一个或多个新的扩展指令到现存的指令集体系结构的指令中,
其中所述新的指令包含现存标准或现存指令体系结构中用户定义的指令的专用版本。
32.一种系统,包括:
用于接收至少一个用高级语言编写的软件程序的装置;以及
用于自动生成一个被优化以执行所述至少一个程序的指令集体系结构的装置,其中基于对所述至少一个程序的分析增加一个或多个新的扩展指令到现存的指令集体系结构的指令中,
其中一个单个新的指令包含现存标准或现存指令体系结构中用户定义的指令的混合、专用和矢量化组合之一。
Claims (31)
1.一个系统,用来取得至少一个用高级语言编写的软件程序,以及产生一个被优化来执行该程序的指令集体系结构。
2.权利要求1中的系统,其中:
指令集体系结构被表示成一组配置,其中包括一个或多个扩展指令到现存标准或者现存用户定义指令集体系结构中的指令;以及
所述扩展指令操作在预先存在的或者自动产生的状态和寄存器文件上。
3.权利要求2中的系统,其中的扩展指令包括现存指令的矢量化版本。
4.权利要求2中的系统,其中的扩展指令包括现存指令的VLIW组合。
5.权利要求2中的系统,其中的扩展指令包括现存指令的混合组合。
6.权利要求2中的系统,其中的扩展指令包括现存指令的专用版本。
7.权利要求2中的系统,其中的扩展包括高级语言所支持的操作的矢量版本。
8.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的VLIW组合。
9.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的混合组合。
10.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的专用版本。
11.权利要求2中的系统,其中的扩展指令包括现存指令的矢量化、VLIW、混合以及专用版本中的至少两个。
12.权利要求2中的系统,其中的扩展指令包括高级语言所支持的操作的矢量化、VLIW、混合以及专用版本中的至少两个。
13.权利要求2中的系统,其中一个或多个扩展指令是使用扩展语言描述的其它用户定义指令的矢量化、VLIW、混合或者专用版本。
14.权利要求2中的系统,其中:
指令集体系结构的产生是受从至少一个软件程序中所搜集的分析信息引导的;以及
对于能从所产生的指令集算法中得到性能改善的每个代码区域都进行分析信息的搜集。
15.权利要求14中的系统,其中分析信息包括从实际或估计的分布图信息来得到的每个区域的执行计数。
16.权利要求14中的系统,其中分析信息包括从用户提供的提示得到的每个区域的执行计数。
17.权利要求14中的系统,其中的分析信息包括每个区域的依赖关系图。
18.权利要求14中的系统,其中的分析信息包括能被用来提高每个区域性能的一组操作矢量长度。
19.权利要求14中的系统,其中每个区域被一组指令集体系结构配置进行评价,以确定在该配置所表示的指令、操作、寄存器文件以及状态可以用于该区域的情况下所产生的性能改善。
20.权利要求19中的系统,其中:
指令集体系结构的产生是受对每个指令集体系结构配置的硬件开销的估计所引导的,所述硬件开销包括实现配置所代表的指令、操作、寄存器文件以及状态所必需的逻辑开销;以及
对每个区域的每个指令集体系结构配置的硬件开销和性能改善被用来确定一起描述所产生的指令集体系结构的一组指令集体系结构配置,从而就可以使软件程序的性能尽可能提高,而所产生的指令集体系结构的硬件开销又不会超出开销预算。
21.权利要求19中的系统,其中:
指令集体系结构的产生是受对每个指令集体系结构配置的硬件开销的估计所引导的,所述硬件开销包括实现配置所代表的指令、操作、寄存器文件以及状态所必需的逻辑开销;以及
对每个区域的每个指令集体系结构配置的硬件开销和性能改善被用来确定一起描述所产生的指令集体系结构的一组指令集体系结构配置,从而使得所产生的指令集体系结构的硬件开销尽可能小,而又能提供一个大于或等于性能目标的性能改善。
22.权利要求19中的系统,其中对每个区域的每个指令集体系结构配置的硬件开销和性能改善被用来确定一起描述所产生的指令集体系结构的一组指令集体系结构配置,从而使得所产生的指令集体系结构的硬件开销小于性能改善的一个预设的函数。
23.权利要求19中的系统,其中一个特定指令集体系结构配置对一个特定区域的性能改善是通过一个作用在该区域的修改的依赖关系图上的指令调度算法来决定的。
24.权利要求23中的系统,其中所述依赖关系图被修改以将操作宽度小于一的操作进行复制。
25.权利要求23中的系统,其中所述依赖关系图被修改以将一组操作用一个单个混合操作来代替。
26.权利要求19中的系统,其中一个特定指令集体系结构配置对一个特定区域的性能改善是通过使用资源界限来确定的。
27.权利要求2中的系统,指令集体系结构的产生是受对每个指令集体系结构配置的硬件开销的估计所引导的,所述硬件开销包括实现配置所代表的指令、操作、寄存器文件以及状态所必需的逻辑开销。
28.权利要求27中的系统,其中硬件开销是通过将指令集体系结构配置中存在的多个部分的硬件开销相加来估计的。
29.权利要求27中的系统,其中硬件开销被减小以代表当专用操作代替通用操作时的减少后的必需逻辑。
30.一个系统,用来取得至少一个用高级语言编写的软件程序,以及通过在分析了所述至少一个程序的基础上增加一个或多个新指令来产生一个被优化以执行所述至少一个程序的指令集体系结构。
31.一个系统,用来取得至少一个用高级语言编写的软件程序,以及通过在分析了所述至少一个程序的基础上增加一个或多个新寄存器文件来产生一个被优化以执行所述至少一个程序的指令集体系结构。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/981,291 | 2001-10-16 | ||
US09/981,291 US6941548B2 (en) | 2001-10-16 | 2001-10-16 | Automatic instruction set architecture generation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1608247A true CN1608247A (zh) | 2005-04-20 |
CN100367209C CN100367209C (zh) | 2008-02-06 |
Family
ID=25528272
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB028206045A Expired - Lifetime CN100367209C (zh) | 2001-10-16 | 2002-09-10 | 用于自动生成指令集体系结构的系统 |
Country Status (7)
Country | Link |
---|---|
US (2) | US6941548B2 (zh) |
JP (1) | JP4209776B2 (zh) |
KR (1) | KR100705509B1 (zh) |
CN (1) | CN100367209C (zh) |
GB (1) | GB2398144B (zh) |
TW (1) | TW594581B (zh) |
WO (1) | WO2003034216A2 (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2367915B (en) * | 2000-10-09 | 2002-11-13 | Siroyan Ltd | Instruction sets for processors |
US7254810B2 (en) * | 2002-04-18 | 2007-08-07 | International Business Machines Corporation | Apparatus and method for using database knowledge to optimize a computer program |
US7353503B2 (en) * | 2002-12-27 | 2008-04-01 | Sun Microsystems, Inc. | Efficient dead code elimination |
JP4057938B2 (ja) * | 2003-03-26 | 2008-03-05 | 株式会社東芝 | コンパイラ、コンパイル方法、及びプログラム開発ツール |
JP2005216177A (ja) * | 2004-01-30 | 2005-08-11 | Toshiba Corp | コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法 |
US7603546B2 (en) * | 2004-09-28 | 2009-10-13 | Intel Corporation | System, method and apparatus for dependency chain processing |
JP2006243839A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | 命令生成装置及び命令生成方法 |
JP2006243838A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | プログラム開発装置 |
US7506326B2 (en) * | 2005-03-07 | 2009-03-17 | International Business Machines Corporation | Method and apparatus for choosing register classes and/or instruction categories |
JP4541218B2 (ja) | 2005-04-08 | 2010-09-08 | 三菱電機株式会社 | 指令生成装置 |
US20060265485A1 (en) * | 2005-05-17 | 2006-11-23 | Chai Sek M | Method and apparatus for controlling data transfer in a processing system |
US7603492B2 (en) * | 2005-09-20 | 2009-10-13 | Motorola, Inc. | Automatic generation of streaming data interface circuit |
US8612957B2 (en) * | 2006-01-26 | 2013-12-17 | Intel Corporation | Scheduling multithreaded programming instructions based on dependency graph |
US7441224B2 (en) * | 2006-03-09 | 2008-10-21 | Motorola, Inc. | Streaming kernel selection for reconfigurable processor |
US20080120497A1 (en) * | 2006-11-20 | 2008-05-22 | Motorola, Inc. | Automated configuration of a processing system using decoupled memory access and computation |
US8037466B2 (en) | 2006-12-29 | 2011-10-11 | Intel Corporation | Method and apparatus for merging critical sections |
US7971132B2 (en) * | 2007-01-05 | 2011-06-28 | Dialogic Corporation | Universal multimedia engine and method for producing the same |
US7802005B2 (en) * | 2007-03-30 | 2010-09-21 | Motorola, Inc. | Method and apparatus for configuring buffers for streaming data transfer |
US8136107B2 (en) * | 2007-10-24 | 2012-03-13 | International Business Machines Corporation | Software pipelining using one or more vector registers |
US8250342B1 (en) * | 2008-01-09 | 2012-08-21 | Xilinx, Inc. | Digital signal processing engine |
KR100946763B1 (ko) * | 2008-07-23 | 2010-03-11 | 성균관대학교산학협력단 | 코드 생성 방법 및 장치 |
IT1392495B1 (it) * | 2008-12-29 | 2012-03-09 | St Microelectronics Srl | Metodo per progettare un acceleratore ad elevate prestazioni di tipo asic (circuito integrato ad applicazione specifica - application-specific integrated circuit) |
US8370784B2 (en) * | 2010-07-13 | 2013-02-05 | Algotochip Corporation | Automatic optimal integrated circuit generator from algorithms and specification |
US9811335B1 (en) | 2013-10-14 | 2017-11-07 | Quicklogic Corporation | Assigning operational codes to lists of values of control signals selected from a processor design based on end-user software |
US9785413B2 (en) * | 2015-03-06 | 2017-10-10 | Intel Corporation | Methods and apparatus to eliminate partial-redundant vector loads |
US10157164B2 (en) * | 2016-09-20 | 2018-12-18 | Qualcomm Incorporated | Hierarchical synthesis of computer machine instructions |
US20220156078A1 (en) * | 2020-11-19 | 2022-05-19 | Arm Limited | Register rename stage fusing of instructions |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6123275A (ja) * | 1984-07-11 | 1986-01-31 | Nec Corp | ベクトル処理装置 |
US5530881A (en) * | 1991-06-06 | 1996-06-25 | Hitachi, Ltd. | Vector processing apparatus for processing different instruction set architectures corresponding to mingled-type programs and separate-type programs |
US5361373A (en) * | 1992-12-11 | 1994-11-01 | Gilson Kent L | Integrated circuit computing device comprising a dynamically configurable gate array having a microprocessor and reconfigurable instruction execution means and method therefor |
US5794062A (en) * | 1995-04-17 | 1998-08-11 | Ricoh Company Ltd. | System and method for dynamically reconfigurable computing using a processing unit having changeable internal hardware organization |
US5933642A (en) * | 1995-04-17 | 1999-08-03 | Ricoh Corporation | Compiling system and method for reconfigurable computing |
US5835771A (en) * | 1995-06-07 | 1998-11-10 | Rogue Wave Software, Inc. | Method and apparatus for generating inline code using template metaprograms |
US6035123A (en) * | 1995-11-08 | 2000-03-07 | Digital Equipment Corporation | Determining hardware complexity of software operations |
US5696956A (en) * | 1995-11-08 | 1997-12-09 | Digital Equipment Corporation | Dynamically programmable reduced instruction set computer with programmable processor loading on program number field and program number register contents |
US5819064A (en) * | 1995-11-08 | 1998-10-06 | President And Fellows Of Harvard College | Hardware extraction technique for programmable reduced instruction set computers |
US6016395A (en) * | 1996-10-18 | 2000-01-18 | Samsung Electronics Co., Ltd. | Programming a vector processor and parallel programming of an asymmetric dual multiprocessor comprised of a vector processor and a risc processor |
US6233599B1 (en) * | 1997-07-10 | 2001-05-15 | International Business Machines Corporation | Apparatus and method for retrofitting multi-threaded operations on a computer by partitioning and overlapping registers |
US7275246B1 (en) * | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US7065633B1 (en) * | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
JP2003518280A (ja) | 1999-02-05 | 2003-06-03 | テンシリカ インコーポレイテッド | 構成可能なプロセッサを設計するための自動プロセッサ生成システムおよび生成方法 |
US6779107B1 (en) * | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
US6457173B1 (en) * | 1999-08-20 | 2002-09-24 | Hewlett-Packard Company | Automatic design of VLIW instruction formats |
US7036106B1 (en) | 2000-02-17 | 2006-04-25 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6615340B1 (en) * | 2000-03-22 | 2003-09-02 | Wilmot, Ii Richard Byron | Extended operand management indicator structure and method |
US7028286B2 (en) * | 2001-04-13 | 2006-04-11 | Pts Corporation | Methods and apparatus for automated generation of abbreviated instruction set and configurable processor architecture |
US20030005423A1 (en) * | 2001-06-28 | 2003-01-02 | Dong-Yuan Chen | Hardware assisted dynamic optimization of program execution |
US7278137B1 (en) * | 2001-12-26 | 2007-10-02 | Arc International | Methods and apparatus for compiling instructions for a data processor |
US7254696B2 (en) * | 2002-12-12 | 2007-08-07 | Alacritech, Inc. | Functional-level instruction-set computer architecture for processing application-layer content-service requests such as file-access requests |
US7543119B2 (en) * | 2005-02-10 | 2009-06-02 | Richard Edward Hessel | Vector processor |
US8214808B2 (en) * | 2007-05-07 | 2012-07-03 | International Business Machines Corporation | System and method for speculative thread assist in a heterogeneous processing environment |
-
2001
- 2001-10-16 US US09/981,291 patent/US6941548B2/en not_active Expired - Lifetime
-
2002
- 2002-09-10 CN CNB028206045A patent/CN100367209C/zh not_active Expired - Lifetime
- 2002-09-10 WO PCT/US2002/028898 patent/WO2003034216A2/en active Application Filing
- 2002-09-10 KR KR1020047005643A patent/KR100705509B1/ko not_active IP Right Cessation
- 2002-09-10 JP JP2003536879A patent/JP4209776B2/ja not_active Expired - Fee Related
- 2002-09-10 GB GB0407839A patent/GB2398144B/en not_active Expired - Fee Related
- 2002-09-19 TW TW091121472A patent/TW594581B/zh not_active IP Right Cessation
-
2005
- 2005-08-18 US US11/208,239 patent/US7971197B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN100367209C (zh) | 2008-02-06 |
JP2005507105A (ja) | 2005-03-10 |
US20050278713A1 (en) | 2005-12-15 |
TW594581B (en) | 2004-06-21 |
US7971197B2 (en) | 2011-06-28 |
GB2398144B (en) | 2005-10-12 |
GB2398144A (en) | 2004-08-11 |
JP4209776B2 (ja) | 2009-01-14 |
KR100705509B1 (ko) | 2007-04-13 |
GB0407839D0 (en) | 2004-05-12 |
KR20040062567A (ko) | 2004-07-07 |
WO2003034216B1 (en) | 2004-12-16 |
WO2003034216A2 (en) | 2003-04-24 |
US20030074654A1 (en) | 2003-04-17 |
US6941548B2 (en) | 2005-09-06 |
WO2003034216A3 (en) | 2004-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1608247A (zh) | 自动指令集体系结构的产生 | |
Goodwin et al. | Automatic generation of application specific processors | |
Clark et al. | Automated custom instruction generation for domain-specific processor acceleration | |
Kim et al. | Efficient SIMD code generation for irregular kernels | |
Lozano et al. | Combinatorial register allocation and instruction scheduling | |
Park et al. | SIMD defragmenter: Efficient ILP realization on data-parallel architectures | |
Leupers et al. | Graph-based code selection techniques for embedded processors | |
Rokicki et al. | Hybrid-DBT: Hardware/software dynamic binary translation targeting VLIW | |
Giesemann et al. | Evolutionary algorithms for instruction scheduling, operation merging, and register allocation in VLIW compilers | |
Yang et al. | Auto-tuning fixed-point precision with TVM on RISC-V packed SIMD extension | |
Ravindran et al. | Partitioning variables across register windows to reduce spill code in a low-power processor | |
Yoshida et al. | Parallel java code generation for layer-unified coarse grain task parallel processing | |
Kessler | Compiling for VLIW DSPs | |
Corporaal et al. | Code generation for transport triggered architectures | |
Li et al. | Selecting profitable custom instructions for reconfigurable processors | |
Rau et al. | Machine-description driven compilers for epic processors | |
Park et al. | Microarchitecture-aware code generation for deep learning on single-isa heterogeneous multi-core mobile processors | |
Kessler | Compiling for VLIW DSPs | |
CN101076780A (zh) | 针对程序中循环的编译方法、编译设备和计算机系统 | |
Sassone et al. | Static strands: Safely exposing dependence chains for increasing embedded power efficiency | |
Aa et al. | A backtracking instruction scheduler using predicate-based code hoisting to fill delay slots | |
Choi et al. | Address assignment in DSP code generation-an integrated approach | |
Kultala et al. | Improving Code Density with Variable Length Encoding Aware Instruction Scheduling | |
Kiran et al. | Global scheduling heuristics for multicore architecture | |
Pegatoquet et al. | Rapid development of optimized DSP code from a high level description through software estimations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term |
Granted publication date: 20080206 |
|
CX01 | Expiry of patent term |