编译装置的制作方法

文档序号:6433853阅读:111来源:国知局
专利名称:编译装置的制作方法
技术领域
本发明涉及一种编译装置,能够将诸如C语言这样的高级语言写成的源程序翻译为机器语言程序,特别是涉及定向于编译器的优化设计。
背景技术
已经提出有各种高级语言编译器,用于将高级语言写成的源程序编译成机器语言指令序列(例如,参见日本专利申请No.2003-99269))。
然而,这些传统的高级语言编译器在用于增加执行速度等等的优化机器语言指令序列方面,无法考虑到例如高速缓冲存储器这样的硬件构造。
因此,为了产生能考虑到硬件构造的机器语言指令序列,必须产生一种使用汇编语言的程序,并创建一种考虑到硬件构造的算法,从而可根据这种创建的算法来产生源程序。
然而,问题在于需要大量的工时来研发使用汇编语言的程序。
并且,另一个问题是,以汇编语言所写的程序由于可移植性很差具有很低的资产价值。
另外,在现代,硬件的规模和构造越来越大,越来越复杂,很难通过人力来创建能考虑到硬件的算法,并根据这种算法来进行性能调节。

发明内容
本发明就是考虑到上述问题而提出的,本发明的第一目的是提供一种能够以很少的工时来实现程序研发的编译装置。
本发明的第二目的是提供一种能够产生具很高资产价值的程序的编译装置。
本发明的第三目的是提供一种不需要通过人力来进行性能调节的编译装置。
为了实现上述目的,根据本发明的编译装置是一种将高级语言所写的源程序翻译为机器语言程序的编译装置,包括指示获得单元,用于获得将要产生的机器语言应当被优化的指示;分析单元,用于分析该源程序;中间码转换单元,用于根据分析单元执行分析的结果将源程序转换为中间码;优化单元,用于根据该指示来优化该中间码;和码产生单元,用于将该中间码转换为机器语言程序,其中该指示是用于优化该机器语言程序的指示,该机器语言程序适用于使用高速缓冲存储器的处理器。
通过上述结构,可根据优化指示来优化中间码。从而,可以产生仅提供一个指示就能有效使用高速缓冲存储器的机器语言程序,而不必利用汇编语言来开发程序。因此,比起利用汇编语言来开发程序的情况,需要较少的工时。并且,通过简单地以高级语言写一个源程序,并以上述方式提供一个指示,就可以产生能够有效使用高速缓冲存储器的机器语言程序。这样就能够通过各种方式改变指示来执行多种优化,从而提高了程序的资产价值。并且,还不需要通过人力来进行性能调节。
最好,指示获得单元获得的指示为,在源程序中的特定环路(loop)处理应当被分为多个环路子处理,以使所述环路处理中包含的数据对象能够以预订的数据尺寸为单元被置于高速缓冲存储器中,从而优化单元根据所述指示将该环路处理划分为多个环路子处理,所述环路处理是该指示获得单元所获得的指示的目标。
通过上述结构,执行环路划分从而可将环路处理中包含的数据对象同时置于高速缓冲存储器中。因此,可以避免由于试图同时处理这些数据对象,但是无法将大量数据对象同时装载到高速缓冲存储器中而引起的高速缓存未中(cache miss)。
最好,该指示获得单元获得的指示为,在源程序中的特定数据对象应当在所述数据对象被查找之前就存储在高速缓冲存储器中,从而优化单元在所述数据对象被查找之前,将所述数据对象存储在高速缓冲存储器中。
通过该指示,可以避免出现由于执行程序时要使用的数据对象不在高速缓冲存储器中而引起的未中(hit miss)。
最好,该指示获得单元获得(i)一个指示,指示源程序中的特定数据对象应当以高速缓冲存储器中的行数据尺寸为单元被分组,并且放置在不同组中的数据对象应当被置于高速缓冲存储器上具有不同集合号的多个高速缓存器入口中,(ii)特定数据对象的名称,优化单元将各个名称所规定的特定数据对象以高速缓冲存储器中的行数据尺寸为单元进行分组,并将所述特定数据对象置于高速缓存器入口,从而使放入不同组中的数据对象不会被置于高速缓冲存储器上具有相同集合号的任何高速缓存器入口中。
因此,可以避免出现由于在相似时刻访问的多个数据对象都竞争高速缓冲存储器上具有相同集合号的块,并试图刷新其他数据对象,从而造成冲突进而引起的高速缓存未中。
最好,高速缓冲存储器的多个高速缓存器入口的每个入口都包括一个具有数值的弱标志(weak flag),该数值指示每个所述高速缓存器入口中存储的一个数据对象应当被优先丢弃,该处理器将要使用的主存储器包括(i)弱空间,其中存储的数据对象将被安排到高速缓冲存储器的其中一个高速缓存器入口之外,其中当执行所述安排时所述高速缓存器入口的弱标志被设置为一个值,所述值可使所述数据对象被优先丢弃,和(ii)高速缓存空间,其中存储的数据对象将被安排到高速缓冲存储器的其中一个高速缓存器入口之外,其中当执行所述安排时所述高速缓存器入口的弱标志没有被设置为一个值,所述值可使所述数据对象被优先丢弃,指示获得单元获得(i)一个指示,指示源程序中的特定数据对象应当根据安排信息被存储在弱空间或高速缓存空间中,该安排信息指示所述特定数据对象应当被安排在弱空间还是高速缓存空间中,(ii)所述特定数据对象的名称,和(iii)所述安排信息,优化单元根据该安排信息使所述名称规定的特定数据对象被安排在弱空间或高速缓存空间中。
通过将数据对象置于适当的空间,例如置于弱空间中,可以实现将一个弱位设定到不常使用的数据对象上,以便从高速缓冲存储器优先丢弃该数据对象。从而,可以避免出现,由于多个数据对象都竞争高速缓冲存储器上具有相同集合号的块,并试图刷新其他数据对象,从而造成冲突进而引起的高速缓存未中。
最好,指示获得单元从源程序获得一个指示,用于使高速缓存控制单元能够控制该高速缓冲存储器执行一个专用于所述高速缓存控制单元的专用命令,优化单元使高速缓存控制单元根据该指示而执行所述专用命令。
通过规定高速缓存控制单元所执行的专用命令,可以使用户能够规定高速缓冲存储器的精细控制。从而,可以避免出现高速缓冲存储器的高速缓存未中。
应当注意,本发明不仅可以被实现为具有上述特征单元的编译装置,也可以作为一种编译方法,该方法包括将这些特征单元安装到上述编译装置中的步骤,还可以作为一种程序,该程序可使计算机执行上述编译装置中包含的每个单元的功能。还应当注意,该程序应当被分配在例如只读光盘存储器(CD-ROM)这样的记录介质上,和例如互联网这样的传输介质上。
根据本发明,可以实现以下效果比起利用汇编语言来开发程序的情况,需要更少的工时;提高了程序的资产价值;不需要利用人力来进行性能调节;可以避免出现由于无法将多个数据对象同时装载到高速缓冲存储器中而引起的高速缓存未中。
可以避免出现由于执行程序时要使用的数据对象不在高速缓冲存储器中而引起的高速缓存未中。
可以避免出现,由于多个数据对象都竞争高速缓冲存储器上具有相同集合号的块,并试图刷新其他数据对象,从而造成冲突进而引起的高速缓存未中。
2003年10月17日提交的日本专利申请No.2003-357323的全部公开内容,包括说明书,附图和权利要求,都在这里结合引用并作为参考。


通过以下结合附图对本发明一个特定实施例的说明,本发明的这些和其他目的、优点和特征将变得明显。在附图中图1是表示根据本发明优选实施例的目标计算机的部分硬件构造的框图;图2是表示高速缓冲存储器的硬件构造的框图;图3是表示一个高速缓存器入口的详细的位结构的框图;图4是表示子高速缓冲存储器的硬件构造的框图;图5是解释主存储器中包含的存储单元的类型的示意图;图6是表示用于开发机器语言程序的程序开发系统的构造的框图;图7是表示编译器的构造的功能框图;图8A-8C是解释拼铺(tiling)处理的示意图;图9A-9B是解释用于检验出现容量未中(capacity miss)的处理的示意图;图10A-11B是解释预取指令插入处理的规定的示意图;图12是解释利用杂注指示(pragma directive)将要对环路中的阵列执行的预取指令插入处理的示意图;图13A-13G是解释利用简要(profile)信息来规定预取指令插入处理的方法的示意图;图14是解释数据安排处理的总体情况的示意图;图15A-15D是解释用于规定数据项目如何安排的方法的示意图;图16是表示包含规定数据安排的杂注指示的示例性源程序的示意图;图17是表示分到组中的对象的示意图;图18是表示包含用于规定数据安排的杂注指示的示例性源程序的示意图;图19A-19C是表示用于规定将要存储对象的空间的方法的示意图;图20是表示在专用寄存器DPTEL中存储的信息的示意图;图21A-21H是表示内部功能的示意图;图22是表示高速缓存命令插入单元所产生的示例性中间码的示意图;图23A-23H是表示用于检验图21A-21H所示的内建功能是否有效运行的内建功能的示意图;和图24A-24E是解释用于规定将要输入/输出到编译器的各种信息的方法的示意图。
具体实施例方式
图1是表示根据本发明优选实施例的编译系统的目标计算机的部分硬件构造的框图。计算机10包括处理器1,主存储器2,高速缓冲存储器3,子高速缓冲存储器4,和高速缓存控制单元5。处理器1是一个执行机器语言程序的处理单元,它除了普通处理器的功能之外,还具有下面将要说明的专用寄存器6(专用寄存器DPTEL)。
主存储器2是一个存储器,存储有处理器1将要执行的机器语言指令和各种数据。
高速缓冲存储器3是一个根据4路集合相关方案而操作的存储器,并能够以高于主存储器2的速度执行数据读出和写入。应注意高速缓冲存储器3的存储容量小于主存储器2的容量。
子高速缓冲存储器4是一个根据直接映射方案而操作的存储器,能够以高于主存储器2的速度执行数据读出和写入。应注意子高速缓冲存储器4的存储容量小于高速缓冲存储器3的容量。
高速缓冲控制单元5是一个用于控制高速缓冲存储器3和子高速缓冲存储器4的处理单元,它具有下面将要描述的专用寄存器7-9(专用寄存器TACM,TACSZ,和TACSTAD)。
图2是表示高速缓冲存储器3的硬件构造的框图。如本图所示,高速缓冲存储器3是一个4路集合相关的高速缓冲存储器,配置有地址寄存器20,解码器30,四个通路31a-31d(以下简称为通路0-3),四个比较器32a-32d,四个与(AND)电路33a-33d,一个或(OR)电路34,选择器35,和解复用器37。
地址寄存器20是一个保存访问主存储器2所用的访问地址的寄存器。该访问地址应当是32位。如图2所示,访问地址包括下列单元,从最高有效位开始21位的标签地址;4位的集合索引(在图中以“SI”表示)。这里,标签地址表示主存储器上将被映射到多个通路的单元(location)。集合索引(SI)表示通路0-3所存储的多个集合中的一个。集合的数目为16,因为集合索引(SI)是4位的。标签地址和集合索引(SI)所规定的一个块作为一个替换单元。当存储到高速缓冲存储器中时,一个块被称为“行数据”,“行”或“高速缓存入口”。行数据的大小为128(=27)字节,这是由作为集合索引(SI)最低有效位的下一几个较低有效位的地址位(7位)确定的。假定一个字(word)为4字节,一个行数据由32(=128/4)个字构成。当向一个通路访问时,忽略从地址寄存器20中的最低有效位开始的7个位。
解码器30对集合索引(SI)的4个位解码,并从四个通路0-3所存储的16个集合中选择一个。
四个通路0-3具有彼此相同的构造,并具有4×2k字节的总存储容量。通路0具有16个高速缓存入口。
图3是表示一个高速缓存器入口的详细的位结构的框图。如图所示,一个高速缓存入口包括有效标志V,21位的标签,128字节行数据,弱标志W,和污损标志(dirty flag)D。有效标志V表示该高速缓存入口是否有效。该标签是21位标签地址的拷贝。行数据是标签地址和集合索引(SI)所规定的一个块中包含的128字节数据的拷贝。污损标志D表示是否已对高速缓冲存储器执行了写入,即是否需要将已被缓存到高速缓存入口的数据写回到主存储器2,因为由于执行了写入,所述数据现在已不同于主存储器2中存储的数据。弱标志W是一个指示其中数据应当被丢弃的高速缓存入口的标志。当高速缓冲存储器3中出现高速缓存未中时,弱标志W为1的高速缓存入口中的数据最好被丢弃。
通路1-3与通路0具有相同的构造。四个高速缓存入口被称为一个“集合(set)”,这些高速缓存入口在四个通路上被存储,并根据集合索引(SI)的四个比特通过解码器30被选择。
比较器32a比较地址寄存器20中的标签地址和根据集合索引(SI)所选择的集合中包含的四个标签中通路0的标签,看它们是否匹配。比较器32b-32d对它们相应的通路1-3分别执行相同的处理。
与电路33a比较有效标志V和比较器32a的比较结果,看它们是否匹配。假定与电路33a的比较结果为h0。当比较结果h0为1时,这意味着存在对应于地址寄存器20中的标签地址和集合索引(SI)的行数据,即在通路0中有一个高速缓存命中(hit)。当比较结果h0为0时,这意味着通路0中出现一次高速缓存未中。与电路33b-33d对它们相应的通路1-3分别执行相同的处理。它们的比较结果h1-h3指示在各自的通路1-3中是高速缓存命中还是高速缓存未中。
或电路34在比较结果h0-h3中执行逻辑或操作。假定该逻辑或为“命中”。“命中”指示在高速缓冲存储器3中是否有高速缓存命中。
选择器35从所选集合的通路0-3中的多个行数据中,选择出现高速缓存命中的通路中的行数据。
当将数据写入高速缓存入口时,解复用器37将写数据输出到通路0-3之一。
图4是表示子高速缓冲存储器4的硬件构造的框图。如图所示,子高速缓冲存储器4是一个使用直接映射方案(1路集合相关系统)的高速缓冲存储器,它配置有地址寄存器44,解码器40,通路41,比较器42,以及和电路43。
地址寄存器44是一个保存访问主存储器2所用的访问地址的寄存器。该访问地址应当是32位。如图4所示,访问地址包括下列单元,从最高有效位开始21位的标签地址;1位的集合索引(在图中以“SI”表示)。这里,标签地址表示主存储器上将被映射到该通路的位置。通路41中的集合数目为2,因为集合索引(SI)是1位的。标签地址和集合索引(SI)所规定的一个块用作为一个替换单元。当存储到高速缓冲存储器中时,一个块被称为“行数据”,“行”或“高速缓存入口”。行数据的大小为128字节。假定一个字为4字节,一个行数据由32(=128/4)个字构成。当向通路41访问时,忽略地址寄存器44中从最低有效位开始的10个位。
解码器40对集合索引(SI)的1个位解码,并从2个集合中选择一个。高速缓存入口的结构如图3所示。
比较器42比较地址寄存器44中的标签地址和根据集合索引(SI)所选择的集合中包含的标签,看它们是否匹配。
与电路43比较有效标志V和比较器42的比较结果,看它们是否匹配。假定与电路43的比较结果为“命中”。当比较结果“命中”为1时,这意味着存在对应于地址寄存器44中的标签地址和集合索引(SI)的行数据,即出现高速缓存命中。当比较结果“命中”为0时,这意味着出现高速缓存未中。
图5是解释主存储器2上的存储单元的类型的示意图。这些存储单元被分为四种类型高速缓存空间;弱空间;子高速缓存空间;和不可缓存空间。在高速缓存空间或弱空间中安排的指令或数据被读出/写入高速缓冲存储器3。其中,当被安排到高速缓冲存储器3中时,1被设定为弱空间中的数据的弱位W。在子高速缓存空间中安排的指令或数据被读出/写入子高速缓冲存储器4。同时,在不可缓存空间中安排的指令或数据被处理器1直接交换,而不必放置到高速缓冲存储器3或子高速缓冲存储器4中。
图6是表示用于开发计算机10的处理器1执行的机器语言程序的程序开发系统50的框图。该程序开发系统50由调试器52,模拟器54,简要表(profiler)56,和编译器58。
编译器58是一个程序,用于读出从简要表56输出的源程序和简要信息64,并将该源程序转换为机器语言程序,它内部配置有用于优化机器语言指令的优化单元68。下面将详细说明编译器58。
调试器52是一个程序,用于在编译器58编译该源程序时,识别所发现故障的位置和原因。模拟器54是一个实际执行机器语言程序的程序,其执行结果作为执行记录信息62被输出。应注意模拟器54内部配置有高速缓存模拟器60,可输出高速缓冲存储器3和子高速缓冲存储器4的仿真结果作为部分执行记录信息62,该仿真结果例如是高速缓存命中和高速缓存未中。
简要表56是一个程序,用于分析执行记录信息62,并输出简要信息64,该简要信息64在执行优化等操作时作为编译器58的提示信息。
图7是表示编译器58的构造的功能框图。编译器58是一个交互编译器,可将诸如C语言和C++语言这样的高级语言写成的源程序72转换为用于上述处理器1的机器语言程序92。编译器58可被实现为计算机,例如个人计算机可执行的程序,该编译器包括分析单元76,中间码转换单元78,优化单元68,和代码产生单元90作为其主要部件。
分析单元76是一个预处理单元,用于从将被编译的源程序72中提取保留字(关键字)等等,并对提取的字执行词法分析。
中间码转换单元78是一个处理单元,用于根据一定的规则将分析单元72传送来的源程序72中的每个语句转换为中间码。这里,中间码是一种通常由函数调用形式(例如,一个表示为“+(int a,int b)”的代码指示“整数b与整数a相加”)来表示的代码。然而,中间码不仅包括函数调用形式的代码,还包括处理器1的机器语言指令。中间码转换单元78当产生这种中间码时,还产生关于简要信息64的优化中间码。
优化单元68是一个处理单元,用于根据中间码转换单元78输出的中间码,通过指令链接,冗余去除,指令重排序,寄存器分配和其他处理,来增加执行速度和减少代码大小。除了普通的优化功能,该优化单元68还配置有以下处理单元,用于执行该编译器58独有的优化处理,这些单元包括拼铺单元84;预取指令插入单元86;安排集合信息设定单元87;和高速缓存命令插入单元88。下面将详细说明拼铺单元84、预取指令插入单元86、安排集合信息设定单元87和高速缓存命令插入单元88执行的处理。应注意优化单元68还在她/他再次创建源程序72时,输出调节提示信息94作为对用户的提示,该提示信息例如是关于高速缓冲存储器3中的高速缓存未中的信息。
代码产生单元90根据内部存储的转换表等,通过将优化单元68输出的所有中间码都转换为机器语言指令,而产生机器语言程序92。
编译器58专门用于减少高速缓冲存储器3中的高速缓存未中的次数。高速缓存未中被大致分类为(1)初始未中,(2)容量未中,(3)冲突未中。当高速缓冲存储器3中没有执行程序时需要使用的对象时,出现“初始未中”。当试图同时处理大量对象,但是无法在高速缓冲存储器3中同时装载入这些对象时,出现“容量未中”。“冲突未中”是由于多个对象都竞争高速缓冲存储器3上的相同高速缓存入口,并试图从该高速缓存入口中相互刷新所引致的。
以下,将对具有上述结构的编译器58执行的特征操作提供具体例子和详细说明。
(1)拼铺处理拼铺处理是当出现容量未中时使用的一种技术,用于通过将一个环路划分为多个环路,使将要同时处理的对象数量最小化到与高速缓冲存储器3相同或更小的容量。通过拼铺单元84来执行该拼铺处理。
图8A-8C用于说明该拼铺处理。
图8A和8B示出用于指定该拼铺处理执行的示例性杂注。注意,“杂注(或杂注指示)”是对编译器58的指示,它是以“#pragma”开头的字符串,用户可以在源程序72中对它任意指定(安排)。
图8A中所示的杂注指示将该拼铺处理的执行指定为允许环路处理中所用的对象的数据量为固定尺寸(由“MUM”指定的字节数据量)。注意当没有指定该数据量MUM时,允许该数据量为预定(默认)尺寸的拼铺处理的执行被指定。
图8B所示的杂注指示将该拼铺处理的执行指定为使环路处理中的环路数目为恒定数目(由“MUM”指定的值)。注意当没有指定该数目MUM时,将该拼铺处理的执行定义为允许环路的数目为预定(默认)数目。
注意在上述杂注指示中,紧跟在杂注指示后面被描述的环路处理将被执行。
在图8C中的(a)示出没有包括任何杂注指示的示例性环路处理。在图8中的(b)示意性地示出环路处理中环路计数器的值的变化,如图8C中的(b)中所示,每当环路计数器I增加1,则环路计数器j也将在0到999的范围内增加1。因此,当将对象“c”安排在主存储器2上的可高速缓存的空间或弱空间中时,由于视图同时将对象“c”(1000个阵列单元)安排在高速缓冲存储器3上而导致容量未中发生。
因此,如图8C中的(c)中所示,通过就在源程序72中的第二次环路处理之前插入杂注指示“#pragma_loop_tiling_times=100”,可以将图8C中(a)中所示的源程序72转变为图8C中(d)中所示的源程序72。换句话说,可以将用于在0到999范围内将环路计数器j的值加1进行1000次的处理转换为用于执行10次环路迭代从而将环路计数器k的值增加100次的处理。因此可以将一次安排在缓冲存储器3上的对象的数目减小到阵列“c”的100个元素,从而防止发生容量未中。注意由于如上所述拼铺处理是利用拼铺单元84执行的,因此实际上可以以中间码的形式执行从图8C中(c)中所示的源程序72到图8C中(d)中所示的源程序72的转换。
注意即使当例如高速缓冲存储器3的容量等硬件结构有所改变时,使用杂注指示也能够通过改变数据量MUM和数目MUM的值,然后通过执行再次编译,简单地响应这种变化。因此,可以提高源程序的资产价值。
注意该拼铺单元84也可以检查是否出现任何容量未中。图9A和9B用于说明用于检查该容量未中发生的处理。通过将例如如图9A所示的用于输出指示是否存在任何容量未中的信息的杂注定义为调整提示信息94,然后通过就在源程序72中环路将要被检查之前描述该杂注,可以将指示指定环路中是否出现容量未中的信息作为调整提示信息94输出。
在图9B中的(a)示出包括环路处理的源程序72的一个例子,而图9B中(b)示出源程序72的一个例子,其中将图9A中所示的杂注指示正好插入到图9B的(a)中所示的源程序72中包括的各环路之前。如图9B中的(c)中所示,通过编译图9B中(b)中所示的源程序,可以将指示这两个环路处理中是否存在容量未中的信息作为调整提示信息94输出。因此,用户可以通过查阅该输出的调整提示信息94,知道是否存在任何容量未中。而且,通过将图8A或8B中所示的杂注指示插入到源程序72中,可以实现执行拼铺处理,从而防止发生容量未中。
注意对于相同的环路,可以同时指定图8A或8B中所示的杂注指示和图9A中所示的杂注指示。
还应当注意除了通过将图9A中所示的杂注指示正好插入到环路之前从而使拼铺单元84检查是否存在容量未中的结构以外,还可以将本发明设计为自动执行拼铺处理,从而不会导致任何容量未中。
(2)预取指令插入处理预取指令插入处理是指用于将一个指令插入到中间码中的处理,该指令用于预先将存储在主存储器2上的指定位置中的对象预取到高速缓冲存储器3中。该预取指令插入处理是由预取指令插入单元86执行的。
图10A-11B示出用于说明指定预取指令插入处理的方法。图10A-10D示出对于特定变量是如何指定预取指令插入处理的。
图10A和10B示出使用杂注指示的预取指令插入处理的说明,其中每个这种说明都是为了插入一个指令,该指令用于将指定变量名字的值预取到高速缓冲存储器3中。注意在循环数目为如图10B所示被指定的情况下,将该预取指令插入到在查找指定变量之前的所述数目的那个点。在如图10A所示没有指定循环数目时,将预取指令插入到在查找指定变量之前的预定次数循环(默认循环)的那个点。换句话说,例如,如图10E所示,插入预取指令,该预取指令用于在实际访问该变量“a”之前,将该变量“a”预取指定循环数目或预定循环数目。
图10C和10D示出利用内建函数对预取指令插入处理的规定。图10C和10D中所示的各内建函数包括地址和尺寸作为变元。这些内建函数中每一个都指示应当插入一个指令,该指令用于预先将主存储器2上的一个位置中的值预取到高速缓冲存储器3中,该位置的开始地址为上述地址且由上述尺寸指定。注意当如图10D所示那样指定了循环数目时,将执行与图10B所示的杂注指示的情况中的处理等效的处理,而当如图10C所示没有指定循环数目时,执行与图10A所示的杂注指示的情况中的处理相等效的处理。
图11A和11B示出如何利用杂注指示来为环路中的阵列指定预取指令插入处理。紧跟各杂注指示之后描述的环路处理是将被执行的。当如图11B所示指定了循环数目时,插入一个指令,从而可以在实际查找一阵列元素之前将该阵列元素预取指定循环数目。另一方面,当如图11A所示没有指定循环数目时,插入一指令,从而在之前默认数目循环的点预取该元素。
图12用于说明使用杂注指示对环路中的阵列执行预取指令插入处理。当在如图12中(a)所示的源程序72中的环路处理中描述了如图12中(b)所示的用于预取阵列“a”的杂注的情况下,按照如图12中(c)中所示,插入预取指令插入命令dpref()。通过执行“dpref(&a
)”和“dpref(&a[4])”,可以将当环路计数器的值i满足i=0和i=1时查找的阵列a
到a[7]的值预取到高速缓冲存储器4中。随后,开始环路处理,通过执行“dpref(&a[i+8])”,可以将两个循环之后将要使用的阵列元素预取到高速缓冲存储器3中。如上所述,在环路迭代期间预取了这些元素。具体说,在查找这些元素的迭代之前执行的那次迭代中,预取这些阵列元素。注意,实际上,该预取指令插入单元86将该预取指令插入到中间码中。
因此,通过执行上述预取指令插入处理,可以防止发生初始未中。
注意,通过使用简要信息64,可以自动插入预取指令。图13A-13G用于说明利用简要信息64来指定预取指令插入处理的方法。
图13A示出利用编译选项来指定预取指令插入处理的方法。当在编译时设定了该选项时,根据简要信息64检查造成初始未中的对象,并插入用于预取该对象的指令。注意,通过该编译选项,还可以像上述指定方法的情况一样,指定与应当插入预取指令的定时相对应的循环数目。
图13B-13D示出利用杂注方式来指定预取指令插入处理的方法。如图13E所示,图13B中所示的杂注和图13C中所示的杂注是成对使用的,在“#pragma_prof_insert_dpref on”和“#pragma_prof_insert_dprefoff”所定界的区域中将插入预取指令。
当在源程序72中指定了图13D中所示的杂注时,它表示将根据编译选项来执行随后的指令。特别是,在设定了图13A所示的编译选项的情况下,根据该选项,基于简要信息64插入预取指令,而在没有设定编译选项的情况下,不会插入一预取指令。注意在源程序72中可将图13B-13D所示的杂注作为内建函数来说明。
图13F和13G示出了利用内建函数的方式来指定预取指令插入处理的方法。图13F和13G中所示的各内建函数包括地址和尺寸作为变元。这些内建函数中的每一个都指示应当将一指令插入,即希望预先预取主存储器2上一个位置中的值到高速缓冲存储器3中,在该位置中出现初始遗漏时,该主存储器2的开始地址就是上面的地址,它由上面的尺寸来指定。注意如图13G所示,在上述指定方法的情况下,还可以指定对应将要插入预取指令的定时的循环数目。可以将这些指定实现为杂注指示。
如上所述,考虑到高速缓冲存储器3中的等待时间,通过插入预取指令,可以防止涉及指定对象的初始未中。特别是,例如在对将要预取的变量进行访问之前没有出现任何其他指令的情况下,在考虑简要信息64的用于插入预取指令的处理中,不可能在所指定数目的循环或默认数目循环的间隔之后,插入这种预取指令。因此,由于在这种情况下插入预取指令没有用处,因此不执行这种指令插入。另外,由于不需要预取高速缓冲存储器3中已经存在的对象,因此在这种情况下也不执行预取指令的插入。通过参考简要信息64可以判断是执行不插入还是执行预取。
(3)数据安排指定处理图14用于说明数据安排处理。如图14中的(a)中所示,假设源程序中包括的多个变量中的一些形成三个变量组(变量组A-C),在相似的定时对这三个变量组进行访问(例如,持续时间重叠的多个变量)。在各变量组中包括的数据的尺寸应当为128字节,这正好是高速缓冲存储器3中的行数据的尺寸。在编译系统中产生机器语言指令,从而当将这三个变量组写入到高速缓冲存储器3中时,可以将它们写入到具有不同集合编号的块中。例如,如图14中的(b)中所示,假设变量组A、B和C分别被安排在与高速缓冲存储器3上的集合0、1和15相对应的多个块中,则变量组A、B和C将被存储到主存储器2上的存储位置中,从而当将它们写入到高速缓冲存储器3中时,可以将它们写入到对应集合0、1和15的多个块中。因此,如图14中的(C)中所示,当从主存储器2向高速缓冲存储器3写入的时候,可以将变量组A、B和C写入到对应集合0、1和15的多个块中。因此,不会发生在相似定时访问的多个对象竞争高速缓冲存储器上具有相同集合编号的一个块并试图刷新掉其它对象的这样的冲突。
图15A-15D用于说明指定怎样安排数据项目的方法。在如图15A所示的杂注中由多个对象的名字来指定它们,并且在这些对象的总尺寸等于或小于行数据的尺寸(128字节)的情况下,可以按照将这些对象安排在高速缓冲存储器3上的相同集合中的方式来执行最优化。相反当这些对象的总尺寸超过了128字节时,按照128字节的规格将这些对象分组,并按照将分到不同组中的对象安排到高速缓冲存储器3上的不同集合中的方式来执行最优化。
如图16所示,例如利用“#pragma_overlap_access_object a,b,c”的杂注指定,用户可以明确地指示在相同的定时访问整数阵列a[32]、b[32]和c[32]。在阵列a[32]、b[32]和c[32]形成一个对象组的情况下,安排集合信息设定单元87根据该杂注将它们分为128字节的多个组。假设整数变量为4个字节,则阵列a[32]、b[32]和c[32]中的每一个都为128个字节。因此,可以将该组对象分为图17所示的三个组(data_a,data_b和data_c组),其中阵列a[32]包括在组data_a中,阵列b[32]包括在组data_b中,阵列c[32]包括在组data_c中。
在这种分组处理之后,安排集合信息设定单元87为各组制定不同的集合编号。例如,分别为组data_a,data_b和data_c指定集合编号0,1和2。
然后,安排集合信息设定单元87产生多个中间码,这些中间码可以使各组的对象被安排在高速缓冲存储器3上的对应块中,其中这些块的集合编号已经在上述组编号设定处理中被指定。
使用图15B所示的杂注使得可以指定将要安排对象的高速缓冲存储器3上的集合编号。例如如图18所示,在源程序72中指定“#pragma_cache_set_number=0 i”、“#pragma_cache_set_number=1 j”和“#pragma_cache_set_number=2k”的情况下,产生中间码,从而可以分别将阵列i,j和k安排在高速缓冲存储器3上具有集合编号0、1和2的集合中。
在如图15C所示的杂注的情况下,安排集合信息设定单元87产生中间码,这些中间码允许通过指定对象的名称和地址实现将对象存储到主存储器2上指定地址处的位置中。例如在根据简要信息64和调整提醒信息94已经预先知道了对象希望存储到的位置的地址的情况下,使用该方法。
在利用图15D所示的编译选项向编译器给出指示的情况下,安排集合信息设定单元87产生多个中间码,这些中间码确定寿命重叠的多个对象在高速缓冲存储器3上的地址,从而将这些对象安排在高速缓冲存储器3上的不同集合中,并允许将这些对象安排在对应地址中。
通过上述数据安排指定处理,可以避免发生多个对象竞争高速缓冲存储器上具有相同集合编号的一个块并试图刷新掉其它对象的这样的冲突。从而可能减少冲突未中的数目。
(4)存储空间指定处理如上所述,主存储器2包括四种类型的存储空间(可高速缓存空间,弱空间,子高速缓存空间和不可高速缓存空间)。图19A-19C示出用于指定将要存储对象的空间的方法。如上所述,处理器1具有专用寄存器6(专用寄存器DPTEL)。图20示出存储在专用寄存器DPTEL中的信息。存储在专用寄存器DPTEL中的是主存储器2上的页地址和指示它是子高速缓存空间还是弱空间的S/W标志。注意存在四个专用寄存器DPTEL,它们的编号分别为0到3。
当在源程序72中指定了图19A所示的杂注时,安排集合信息设定单元87产生中间码,该中间码可以允许将指定变量安排在具有指定编号的专用寄存器DPTEL中所包括的处于页地址处的位置中。注意该页地址是子高速缓存空间还是弱空间将由S/W标志来指定,该S/W标志包括在专用寄存器DPTEL中。例如,当S/W标志的值为1时,指定子高速缓存空间,而当S/W标志的值为0时指定弱空间。
当在编译时指定了如图19B所示的编译选项时,安排集合信息设定单元87根据简要信息64产生一种中间码,该中间码可以允许将变量安排在主存储器2上的一空间中,即子高速缓存空间、弱空间和不可高速缓存空间中的一个,该空间可有效安排该变量。例如,在大型阵列仅被查阅一次的情况下,安排集合信息设定单元87产生用于将该阵列安排在子高速缓存空间中的中间码,这是因为该阵列被访问的频率很低。
当在源程序72中指定了如图19C所示的杂注时,安排集合信息设定单元87根据该简要信息64检查是否可以有效地将杂注中所指定的变量安排在指定空间中,并当可以有效实现时,产生可以允许将该指定变量安排在该空间中的中间码。
如上所述,可以通过将对象安排在适当空间中而防止出现冲突未中。例如,使用子高速缓存空间可能防止高速缓冲存储器3上经常使用的对象被从该高速缓冲存储器3中刷新掉。另外,使用弱空间可以为不长使用的对象设定弱比特W,从而从该高速缓冲存储器3中择优地删除该对象。
(5)高速缓存命令插入处理下面将描述在源程序72中用于指定将由高速缓存控制单元5执行的专用命令的内建函数。
图21A-21H示出了这些内建函数。
图21A中所示的函数可以使高速缓存控制单元5执行下面的处理预先将主存储器2上由一变元指定的位置读入到高速缓冲存储器3中的处理(下称“填充处理”);和用于回写需要被回写的必要行数据的处理(下称“回写处理”)。注意是根据变量名字(变量的顶地址)或地址以及从该地址开始的尺寸,由一变元来指定该主存储器2上的位置。
图21B所示的函数可以使高速缓存控制单元5执行填充处理和用于将弱标志W设定为1的处理(下称“弱化处理”)。
图21C所示的函数可以使高速缓存控制单元5执行下面的处理仅用于预先确保对应于被指定为一变元的主存储器2上的位置的高速缓存入口的处理(下称“接触处理”);和回写处理。
图21D所示的函数可以使高速缓存控制单元5执行接触处理和弱化处理。
图21E所示的函数可以使高速缓存控制单元5执行回写处理和用于无效对应于指定为一变元的主存储器2上的位置的高速缓冲存储器上的高速缓存入口的处理(下称“无效处理”)。
图21F所示的函数可以使高速缓存控制单元5执行无效处理。
图21G所示的函数可以使高速缓存控制单元5执行接触处理。
图21H所示的函数可以使高速缓存控制单元5执行填充处理。
图21A-21H中所示的函数都包括在源程序72中,该高速缓存命令插入单元88产生多个中间码,用于使高速缓存控制单元5执行上述处理。
通过利用高速缓存控制单元5的专用寄存器TACSTAD注册主存储器2上对象位置的开始地址,利用专用寄存器TACTSZ注册从该开始地址的尺寸,利用专用寄存器TACM注册该命令,使高速缓存控制器5执行一专用命令。
因此,该高速缓存命令插入单元88可以产生例如如图22所示的中间码。注意,假设该处理器1具有很长指令字(VLIW)结构,则写入这些中间码。首先,将命令写到通用寄存器r0中,然后写到专用寄存器TACM中。同时,将该尺寸写到通用寄存器1中。当对专用寄存器TACM的写入成功时,标志C0被设定为1,标志C1被设定为0。当对专用寄存器TACM的写入失败时,标志C0被设定为0,标志C1被设定为1。因此,当成功写入专用寄存器TACM时,执行第三和第四行的命令,并分别将尺寸和开始地址设置在专用寄存器TACSZ和专用寄存器TACSTAD中。当写入到专用寄存器TACM失败时,执行第五行的命令,并再次从第一行开始执行处理。
如上所述,通过允许用户指定由高速缓存控制单元5执行的命令,可以使用户详细的指定怎样控制高速缓冲存储器3。从而可以防止出现初始未中、容量未中和冲突未中。
注意在用于执行填充处理的内建函数的情况下,可以像预取指令插入处理的情况一样,将填充处理执行预定数目循环或默认数目循环。
另外,还可以使用内建函数,通过检查简要信息64来检查将由缓存控制单元5执行的命令是否有效操作。图23A-23H示出用于检查图21A-21H所示的内建函数是否有效操作的内建函数。换句话说,图23A-23H中所示的内建函数执行与图21A-21H所示内建函数相同的处理,并输出各内建函数是否有效操作作为调整提示信息94。另外,图23A-23H中所示的内建函数还可以被构造为能够自动删除无效高速缓存命令(高速缓存控制单元5将要执行的中间码)并调节安排这些中间码的位置。因此,用户可以通过参照输出的调整提示信息94在源程序中插入最佳内建函数,从而有效使用该高速缓冲存储器3。
图24A-24E用于说明当执行上述处理(1)-(5)时,用于指定编译器58将要输入/输出的多种信息的方法。图24A示出一编译选项,用于将涉及高速缓冲存储器3的信息输入到编译器58中,通过如图24B中所描述的。注意图24C示出涉及高速缓冲存储器3的信息的例子,该信息描述了高速缓冲存储器3的尺寸、行数据的尺寸、高速缓冲存储器3的等待循环的数目等。
图24D示出用于指定将要输入到编译器58的简要信息64的文件名的编译选项。图24E示出用于指定编译器58将要输出的调整提示信息94的输出文件名的编译选项。
如上所述,本实施例的编译系统通过使用多种指定方法,可以防止高速缓冲存储器3上出现初始未中、容量未中和冲突未中等。
虽然上面仅详细描述了本发明的一个示例性实施例,但是本领域技术人员很容易在不脱离本发明新颖技术和优点的情况下实现多种修改例。因此,所有这些修改例都将包括在本发明范围内。例如,不需要以杂注指示的形式将指示提供给编译器,因此当可能这样的时候也可以使用内建函数或编译选项。如果使用内建函数或编译选项向编译器提供指示,则可以实现相同的效果。
工业实用性本发明可用于编译器,特别是目标于使用高速缓冲存储器的处理器的编译器等。
权利要求
1.一种将高级语言所写的源程序翻译为机器语言程序的编译装置,包括指示获得单元,用于获得将要产生的机器语言程序应当被优化的一个指示;分析单元,用于分析该源程序;中间码转换单元,用于根据分析单元执行分析的结果将源程序转换为中间码;优化单元,用于根据该指示来优化该中间码;和码产生单元,用于将该中间码转换为机器语言程序,其中该指示是用于优化该机器语言程序的指示,适用于使用高速缓冲存储器的处理器。
2.如权利要求1所述的编译装置,其中该指示获得单元获得的指示为,在源程序中的特定环路处理应当被划分为多个环路子处理,以使所述环路处理中包含的数据对象以预定的数据尺寸为单元被置于高速缓冲存储器中,和该优化单元根据所述指示将该环路处理划分为多个环路子处理,所述环路处理是该指示获得单元所获得的指示的目标。
3.如权利要求2所述的编译装置,其中该指示获得单元从源程序获得的指示是一个杂注指示。
4.如权利要求2所述的编译装置,其中该指示获得单元从源程序获得的指示是一个内建函数。
5.如权利要求1所述的编译装置,其中该指示获得单元获得的指示为,在源程序中的特定环路处理应当被划分为多个环路子处理,以使所述环路处理中包含的数据对象以指定的数据尺寸为单元被置于高速缓冲存储器中,和该优化单元根据所述指示将该环路处理划分为多个环路子处理,所述环路处理是该指示获得单元所获得的指示的目标。
6.如权利要求1所述的编译装置,其中该指示获得单元获得的指示为,在源程序中的特定环路处理应当被划分为多个环路子处理,每个环路子处理都包含预定数目的环路,和该优化单元根据所述指示将该环路处理划分为多个环路子处理,所述环路处理是该指示获得单元所获得的指示的目标。
7.如权利要求1所述的编译装置,其中该指示获得单元获得的指示为,在源程序中的特定环路处理应当被划分为多个环路子处理,每个环路子处理都包含指定数目的环路,和该优化单元根据所述指示将该环路处理划分为多个环路子处理,所述环路处理是该指示获得单元所获得的指示的目标。
8.如权利要求1所述的编译装置,其中该指示获得单元获得的指示为,应当检验在源程序中的特定环路处理中使用的数据对象是否引起高速缓冲存储器上的高速缓存未中,和该优化单元根据所述指示而检验该数据对象是否引起高速缓冲存储器上的高速缓存未中,并将该检验结果输出到一个文件。
9.如权利要求8所述的编译装置,其中该指示获得单元连同获得源程序应当被翻译的指示一起,还获得另一个指示,指示检验结果应当被输出到具有一个指定文件名的文件。
10.如权利要求1所述的编译装置,其中该指示获得单元获得的指示为,在源程序中的特定数据对象应当在所述数据对象被查找之前就存储在高速缓冲存储器中,和该优化单元在所述数据对象被查找之前,将所述数据对象存储在高速缓冲存储器中。
11.如权利要求10所述的编译装置,其中该优化单元在所述数据对象被查找之前,对一个指令执行预定次数的循环,所述指令指示,该数据对象应当被预先存储到高速缓冲存储器中。
12.如权利要求10所述的编译装置,其中该指示获得单元获得(i)源程序中的特定数据对象应当在所述数据对象被查找之前,被存储到高速缓冲存储器中的指示和(ii)循环次数,和该优化单元在所述数据对象被查找之前,对一个指令执行所述次数的循环,所述指令指示该数据对象应当被预先存储到高速缓冲存储器中,所述循环次数是通过该指示获得单元获得的。
13.如权利要求1所述的编译装置,其中该指示获得单元获得一个指示,指示源程序中的环路处理中使用的特定阵列应当在所述阵列中的单元被查找之前,被存储到高速缓冲存储器中,和该优化单元在所述单元被查找之前,将所述阵列中的单元存储到高速缓冲存储器中。
14.如权利要求13所述的编译装置,其中该优化单元在一次迭代中将该阵列中的单元存储到高速缓冲存储器中,该次迭代是在环路处理中所述单元被查找的那次迭代之前执行的。
15.如权利要求13所述的编译装置,其中该优化单元在所述阵列中的单元被查找之前,对一个指令执行预定次数的循环,所述指令指示所述单元应当被预先存储到高速缓冲存储器中。
16.如权利要求15所述的编译装置,其中该优化单元在一次迭代上执行该指令,该迭代是环路处理中查找该阵列中的所述单元的那次迭代之前执行了预定次数迭代之前的那次迭代,所述指令指示所述单元应当被预先存储到高速缓冲存储器中。
17.如权利要求13所述的编译装置,其中该指示获得单元获得(i)源程序中环路处理中使用的特定阵列应当在所述阵列中包含的单元被查找之前,被存储到高速缓冲存储器中的指示和(ii)循环次数,和该优化单元在所述阵列中的元素被查找之前,对一个指令执行所述次数的循环,所述指令指示所述单元应当被预先存储到高速缓冲存储器中,所述循环次数是通过该指示获得单元获得的。
18.如权利要求1所述的编译装置,其中该指示获得单元连同获得源程序应当被翻译的指示一起,还获得一个编译指示,指示特定的数据对象应当在所述数据对象被查找之前,被存储到高速缓冲存储器中,根据分析机器语言程序的执行而获得的执行分析结果,所述数据对象被判断为引起高速缓冲存储器上的高速缓存未中,和该优化单元在所述特定数据对象被查找之前,将所述特定数据对象存储到高速缓冲存储器中。
19.如权利要求18所述的编译装置,其中该指示获得单元还获得一个循环次数,和该优化单元在所述特定数据对象被查找之前,将一个指令执行所述次数的循环,所述指令指示所述数据对象应当被预先存储到高速缓冲存储器中。
20.如权利要求18所述的编译装置,其中该指示获得单元包括第一获得单元,用于获得编译指示;和第二获得单元,用于获得一个内部源程序指示,指示在源程序内被放置在指定位置或后续位置的该特定数据对象应当根据该编译指示来处理,和在第一获得单元获得该编译指示的情况下,该优化单元在所述特定数据对象被查找之前将所述特定数据对象存储到高速缓冲存储器中,所述特定数据对象被放置在该内部源程序指示中规定的一个指定位置上或后续的位置上,所述内部源程序指示是通过该第二获得单元获得的。
21.如权利要求18所述的编译装置,其中该指示获得单元连同获得该源程序应当被翻译的指示一起,还获得一个指示,指示具有指定文件名的执行分析结果应当被读入,和该优化单元还根据所述应当读入该具有指定文件名的执行分析结果的指示,读入该具有指定文件名的执行分析结果。
22.如权利要求18所述的编译装置,其中和源程序应当被翻译的指示一起,通过指示获得单元而获得的该编译指示,是一个编译选项。
23.如权利要求1所述的编译装置,其中该指示获得单元获得(i)一个指示,指示源程序中的特定数据对象应当在所述数据对象被查找之前被存储到高速缓冲存储器中,根据分析机器语言程序的执行而获得的执行分析结果,所述数据对象被判断为引起高速缓冲存储器上的高速缓存未中,和(ii)源程序中的一个范围,和该优化单元在所述特定数据对象被查找之前,将所述特定数据对象存储到高速缓冲存储器中,所述数据对象被包含在所述源程序的范围内。
24.如权利要求1所述的编译装置,其中该指示获得单元获得(i)一个指示,指示源程序中的特定数据对象应当在所述数据对象被查找之前被存储到高速缓冲存储器中,根据分析机器语言程序的执行而获得的执行分析结果,所述数据对象被判断为引起高速缓冲存储器上的高速缓存未中,和(ii)处理器所使用的主存储器上的一个位置,和该优化单元在所述特定数据对象被查找之前,将所述特定数据对象存储到高速缓冲存储器中,所述数据对象被包含在主存储器上的所述位置中。
25.如权利要求24所述的编译装置,其中该指示获得单元还获得一个循环次数,和该优化单元在所述数据对象被查找之前,将一个指令执行所述次数的循环,所述指令指示在该主存储器上的位置中包含的该特定数据对象应当被预先存储到高速缓冲存储器中。
26.如权利要求24所述的编译装置,其中根据该执行分析结果,判断在所述数据对象被查找之前无法将所述数据对象存储到高速缓冲存储器中的情况下,该优化单元不将主存储器上的位置中包含的该特定数据对象预先存储到高速缓冲存储器中。
27.如权利要求1所述的编译装置,其中该指示获得单元获得(i)一个指示,指示源程序中的特定数据对象应当以高速缓冲存储器上的行数据尺寸为单元被分组,并且放置在不同组中的数据对象应当被置于高速缓冲存储器上具有不同集合号的多个高速缓存器入口中,(ii)特定数据对象的名称,和该优化单元将各个名称所规定的特定数据对象以高速缓冲存储器上的行数据尺寸为单元进行分组,并将所述特定数据对象放置在高速缓存器入口,从而使不同组中的数据对象不会被置于高速缓冲存储器上具有相同集合号的高速缓存器入口中。
28.如权利要求1所述的编译装置,其中该指示获得单元获得(i)一个指示,指示源程序中的特定数据对象应当被放置到该高速缓冲存储器上具有一特定编号的高速缓存器入口中,该特定编号与所述特定数据对象相关联,(ii)所述特定数据对象的名称,和(iii)与该特定数据对象相关的所述特定集合编号,和该优化单元将所述名称规定的特定数据对象被放置到该高速缓冲存储器上具有该特定集合编号的高速缓存器入口中,该特定集合编号与所述特定数据对象相关联。
29.如权利要求1所述的编译装置,其中该指示获得单元获得(i)一个指示,指示源程序中的特定数据对象应当被放置到处理器所使用的主存储器上的特定地址的位置中,(ii)所述特定数据对象的名称,和(iii)所述地址,和该优化单元将所述名称规定的特定数据对象放置到处理器所使用的主存储器上的特定地址的位置中。
30.如权利要求1所述的编译装置,其中该指示获得单元连同获得源程序应当被翻译的指示一起,还获得一个指示,(i)指示应当根据分析机器语言程序的执行而获得的执行分析结果来确定一个位置的地址,所述位置是源程序中包含的数据对象应当被存储的位置,和(ii)指示所述数据对象应当被存储到处理器所使用的主存储器上的所确定地址的位置中,和该优化单元根据分析机器语言程序的执行而获得的执行分析结果来确定一个位置的地址,所述位置是源程序中包含的数据对象将被存储的位置,和将所述数据对象存储到主存储器上的所述确定地址的所述位置中。
31.如权利要求1所述的编译装置,其中高速缓冲存储器的多个高速缓存器入口的每个入口都包括一个具有数值的弱标志,该数值指示在每个所述高速缓存器入口中存储的一个数据对象应当被优先丢弃,该处理器将要使用的主存储器包括(i)弱空间,其中存储的数据对象将被安排到高速缓冲存储器的其中一个高速缓存器入口之外,其中当执行所述安排时所述高速缓存器入口的弱标志被设置为一个值,所述值可使所述数据对象被优先丢弃,和(ii)高速缓存空间,其中存储的数据对象将被安排到高速缓冲存储器的其中一个高速缓存器入口之外,其中当执行所述安排时,所述高速缓存器入口的弱标志没有被设置为一个值,所述值可使所述数据对象被优先丢弃,该指示获得单元获得(i)一个指示,指示源程序中的特定数据对象应当根据安排信息被存储在弱空间或高速缓存空间中,该安排信息指示所述特定数据对象应当被安排在弱空间还是高速缓存空间中,(ii)所述特定数据对象的名称,和(iii)所述安排信息,和该优化单元根据该安排信息使所述名称规定的特定数据对象被安排在弱空间或高速缓存空间中。
32.如权利要求1所述的编译装置,其中该处理器还使用一个容量比高速缓冲存储器较小的子高速缓冲存储器,高速缓冲存储器的多个高速缓存器入口的每个入口都包括一个具有数值的弱标志,该数值指示在每个所述高速缓存器入口中存储的一个数据对象应当被优先丢弃,该处理器将要使用的主存储器包括(i)弱空间,其中存储的数据对象将被安排到高速缓冲存储器的其中一个高速缓存器入口之外,其中当执行所述安排时所述高速缓存器入口的弱标志被设置为一个值,所述值可使所述数据对象被优先丢弃,和(ii)高速缓存空间,其中存储的数据对象将被安排到高速缓冲存储器的其中一个高速缓存器入口之外,其中当执行所述安排时所述高速缓存器入口的弱标志没有被设置为一个值,所述值可使所述数据对象被优先丢弃,和(iii)子高速缓存空间,其中存储的数据对象将被安排到该子高速缓冲存储器之外,该指示获得单元连同获得源程序应当被翻译的指示一起,还获得一个指示,(i)指示应当根据分析机器语言程序的执行而获得的执行分析结果来确定主存储器上的空间,所述空间是源程序中包含的数据对象将被放置的空间,和(ii)指示所述数据对象应当被放置到所述确定空间中,和该优化单元根据分析机器语言程序的执行而获得的执行分析结果来确定主存储器上的一空间,其中所述空间是源程序中包含的数据对象将被存储的空间,和将所述数据对象放置到所述确定空间中。
33.如权利要求1所述的编译装置,其中该处理器还使用一个容量比高速缓冲存储器小的子高速缓冲存储器,该高速缓冲存储器的多个高速缓存器入口的每个入口都包括一个具有数值的弱标志,该数值指示在每个所述高速缓存器入口中存储的一个数据对象应当被优先丢弃,该处理器将要使用的主存储器包括(i)弱空间,其中存储的数据对象将被安排到高速缓冲存储器的其中一个高速缓存器入口之外,其中当执行所述安排时所述高速缓存器入口的弱标志被设置为一个值,所述值可使所述数据对象被优先丢弃,和(ii)高速缓存空间,其中存储的数据对象将被安排到高速缓冲存储器的其中一个高速缓存器入口之外,其中当执行所述安排时所述高速缓存器入口的弱标志没有被设置为一个值,所述值可使所述数据对象被优先丢弃,和(iii)子高速缓存空间,其中存储的数据对象将被安排到该子高速缓冲存储器之外,该指示获得单元获得一个指示,(i)指示应当根据分析机器语言程序的执行而获得的执行分析结果来确定主存储器上的空间,所述空间是源程序中包含的数据对象将被放置的空间,和(ii)指示所述数据对象应当被放置到所述确定空间中,和该优化单元根据分析机器语言程序的执行而获得的执行分析结果来确定主存储器上的空间,其中所述空间是源程序中包含的数据对象将被存储的空间,和将所述数据对象放置到所述确定空间中。
34.如权利要求1所述的编译装置,其中该指示获得单元从该源程序中获得一个指示,用于指示高速缓存控制单元控制该高速缓冲存储器执行一个专用命令,该命令专用于所述高速缓存控制单元,和该优化单元使高速缓存控制单元根据该指示而执行所述专用命令。
35.如权利要求34所述的编译装置,其中该专用命令是用于将一个指定的数据对象从处理器所使用的主存储器预先装载到高速缓冲存储器上的预定高速缓存入口中,并用于当需要将所述数据对象写回到主存储器中时,将该高速缓存入口中存储的所述数据对象写回到主存储器中的命令。
36.如权利要求34所述的编译装置,其中该高速缓冲存储器的多个高速缓存器入口的每个入口都包括一个具有数值的弱标志,该数值指示在每个所述高速缓存器入口中存储的一个数据对象应当被优先丢弃,和该专用命令用于将一个指定的数据对象从处理器所使用的主存储器预先装载到高速缓冲存储器上的预定高速缓存入口中,并用于将所述高速缓存入口的弱标志设置为一个数值,该数值指示允许在所述高速缓存器入口中存储的数据对象被优先丢弃。
37.如权利要求34所述的编译装置,其中该专用命令用于在高速缓冲存储器上预先确保一个将要存储一指定数据对象的高速缓存入口,并用于当需要将所述数据对象写回到主存储器中时,将所述高速缓存入口中存储的所述数据对象写回到主存储器中。
38.如权利要求34所述的编译装置,其中该高速缓冲存储器的多个高速缓存器入口的每个入口都包括一个具有一数值的弱标志,该数值指示在每个所述高速缓存器入口中存储的一个数据对象应当被优先丢弃,和其中该专用命令是用于在高速缓冲存储器上预先确保一个将要存储指定数据对象的高速缓存入口,并用于将所述高速缓存入口的弱标志设置为一个数值,该数值指示在所述高速缓存器入口中存储的数据对象应当被优先丢弃的命令。
39.如权利要求34所述的编译装置,其中该专用命令是用于当需要将所述数据对象写回到主存储器中时,将所述高速缓存入口中存储的数据对象写回到主存储器中,并用于无效所述高速缓存入口的命令,其中该高速缓存入口用于存储所述指定的数据对象。
40.如权利要求34所述的编译装置,其中该专用命令是一个用于无效高速缓存入口的命令,该高速缓存入口用于存储一个指定的数据对象。
41.如权利要求34所述的编译装置,其中该专用命令是一个用于在高速缓冲存储器上预先确保一个高速缓存入口的命令,该高速缓存入口用于存储一个指定的数据对象。
42.如权利要求34所述的编译装置,其中该专用命令是一个用于将指定的数据对象从处理器所使用的主存储器预先装载到高速缓冲存储器上的预定高速缓存入口中的命令。
43.如权利要求34所述的编译装置,其中该专用命令还是一个用于检验所述专用命令是否有效运行的命令。
44.如权利要求34所述的编译装置,其中该优化单元还根据分析机器语言程序的执行而获得的执行分析结果,来控制该专用命令的安排。
45.如权利要求44所述的编译装置,其中该优化单元还根据该执行分析结果来删除该无效的专用命令。
46.如权利要求44所述的编译装置,其中该优化单元还根据该执行分析结果来确定将该专用命令放置到哪里。
47.如权利要求1所述的编译装置,其中该指示获得单元连同获得源程序应当被翻译的指示一起,还获得一个指示,指示应当读入高速缓冲存储器的属性信息,和优化单元读入该高速缓冲存储器的属性信息。
48.一种将高级语言所写的源程序翻译为机器语言程序的编译器,该编译器可使计算机执行以下单元的功能指示获得单元,用于获得将要产生的机器语言程序应当被优化的一个指示;分析单元,用于分析该源程序;中间码转换单元,用于根据分析单元执行分析的结果将源程序转换为中间码;优化单元,用于根据该指示来优化该中间码;和码产生单元,用于将该中间码转换为机器语言程序,其中该指示是一个优化指示,适用于使用高速缓冲存储器的处理器。
49.一种计算机可读的记录介质,其中存储有可将高级语言所写的源程序翻译为机器语言程序的编译程序,其中该编译程序可使计算机执行以下单元的功能指示获得单元,用于获得将要产生的机器语言程序应当被优化的一个指示;分析单元,用于分析该源程序;中间码转换单元,用于根据分析单元执行分析的结果,将源程序转换为中间码;优化单元,用于根据该指示来优化该中间码;和码产生单元,用于将该中间码转换为机器语言程序,其中该指示是一个优化指示,适用于使用高速缓冲存储器的处理器。
50.一种用于从源程序开发机器语言程序的开发系统,包括编译装置,用于将高级语言所写的源程序翻译为机器语言程序;仿真装置,用于执行该编译装置所产生的机器语言程序,并输出执行记录;和简要表装置,用于分析该仿真装置所输出的执行记录,并输出关于该机器语言程序的执行分析结果,其中该编译装置包括指示获得单元,用于获得一个指示,指示将要产生的机器语言程序应当被优化;分析单元,用于分析该源程序;中间码转换单元,用于根据分析单元执行分析的结果将源程序转换为中间码;优化单元,用于根据该指示和该执行分析结果来优化该中间码;和码产生单元,用于将该中间码转换为机器语言程序,其中该指示是一个优化机器语言程序的指示,适用于使用高速缓冲存储器的处理器。
全文摘要
编译器58,是一种能够以更少工时来实现程序开发的编译器,可将高级语言所写的源程序72翻译为机器语言程序。该编译器58包括指示获得单元,用于获得一个指示,指示将要产生的机器语言程序应当被优化;分析单元76,用于分析该源程序72;中间码转换单元78,用于根据分析单元76执行分析的结果将源程序72转换为中间码;优化单元68,用于根据该指示来优化该中间码;和码产生单元90,用于将该中间码转换为机器语言程序。上述指示是一个优化该机器语言程序的指示,适用于使用高速缓冲存储器的处理器。
文档编号G06F9/45GK1609805SQ200410085268
公开日2005年4月27日 申请日期2004年10月18日 优先权日2003年10月17日
发明者瓶子岳人, 小川一, 山本康博, 服部享子, 道本昌平, 服部谦司, 富田浩彻, 川端辉雄, 中岛圣志 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1