CN100562849C - 程序转换器件及方法、程序转换执行器件及转换执行方法 - Google Patents

程序转换器件及方法、程序转换执行器件及转换执行方法 Download PDF

Info

Publication number
CN100562849C
CN100562849C CNB2005101236116A CN200510123611A CN100562849C CN 100562849 C CN100562849 C CN 100562849C CN B2005101236116 A CNB2005101236116 A CN B2005101236116A CN 200510123611 A CN200510123611 A CN 200510123611A CN 100562849 C CN100562849 C CN 100562849C
Authority
CN
China
Prior art keywords
code
program
execution route
execution
target program
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.)
Expired - Fee Related
Application number
CNB2005101236116A
Other languages
English (en)
Other versions
CN1783012A (zh
Inventor
畑野文博
田中旭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of CN1783012A publication Critical patent/CN1783012A/zh
Application granted granted Critical
Publication of CN100562849C publication Critical patent/CN100562849C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种编译器器件,该器件在跟踪调度中不必采用补偿码即可产生用于可以并行执行两个或者多个指令的计算机的可执行程序。该编译器器件产生使计算机并发执行由源程序基本直接转换得到的代码和通过优化源程序中最频繁执行路径的指令序列产生的代码的可执行程序。

Description

程序转换器件及方法、程序转换执行器件及转换执行方法
技术领域
本发明涉及通过编译器进行的程序优化,并尤其涉及基于程序中执行路径的执行频率进行的优化。
背景技术
现在许多的研究工作已经开始致力于开发将源程序转换为可以在目标硬件更快运行的可执行程序的编译器上。
为了提高可执行程序的执行速度,编译器器件执行指令调度。指令调度包括重新排序程序中的指令以提高指令级并行度从而实现更快执行速度的全局调度。跟踪调度为全局调度方法的其中一种。这里,尽管在程序末端可能包括条件分支,但是在中间不包括条件分支并因此连续执行的程序中的指令序列称为基本程序块。按常规来说,对基本程序块中的指令进行重新排序以提高指令级并行度,从而减少可执行程序的执行时间。
依照跟踪调度,在其末端具有条件分支的基本程序块好像不存在条件分支一样连接到分支目标程序块之一,以产生扩展基本程序块。这样,通过对扩展基本程序块中的指令重新排序执行指令调度。
由于扩展了原始基本程序块,因此可以更灵活地执行指令调度,通过这样可以进一步减少可执行程序的执行时间。但是,在可执行程序实际执行过程中,则不可以对该扩展基本程序块的执行路径实施控制。考虑到这些,需要提供补偿代码以维持程序中数值的一致性(consistency)。在对已经进行优化的扩展基本程序块的执行路径进行控制时,该可执行程序比没有进行跟踪调度基本上直接转化源程序的可执行程序运行速度更快。这些调度技术公开于日本专利申请号No.H11-96005中。
上述扩展基本程序块基本上用于位于程序中频繁执行的路径的基本程序块中。
以下给出跟踪调度的具体实施例。图20A所示为一部分具有所示分支的源程序的控制流程图。假设连接基本程序块A 2001、B 2002和C 2003的执行路径具有最高的执行频率。根据执行频率量向这部分源程序应用跟踪调度,例如,如图20B所示的结果。在扩展基本程序块2010中,交换基本程序块A 2001和B 2002是建立在该顺序有助于加速执行的基础上。当对该扩展基本程序块2010的执行路径,即基本程序块B 2012、A 2011和C 2013序列进行控制时,该总执行时间降低。
如上所述,跟踪调度对基本程序块中的指令重新排序,从而需要提供补偿代码以在对另一执行路径执行控制时的情况时保持数值的一致性。
图20B中的基本程序块A’2018用作该补偿代码。在图20B中,如果程序从基本程序块B 2012直接分支到图20A所示的基本程序块D2004,则基本程序块A 2001的操作将终止并错过。这样,为了保持图20A中连接基本程序块A2001、B2002、D2004和E2005的执行路径的数值一致性,将基本程序块A’2018插入作为对应于基本程序块A2001的补偿代码。
如果程序包括更复杂的条件分支,则补偿代码也变得更加复杂。在某些情况下,在对包括补偿代码的程序路径进行控制时,程序的运行可能比预想的慢。因此,提供补偿代码可能会使总执行时间增加。
发明内容
为了解决上述问题,本发明目的在于提供用于通过在具体执行路径形成扩展基本程序块并且不必通过采用补偿代码优化该扩展基本程序块产生程序的程序转换器件。
通过用于将包括条件分支的源程序转换为用于至少可以并行执行两个指令的计算机的目标程序的程序转换器件实现上述目的,该程序转换器件包括:用于指定源程序的一个程序段中多个执行路径中的一个执行路径的执行路径指定单元,所述程序段包括条件分支和所述条件分支的多个分支目标;用于产生对应于所述程序段中所有指令的第一代码的第一代码产生单元;用于产生对应于指定执行路径中指令序列的第二代码的第二代码产生单元所述第二代码包括表示如果用于执行路径的条件为真则继续执行序列中跟在条件分支之后的指令以及如果条件为假停止继续所述指令的代码作为对应于条件分支的代码;用于产生对应于源程序随后部分的指令的第三代码的第三代码产生单元;以及用于产生使得计算机并行执行第一代码和第二代码并且如果条件为真在第二代码后执行第三代码而如果条件为假在第一代码后执行第三代码的目标程序的目标程序产生单元。
用在这里的术语“对应于”表示代码基本上具有和源程序中指令一样的内容。但是应该注意要访问的寄存器依赖于计算机存储器的类型而改变。此外,执行路径表示连续执行的指令序列。当程序在条件分支处分支时,执行路径表示那个条件分支的多个分支目标中的单独的一个。由目标程序产生单元产生的目标程序为中间代码或者准备在计算机上运行的可执行程序。该中间代码表示在将源程序转换为目标程序的过程中产生从而便于通过程序转换器件进行代码处理的代码,并且该代码具有对应于源程序的内容。
根据上述的架构,目标程序使计算机中的一个处理器内核执行由源程序不经过优化基本上直接转化得到的代码,并且该计算机中的另一处理器内核用于执行通过优化指定执行路径中指令序列产生的第二代码。
这样,在不必采用对控制选择另一执行路径时保持数值一致性通常需要的补偿代码就可以产生关于指定执行路径已经进行优化的程序。而且,在控制选择指定执行路径时,第二代码运行速度比第一代码快,这加速了第三代码的开始。因此,减少了总执行时间。而且,由于第一处理器内核执行对应于原始源程序的第一代码因此可以保持数值的一致性。
这里,目标程序产生单元可以还使计算机在第一代码先于第二代码结束时停止执行第二代码的目标程序。
根据所述架构,组织目标程序使得在第一代码先于第二代码结束时执行第二代码的处理器内核停止执行,然后向该处理器内核分配另一线程。这有助于有效资源利用。
这里,所述程序转换器件还包括用于通过计算机执行由源程序基本上直接转化得到的程序从计算机获取表示在所述程序段中被最频繁选择的执行路径的信息的执行路径获取单元,其中执行路径指定单元指定最频繁的执行路径。
根据该结构,优化所述最频繁执行路径中的指令序列。因此,当控制选择所述执行路径时,可以减少程序的执行时间。
这里,程序转换器件还包括用于获取表示由计算机并行执行的可执行指令数量的数量m的并行执行限度获取单元,其中所述执行路径获取单元还从计算机获取表示在程序段中第二频繁执行路径到最少频繁执行路径的信息,所述执行路径指定单元还基于数量m指定第二频繁执行路径到第n频繁执行路径,其中n=m-1,所述第二代码产生单元产生与由执行路径指定单元指定的最高频繁执行路径到第n频繁执行路径一一对应的n组第二代码,并且所述目标程序产生单元产生使计算机单独并行地执行第一代码和n组第二代码的目标代码。
根据该结构,两个或者多个具有高执行频率的执行路径可以作为单独线程执行,这样可以减少总执行时间。
这里,所述目标程序产生单元产生还使计算机停止执行除用于相应执行路径的条件为真的一组第二代码以外的n组第二代码的目标程序。
根据该结构,,目标程序组织在控制选择一条执行路径时使得执行那条执行路径线程的处理器内核停止其他线程。
这里,目标程序产生单元产生使计算机不是删除而是保留任何被停止的多组第二代码的目标程序。
根据该结构,当下一线程和当前线程一样而仅仅是操作数据不同时,由于保留了当前线程因此仅需要将操作数据传递给所述处理器内核。这省去了每次向处理器内核传递线程和处理数据的麻烦,通过这样可以减少该程序的执行时间。
这里,程序转换器件还包括用于获取表示计算机为计算机中的所有处理器内核共享一个存储器的存储器共享型还是处理器内核分别具有单独存储器的存储器分布型的存储器信息的存储信息获取单元,其中如果存储器信息显示存储器共享型,所述目标程序产生单元产生还使分别执行第一代码和第二代码的处理器内核单独处理同一变量的目标程序。
为了单独处理同一变量装置(a same variable means),当第一代码和第二代码在源程序中参考同一变量时,执行第一代码的处理器内核和执行第二代码的处理器内核在不同的寄存器存储所述变量。
根据该结构,在存储器共享型计算机中可以确保根据程序执行的操作结果。
这里,所述程序转换器件还包括用于将目标程序转换为适用于计算机的机器语言的机器语言转换单元。
根据该结构,如果目标程序为中间代码,所述中间代码还可以转换为以适用于计算机的机器语言书写的可执行程序。
还可以通过用于将包括条件分支的源程序转化为目标程序的程序转换和执行器件实现所述的目的,所述程序转换和执行器件可以并行执行至少两个指令,所述器件包括:用于指定在源程序的一个程序段中多个执行路径中的一个执行路径的执行路径指定单元,所述程序段包括条件分支和所述条件分支的多个分支目标;用于产生对应于所述程序段中所有指令的第一代码的第一代码产生单元;用于执行基本上为源程序直接转化的程序的执行单元,所述程序包括第一代码;用于通过所述执行单元执行所述程序获取表示在程序段中被最频繁选择的执行路径的信息的获取单元,其中执行路径指定单元指定所述最频繁的执行路径;用于产生对应于指定的执行路径中指令序列的第二代码的第二代码产生单元所述第二代码包括表示如果用于执行路径的条件为真则继续执行序列中跟在条件分支后面的指令以及如果条件为假停止继续所述指令的代码作为对应于条件分支的代码;用于产生对应于源程序随后程序段中指令的第三代码的第三代码产生单元;以及用于产生使执行单元并行执行第一代码和第二代码并且如果条件为真在第二代码后执行第三代码而如果条件为假在第一代码后执行第三代码的目标程序的目标程序产生单元,其中所述执行单元执行目标程序。
根据所述结构,可以产生程序并且执行程序的程序转换和执行器件可以产生在控制选择频繁执行路径时运行更快的程序。
如上所述,越复杂的控制流程图就要求越复杂的补偿代码。在采用即时编译(just-in-time)即,动态转换的编译器件中,为了提高在连续分析和执行每行代码的解释程序中部分代码的执行性能,所述补偿代码的产生会浪费时间。根据本发明,由于不需要产生补偿代码因此不会产生所述问题。
这里,目标程序产生单元可以产生还使执行单元在第一代码先于第二代码结束时停止执行第二代码的目标程序。
根据所述结构,目标程序组织为在第一代码先于第二代码结束时使执行第二代码的处理器内核停止执行,然后向该处理器内核分配另一线程。这有助于有效资源利用。
这里,程序转换和执行器件还包括用于获取表示由程序转换和执行器件并行执行的可执行指令数量的数量m的并行执行限度获取单元,其中所述执行路径获取单元还获取表示在程序段中第二频繁执行路径到最少频繁执行路径的信息,所述执行路径指定单元还基于数量m指定第二频繁执行路径到第n频繁执行路径,其中n=m-1,所述第二代码产生单元产生与由执行路径指定单元指定的最高频繁执行路径到第n频繁执行路径一一对应的n组第二代码,并且所述目标程序产生单元产生使执行单元单独并行地执行第一代码和n组第二代码的目标程序。
根据所述结构,两个或者多个具有高执行频率的执行路径可以作为单独线程执行,这样可以减少总执行时间。
这里,所述目标程序产生单元产生还使执行单元停止执行除用于相应执行路径的条件为真的一组第二代码以外的n组第二代码的目标程序。
根据所述结构,所述目标程序组织为在执行一个线程的条件为真时使其他处理器内核停止执行其他线程,然后向那些处理器内核分配下面的线程。这有助于资源的有效利用。
这里,目标程序产生单元产生使执行单元不是删除而是保留任何被停止的多组第二代码的目标程序。
根据所述结构,当下一线程和当前线程一样而仅仅是操作数据不同时,由于保留了当前线程因此仅需要将操作数据传递给所述处理器内核。这省了每次向处理器内核传递线程和处理数据的麻烦,通过这样可以减少该程序的执行时间。
这里,如果程序转换和执行器件的存储器类型为在程序转换和执行器件中所有处理器内核共享一个存储器的存储器共享型,则所述目标程序产生单元产生组还使分别执行第一代码和第二代码的处理器内核单独处理同一变量的目标程序。
根据所述结构,所述目标程序组织为根据程序转换和执行器件为存储器共享型还是存储器分布型适当地向寄存器赋值。
还可以通过用于将包括条件分支的源程序转换为可以并行执行至少两个指令的计算机的目标程序的程序转换方法实现所述的目的,所述方法包括:指定一源程序中一个程序段的多个执行路径中的一个执行路径的执行路径指定步骤,所述程序段包括条件分支和所述条件分支的多个分支目标;产生对应于所述程序段所有指令的第一代码的第一代码产生步骤;产生对应于指定执行路径中指令序列的第二代码的第二代码产生步骤,所述第二代码包括表示如果用于执行路径的条件为真则继续执行序列中跟在条件分支之后的指令以及如果条件为假停止继续该指令的代码作为对应于条件分支的代码;产生对应于在源程序随后程序段中指令的第三代码的第三代码产生步骤;以及产生使得计算机并行执行第一代码和第二代码并且如果条件为真在第二代码后执行第三代码而如果条件为假在第一代码后执行第三代码的目标程序的目标程序产生步骤。
根据所述方法,可以产生用于并行执行第一代码和通过优化指定执行路径产生的第二代码的目标程序。
这里,所述目标程序产生步骤产生还使计算机在所述第一代码先于所述第二代码结束时停止执行第二代码的目标程序。
根据所述方法,,目标程序组织为使在第一代码先于第二代码结束时执行第二代码的处理器内核停止执行。
这里,所述程序转换方法还包括通过执行由源程序基本上直接转化得到的程序从计算机获取表示程序段中使用频率最高的执行路径的信息的执行路径获取步骤,其中所述执行路径指定步骤指定最高频率的执行路径。
根据所述方法,所述目标程序组织为并行执行第一代码和通过优化最频繁执行路径中指令获得的第二代码。
这里,程序转换方法还包括获取表示由计算机并行执行的可执行指令数量的数量m的并行执行限度获取步骤,其中所述执行路径获取步骤还从计算机获取表示在程序段中被第二频繁选择执行路径到最少频繁选择执行路径的信息,所述执行路径指定步骤还基于数量m指定第二频繁执行路径到第n频繁执行路径,其中n=m-1,所述第二代码产生步骤产生与由执行路径指定步骤指定的最频繁执行路径到第n频繁执行路径一一对应的n组第二代码,并且所述目标程序产生步骤产生使计算机单独并行地执行第一代码和所述n组第二代码的目标代码。
根据所述方法,所述目标程序组织为并行执行第一代码和通过优化多个频繁执行路径产生的多组第二代码。
这里,所述目标程序产生步骤产生进还使计算机停止执行除用于相应执行路径的条件为真的一组第二代码以外的n组第二代码的执行的目标程序。
根据所述方法,,目标程序组织使在当控制选择一条执行路径时,执行所述执行路径的处理器内核停止其他线程。
这里,目标程序产生步骤产生使计算机不是删除而是保留任何被停止的多组第二代码的目标程序。
根据所述方法,可以产生能够保留线程用于进一步应用的目标程序。
这里,程序转换方法还包括获取表示计算机为计算机中的所有处理器内核共享一个存储器的存储器共享型还是处理器内核分别具有单独存储器的存储器分布型的存储器信息的存储信息获取步骤,其中如果存储器信息显示存储器共享型,所述目标程序产生步骤产生还使分别执行第一代码和第二代码的处理器内核单独处理同一变量的目标程序。
根据所述方法,在存储器共享型计算机中可以保证根据程序执行操作的结果。
这里,所述程序转换方法还包括将目标程序转换为适用于计算机的机器语言的机器语言转换步骤。
根据所述方法,如果所述目标程序为中间代码,所述中间代码还可以转换为用适用于计算机的机器语言书写的可执行程序。
还可以通过用在用于将包括条件分支的源程序转化为目标程序的程序转换和执行器件的程序转换和执行方法实现所述的目的,所述程序转换和执行器件可以至少并行执行两个指令,所述方法包括:指定在源程序的一个程序段中多个执行路径中的一个执行路径的执行路径指定步骤,所述程序段包括条件分支和所述条件分支的多个分支目标;产生对应于所述程序段中所有指令的第一代码的第一代码产生步骤;执行为源程序基本上直接转化的程序的执行步骤;通过执行所述程序获取表示在程序段中被最频繁选择的执行路径的信息的获取步骤,其中执行路径指定步骤指定所述最频繁执行路径;产生对应于指定的执行路径中指令序列的第二代码的第二代码产生步骤,所述第二代码包括表示如果用于执行路径的条件为真则继续执行序列中随在条件分支之后的指令以及如果条件为假停止继续所述指令的代码作为对应于条件分支的代码;产生对应于源程序随后程序段中指令的第三代码的第三代码产生步骤;以及产生使第一代码和第二代码并行执行并且如果所述条件为真在第二代码后执行第三代码而如果所述条件为假在第一代码后执行第三代码的目标程序的目标程序产生步骤,其中所述执行步骤执行目标程序。
根据所述方法,在运行期间可以产生用于并行执行第一代码和通过优化最高频率执行路径得到的第二代码的目标程序。
这里,目标代码产生步骤产生还使在第一代码先于第二代码结束时停止第二代码执行的目标程序。
根据所述方法,目标程序组织在第一代码先于第二代码结束时使执行第二代码的处理器内核停止执行。
这里,程序转换和执行方法还包括获取表示由程序转换和执行器件并行执行的可执行指令数量的数量m的并行执行限度获取步骤,其中所述执行路径获取步骤还获取表示在程序段中被第二频繁选择的执行路径到被最少频繁选择的执行路径的信息,所述执行路径指定步骤还基于数量m指定第二频繁执行路径到第n频繁执行路径,其中n=m-1,所述第二代码产生步骤产生与由执行路径指定步骤指定的最高频繁执行路径到第n频繁执行路径一一对应的n组第二代码,并且所述目标程序产生步骤产生使并行单独地执行第一代码和n组第二代码的目标程序。
根据所述方法,目标程序组织为以单独线程执行两个或者以上频繁执行路径。
这里,所述目标程序产生步骤产生还使停止执行除用于相应执行路径的条件为真的一组第二代码以外的n组第二代码的目标程序。
根据所述的方法,,所述目标程序组织在用于执行一个线程的条件为真时使其他处理器内核停止执行其他线程。
这里,所述目标程序产生步骤产生使不是删除而是保留任何被停止的第二代码的目标程序。
根据所述方法,可以产生能够保留线程用于将来使用的目标程序。
这里,如果程序转换和执行器件的存储器类型为在程序转换和执行器件中所有处理器内核共享一个存储器的存储器共享型,则所述目标程序产生步骤产生还使分别执行第一代码和第二代码的处理器内核单独处理同一变量的目标程序。
根据所述方法,根据存储器类型为共享型还是分布型来产生目标程序。
附图说明
通过结合说明本发明具体实施方式的附图的以下说明,将使本发明的这些和其它目的、优点和特征变得更加明显。
附图中:
图1所示为根据本发明的实施方式的编译器件结构框图;
图2所示为用于解释本发明概念的控制流程图;
图3所示为表示本发明概念的图示;
图4A和图4B所示为处理器内核和存储器之间的关系图;
图5A和图5B所示为用于该实施方式的源程序及其控制流程图;
图6所示为基本直接将图5A所示的源程序转换为汇编码的代码;
图7所示为在目标硬件为存储器共享型的情况,对应于执行路径500->501->502的代码;
图8所示为在目标硬件为存储器共享型的情况,对应于执行路径500->501->503的代码;
图9所示为在目标硬件为存储器共享型的情况,对应于执行路径500->504的代码;
图10所示为在目标硬件为存储器共享型的情况的线程控制代码;
图11所示为在目标硬件中可以并行执行处理器内核的数量未知的情况的线程控制代码;
图12所示为在目标硬件为存储器分布型的情况,对应于执行路径500->501->502的代码;
图13所示为在目标硬件为存储器分布型的情况,对应于执行路径500->501->503的代码;
图14所示为在目标硬件为存储器分布型的情况,对应于执行路径500->504的代码;
图15所示为检测执行频率操作的流程图;
图16所示为关于目标硬件的硬件配置的判断操作的流程图;
图17所示为目标硬件为存储器分布型的情况下可执行程序步骤流程图;
图18所示为根据本发明的实施方式的程序转换和执行器件的框图;
图19所示为产生可执行程序的操作的流程图;
图20A和图20B所示为用于说明现有技术中跟踪调度的控制流程图;以及
图21所示为目标硬件为存储器分布型的情况下的线程控制代码。
具体实施方式
以下通过参照附图说明根据本发明作为程序转换器件或者程序转换和执行器件的编译器件的实施方式。
第一实施方式
本发明第一实施方式的编译器器件产生用于存储器共享型计算机的可执行程序。
(概述)
首先,以下通过参考图2和3给出本发明的概述。
假设该编译器器件将一部分具有如图2所示控制流图的分支的源程序转换为可执行程序。
在图中,程序块I 200、J 202、K 203、L 206、Q204、S 205、T 208和X 201均为基本程序块。如上所述,基本程序块为尽管末端包括分支但中间不包括分支的指令序列。通过编译器器件产生的可执行程序设计为用于可以并行执行两个或者更多指令的计算机中。
图2中的控制流图包括五个执行路径,即,执行路径I 200->J 202->Q 204、执行路径I 200->J 202->K 203->S 205->T 208、执行路径I 200->X 201、执行路径I 200->J 202->K 203->S 205->U 207,以及执行路径I 200->J 202->K 203->L206。这些执行路径具有以该顺序降低的执行频率。
这样,以可执行程序的形式产生对应于这些执行路径中的一个或者多个频繁执行路径的指令序列的代码。此外,以可执行形式产生直接对应于原始源程序的代码。然后产生促使处理器内核(processor element)并行地执行对应于频繁执行路径的代码和对应于源程序的代码的可执行程序。图3详细示出可执行程序的步骤。如图所示,该可执行程序使得第一处理器内核执行由源程序基本上直接转换来的可执行形式的线程300,第二处理器内核执行对应于最频繁执行路径的线程301,第三处理器内核执行对应于第二高频繁执行路径的线程302等等。因此,只要可以并行执行的处理器内核数量和可创建的线程的数量允许,该可执行程序组织为使得多个处理器内核启动并并行地执行线程。在用于执行一个线程的条件为真时,该可执行程序还使得执行该线程的处理器内核停止其他线程并执行提交(commitment)以反映该线程的操作结果。
这使得程序中不必使用补偿代码。并发执行的线程包括基本直接将源程序转换为可执行形式的线程300,可以保持程序中的数值一致性。而且,在对对应于线程301到303的执行路径其中之一进行控制时,可以比仅执行线程300时获得更快的执行结果。因此可以减少了总执行之间。
(结构)
图1所示为在第一实施方式中编译器器件100的结构框图。如图所示,该编译器器件100大致由分析单元101、执行路径指定单元102、优化单元103、以及代码转换单元104构成。
实际上可以通过包括MPU(微处理单元)、ROM(只读存储器)、RAM(随机存储器)和硬盘器件构成的计算机系统实现该编译器100。该编译器器件100根据存储在硬盘器件或者ROM中的计算机程序产生预期可执行程序(intendedexecutable program)。采用RAM执行单元之间的数据传输。
该分析单元101分析源程序110中的分支和执行内容,并获取写在源程序110中诸如“分支”和“重复”的信息。该分析单元101向执行路径指定单元102输出作为分析结果获得的分析信息105。
执行路径指定单元102从分析单元101接收包括源程序110中的执行路径识别码的分析信息105。该执行路径指定单元102在以可执行形式转换的源程序110中获取关于执行路径的执行频率的执行频率信息140。基于这些信息,执行路径指定单元102指定多个执行路径中的一个或者多个频繁执行路径,并通知指定的执行路径的优化单元103。
优化单元103对于可执行程序的产生执行优化,诸如优化源程序110中指令的顺序。详细地,基于从分析单元101和执行路径指定单元102接收的信息,该优化单元103优化每个指定执行路径的指令顺序从而不会产生任何向其他执行路径的分支。
代码转换单元104以通过将优化单元103优化后的代码赋予目标硬件130的单独处理器内核的形式产生应用于目标硬件130的可执行程序120。代码转换单元104向目标硬件130输出该可执行程序120。
然后在目标硬件130执行该可执行程序120。将关于作为执行结果产生的执行路径的信息发送给执行路径指定单元102作为执行频率信息140。这里,执行频率信息140表示已经在执行中采用了由分支形成的哪个执行路径。如果可执行程序120包括循环,那么该执行频率信息还表示在执行中每个单独执行路径被采用了多少次。
目标硬件130具有多个处理器内核,因此可以并行执行两个或者多个指令。目标硬件130的存储器类型或者为存储器共享型(memory sharing)或者为存储器分布型(memory distribution)。在第一实施方式中,假设目标硬件130为存储器共享型。
以下简单说明存储器共享型和存储器分布型。
如图4A所示,在存储器共享型中,多个处理器内核400到402连接到单个存储器403上。每个处理器内核400到402将来自存储器403的必要数据读取到其本身的寄存器中,采用该寄存器中的数据执行操作,并根据操作的结果更新存储在存储器403中的数据。
另一方面,如图4B所示,在存储器分布型中,多个处理器内核410到412分别连接到存储器413到415上。通过每个处理器内核410到412执行的程序设定为向所有存储器413到415反映处理器内核的操作结果。例如,在处理器内核410产生操作结果时,采用该操作结果不但更新存储在存储器413中的数据而且更新存储在存储器414和415中的数据。
尽管在上述两个实施例中处理器内核的数量为3,但是处理器内核的数量不限于此。
(数据)
输入到编译器器件100的数据包括源程序110、执行频率信息140和关于目标硬件130的硬件配置的信息。以下给出这些数据的说明。
执行频率信息140由通过分析单元101指定的执行路径识别码和表示通过识别码识别的执行路径在目标硬件130或者可以执行可执行程序的其他硬件上实际执行了多少次的信息。将获得最大执行次数的执行路径设定为具有最高执行频率的执行路径,将获得第二大次数的执行路径设定为具有第二高执行频率的执行路径等等。执行频率信息140存储在目标硬件130的RAM上,并将该信息发送给编译器器件100而且存储在其RAM内。
关于目标硬件130的硬件配置信息包括存储器信息和并行执行信息。存储器信息表示目标硬件130的存储器类型。如果目标硬件130为存储器共享型则将存储器信息设定为0,并且如果目标硬件130为存储器分布型则设定为1。将该存储器信息从目标硬件130发送给编译器器件100并存储在该编译器器件100的RAM中。并行执行信息表示通过目标硬件130能够并行执行的指令的数量,即,目标硬件130中处理器内核的数量。将该并行执行信息从目标硬件130发送给编译器器件100并还存储在编译器100的RAM中。
作为一个实施例,图5A所示为记录的源程序110。
在第一实施方式中,作为源程序110的实施例,通过编译器器件100转换图5A所示的源程序段510。以下说明源程序段510的内容以及通过编译器器件100由源程序段510产生的代码。
首先说明如图5A所示的源程序段510的内容。注意为了执行该源程序段510的内容的至少一部分通过编译器器件100产生图6到10所示的代码。
源程序段510为在源程序110中重复很多次的源程序110的一部分。图5B示出该源程序段510的控制流程图。通过参照该控制流程图说明源程序510的内容。
首先,指令块500对a和b加和并在x中存储产生的和。分支块505判断是否x≥0,如果x<0(505:是),控制进入指令块504,在该指令块504中将负x存储在y中。如果x≥0(505:否),控制进入指令块501,该指令块块501中从x中减去c并将差存储在y中。
此后,分支块506判断是否x≥10。如果x≥10(506:是),控制进入指令块502,该指令块从y中减去10并将差存储在y中。如果x<10(506:否),控制进入指令块503,该指令块503中对x加10并且将相加后的和存储在y中。
这里,在源程序段510的前一部分对a、b和c已经进行赋值指定。假设在源程序段510中由条件分支产生的三个执行路径中,执行路径551具有最高的执行频率并且执行路径552具有第二高的执行频率。该执行频率的信息可以通过在目标硬件130中执行没有优化基本上由源程序110直接转换来的可执行程序获得。
图6到图10所示的代码为表示从编译器器件100输出程序的汇编码,并且该汇编码基于图5A所示的源程序段510产生。图10所示的线程1000为主线程。在图7、8和9中分别示出的线程700、800和900用于该主线程中。尽管没有在代码中示出,但是这些线程还是构造为通过目标硬件130中单独的处理器内核执行。
图6所示的线程600为表示没有优化的源程序段510的汇编码。尽管在图10中未示出,但是线程600还是包括在作为主线程的线程1000中。
这里假设每个线程中的代码行从第一行起顺序执行。在下文中进行说明对应于每行代码的指令的含义。
在线程600中,代码601、609、617、622、627和632为用于在程序中表示分支目标的标号代码。
代码602到608对应于图5B中的程序块500和505。
代码610到616对应于图5B中的程序块501和506。
代码618到621对应于图5B中的程序块502。
代码623到626对应于图5B中的程序块503。
代码628到631对应于图5B中的程序块504。
代码633到634相当于线程600的结束操作。
另一方面,图7到图9分别示出的线程700、800和900均对应于频繁执行路径中的指令序列。
图7所示为通过优化在具有最高执行频率的执行路径551中指令序列产生的线程700。
在线程700中,代码701、713和716为标号代码。
代码702到712对应于没有任何指向其他执行路径的分支的程序块500、501和502,并包括对应于程序块505和506的代码的代码,该代码表示控制是否选择执行路径551的二元判定。
当控制选择执行路径551时,代码714和715停止其他线程800和900。
代码717和718相当于线程700的结束操作。
图8所示为通过优化具有第二高执行频率的执行路径552中的指令序列产生的线程800。
在线程800中,代码801、814和817为标号代码。
代码802到813对应于没有任何指向其他执行路径的分支的程序块500、501和503。
在控制选择执行路径552时,代码815和816停止其他线程700和900。
代码818和819相当于线程800的结束操作。
图9示出通过优化连接程序块500和504的执行路径中的指令序列产生的线程900。
在线程900中,代码901、910和913为标号代码。
代码902到909对应于没有任何指向其他执行路径的分支的程序块500和504。
在控制选择该执行路径时,代码911和912停止其他线程700和800。
代码914和915相当于线程900的结束操作。
图7、8和9分别示出的代码行702、802和902基本一样的代码,上述代码表示在一个寄存器中存储a的,但是指定不同的寄存器。原因在于该目标硬件130为存储器共享型并且因此如果将a存储于同一寄存器中,则不能保证在各线程中数值的一致性,这样便不能产生编程人员所需的执行结果。
图10所示为包括用于使目标硬件130并行执行图6到图9所示的线程600、700、800和900的线程控制代码的线程1000。当目标硬件130为存储器共享型的情况线程1000为主线程。
在线程1000中,代码1001到1004设置对应于根据分析信息104和执行频率信息140指定的频繁执行路径的线程。在该实施例中,假设目标硬件130具有足够的处理器内核数量,设定该对应于源程序段510的所有执行路径的线程。
由标号代码1005指定的代码1006到1008使得处理器内核启动相应的线程。
由标号代码1009指定的代码1010到1012等待相应的线程结束。
由标号代码1013指定的代码1014到1016放弃相应的线程并在所有线程结束后释放处理器内核。
编译器器件100产生包括主线程1000和线程600、700、800和900的可执行程序。这里注意线程600、700、800和900并行执行。
以下对图6到14以及21所示的代码进行说明。
如上所述,图6示出没有优化基本上由源程序段510直接转换来的代码。在目标硬件130为存储器共享型的情况,图7、8和9分别示出通过对执行路径551、执行路径552和连接程序块501和504的执行路径进行优化产生的代码,并且图10示出线程控制代码。另一方面,目标硬件130为存储器分布型的情况,图12、13和14分别示出通过对执行路径551、执行路径552和连接程序块501和504的执行路径进行优化产生的代码,并且图21示出线程控制代码。
此外,图10示出由目标硬件130并行执行的可执行指令数量已知的情况下的线程控制代码,而图11示出由目标硬件130并行执行的可执行指令数量未知的情况下的线程控制代码。
在以下的说明中,每个地址表示在处理器中的指令地址,例如寄存器或者存储在寄存器中数值的地址。
代码“mov(address 1),(address 2)”表示在位于address 2的寄存器中存储address 1中的数值。例如,图6中的代码602在寄存器D0中存储位于地址a中的数值。
代码“add(address 1),(address 2)”将address 1中的数值和address 2中的数值加和并采用产生的和更新address 2中的数值。例如,图6的代码604将寄存器D1的数值和寄存器D0的数值加和并将由此产生的和存储在寄存器D0中。
代码“sub(address 1),(address 2)”从address 2中的数值中减去address1中的数值和并采用产生的差值更新address 2中的数值。例如,图6的代码612从寄存器D0的数值中减去寄存器D1的数值并将由此产生的差值存储在寄存器D0中。
代码“cmp(address 1),(address 2)”将address 1中的数值和address 2中的数值进行比较。例如,图6的代码606将0和寄存器D0的值进行比较。
代码“bge(address 3)”表示如果在前一代码“cmp(address 1),(address2)”中address 2中的数值不小于address 1的数值则跳转到address 3的代码。否则,控制进行紧随其后的代码。例如,如果在前述的代码606中寄存器D0中的数值不小于0,则图6中的代码607使得不执行代码608而跳转到代码609。
如果在前述代码“cmp(address 1),(address 2)”中address 2中的数值小于address 1中的数值则代码“blt(address 3)”跳转到address 3的代码。否则,控制进行紧随其后的代码。例如,如果在前述的代码705中寄存器D10中的数值小于0,则图7中的代码706使得在跳过代码707到715的同时跳转到代码716。
代码“jmp(address 1)”跳转到address 1的代码。例如,图6中的代码608跳转到代码627同时跳过609到626。
代码“not(address 1)”表示对address 1中数值的每一位进行取反,即address1的补码形式,并采用由此产生的值更新address1中的值。例如,图6的代码629对寄存器D0的每一位取反(补码形式)并在寄存器D0存储产生的值。
代码“inc(address 1)”表示对address 1中的数值加1,并采用由此产生的和更新address 1中的数值。例如,图6的代码630对寄存器D0的数值加1并在寄存器D0中存储由此产生的和。
代码“dec(address 1)”表示对address 1中的数值减1,并采用由此产生的差更新address 1中的数值。例如,图11的代码1113对寄存器D1中的数值减1并在寄存器D1中存储由此产生的差。
代码“clr(address 1)”通过设定address 1中的值为0的方式对address 1中的数值进行清零。例如,图6中的代码633对寄存器D0的值进行清零以初始化寄存器D0。
代码“as1(address 1),(address 2)”用于避免由目标硬件130所使用的指令字长度差异引起的地址不一致。该代码主要用于从一个代码向另一个代码转换。在指令字长单元中管理程序中每个指令的地址。假设该指令字长为8位。如果指令1的地址是0,则在指令1后的指令2的地址是8。在从指令1向指令2转换时,仅仅对指令1的地址加1不可能产生指令2的地址,并因此由于地址的不一致导致不能执行指令2。因此,代码“as1(address 1),(address2)”将address 2中的数值与表示指令字长的address 1中的数值相乘,并在address 2的寄存器中存储由此产生的乘积。
代码“ret”使得返回到主线程。
以下说明线程控制代码。
代码“_createthread(address 1),(address 2)”创造开始于address1的线程,并在位于address 2的寄存器中存储关于线程执行的信息。例如,图10的代码1002创建开始于LABEL500-501-502的线程,即图7所示的线程700,并在THREAD500-501-502中存储关于线程执行的信息。
代码“_beginthread(address)”表示在address开始线程。例如,图10的代码1006启动开始于LABEL500-501-502的线程,即图7所示的线程700。
代码“_endthread”将线程设定为结束状态并返回表示线程结束的信息。例如,图7的代码717结束线程700并向主线程返回表示线程700结束的信息。
代码“_deletethread(address)”放弃开始于address的线程。例如,图10的代码1014放弃开始于LABEL500-501-502的线程,即图7所示的线程700。
代码“_killthread(address)”停止执行开始于address的线程。例如,即使线程800还在执行,图7的代码714停止开始于LABEL500-501-503的线程,即图8所示的线程800。
代码“_waitthread(address)”等待开始于adress的线程的完成。可以由上述的“_endthread”信息通知完成。例如,图10的代码1010等待THREAD500-504的完成,即图9所示的线程900。
代码“_commit(address 1),(address 2)”将产生于任何主线程和其他线程的address1中的信息映射给包括主线程和其他线程的全体的位于address 2的寄存器。
代码“_broadcast(address 1),(address 2)”在目标硬件130为存储器分布型的情况向目标硬件中所有连接到处理器内核的存储器映射一个处理器内核的处理结果。该代码采用对应于处理器内核的存储器中address 1中的值更新所有存储器中address 2中的值。
代码“_getparrallelnum(address)”将由目标硬件130可并行执行的线程数量返回给address。该代码用于检测目标硬件130中可以并行执行的处理器内核的数量。特别地,编译过程中当在目标硬件130中可以并行执行的处理器内核的数量为未知时该代码是必要的。
(操作)
以下采用流程图说明编译器器件100在产生可执行程序120的操作。
在编译器器件100中输入源程序110时,分析单元101获得源程序110中关于分支和循环的信息,基于该获得的信息检测执行路径,并分配执行路径的标识符。
最初,通过优化单元103和代码转换单元104将源程序110不进行优化地转换为可执行程序。为了获得关于执行路径执行频率的信息,在目标硬件中130执行该可执行程序。
图15所示为获取关于执行路径执行频率信息的操作流程图。
为了测量源程序段510中执行路径的执行频率,该优化单元103不进行优化地转换源程序段510并插入分析代码(profiling code)从而产生可执行代码。代码转换单元104将可执行程序转换为可以在目标硬件130中运行的可执行程序(S1500)。这里提到的分析代码用于检测条件分支选择了哪个执行路径。无论何时只要控制选择了该执行路径该分析代码就在该执行路径对应的标志符上累加1。在插入分析代码时,可执行程序的执行速度降低。因此,不会将分析代码插入由编译器器件100最终产生的预期可执行程序中。
然后,目标硬件130执行基本直接由源程序转换的可执行程序(S1502),以计算执行路径的执行频率。每次选择执行路径时,向对应于执行路径标识符的计数累加1。以这种方式计算出的表示执行路径执行频率的信息作为执行频率信息140存储在目标硬件130的RAM中。然后将该执行频率信息140输出到编译器器件100中的执行路径指定单元102。基于该信息,产生预期可执行程序。
当向编译器器件100输出执行频率信息140时,该目标硬件130还输出关于硬件配置的信息。该信息包括表示目标硬件130存储器类型的存储器信息以及表示在目标硬件130中可以并行执行的处理器内核数量的并行执行信息。这些信息事先存储在目标硬件130的ROM中,并和执行频率信息140一起输出给编译器器件100。
图19所示为通过编译器器件100产生预期可执行程序的操作流程图。
首先,优化单元103产生基本上直接将源程序110转换为可执行形式的第一代码(S1901)。执行路径指定单元102基于从目标硬件130获得的执行路径频率信息140按执行频率降序的顺序提取一个或者多个优先执行路径,即一个或者多个频繁执行路径(S1905)。该优化单元103基于在目标硬件130中可以并行执行的处理器内核数量通过优化每个优先执行路径中的指令序列产生第二代码(S1907)。这里,可以产生对应于不同优先执行路径其中之一的多组第二代码,第二代码的数量比可以并行执行的处理器内核数量少1。详细地说,对于按执行频率降序排列的每个优先执行路径,产生对应于优化后的这些执行路径中指令的线程。作为一个实施例,如果可以并行执行的处理器内核的数量为4,则产生具有对应于第一到第三高执行频率的线程。这里注意第一代码和用于控制已产生的多组第二代码的代码包括在同一线程中。
此后,该代码转换单元104产生适用于目标硬件130的可执行程序,通过该组织后的代码并行执行第一代码和多组第二代码(S1909)。
以下采用将图5A所示的源程序段转换为可执行程序的具体实施例来详细说明该操作。
当在编译器器件100中输入包括源程序段510的源程序110时,分析单元101分析该源程序段510,并检测出三个执行路径,执行路径500-501-502(执行路径551)、执行路径500-501-503(执行路径552)和如图5B所示的执行路径500-504。分析单元101对于每个执行路径分配识别码。优化单元103产生不经过优化基本直接将源程序段510转换为编码码的线程600的代码。优化单元103在产生的代码中插入分析代码。代码转换单元104将该代码转换为适用于目标硬件130的可执行程序。
目标硬件130执行可执行程序。基于该执行,目标硬件130产生表示执行路径执行频率的执行频率信息140,并将该信息输出给编译器器件100。例如,执行频率信息140显示执行路径500-501-502已经执行了24次,执行路径500-501-503已经执行了15次,并且执行路径500-504已经执行了3次。目标硬件130还向编译器器件100输出关于其硬件配置的信息。例如,该信息包括设定表示存储器共享型为0的存储器信息以及表示可以并行执行的处理器内核的数量为4的并行执行信息。
该执行路径指定单元102接收执行频率信息140。基于该执行频率信息140,优化单元103产生主线程1000。由于可以并行执行的处理器内核的数量为4,因此并发可执行线程的数量为包括包含在主线程1000中的线程600的四个线程。因此,在主线程1000中产生三个线程700、800和900。优化单元103产生用于使每个线程通过单独处理器内核执行的代码。代码转换单元104通过由优化单元103产生的代码产生适用于目标硬件130的可执行程序120。
以上说明使用了显然跟随有另一源程序段的源程序段510的实施例。如果任何线程700、800和900的执行条件为真,则在那个线程后执行对应于下一源程序段的可执行代码。如果每个线程700、800和900的执行条件为假,则在线程600后执行对应于下一源程序段的可执行代码。
第二实施方式
本发明的第二实施方式说明目标硬件130为存储器分布型的情况。以下说明主要集中于和第一实施方式的不同之处。
第二实施方式和第一实施方式的不同点在于,由于每个处理器内核均连接到单独的存储器上并使用连接的存储器上的值,因此不同于存储器共享型的情况,不会存在由存储器访问竞争引起的性能降低的危险。
采用图12到14和21所示的代码对此进行详细说明。图12示出和图7所示的线程700具有同样执行内容的线程1200。图13示出和图8所示的线程800具有同样执行内容的线程1300。图14示出和图9所示的线程900具有同样执行内容的线程1400。图21示出存储器分布型情况下的主线程2100。
在目标硬件130为存储器共享型时,数值a需要存储在每个线程700、800和900的寄存器中,如图7到图9中由代码702、802和902所示。在存储器分布型中,这种存储是不必要的,由于主线程2100向对应于图21所示的代码2104到2106所示的线程1200、1300和1400的存储器的寄存器传送数值a。
更详细地,代码2105使对应于由代码2101到2103产生的线程1200、1300和1400的处理器内核以在各自存储器的寄存器D0中存储数值a。
同样,代码2106使对应于有由代码2101到2103产生的线程1200、1300和1400的处理器内核以在各自存储器的寄存器D1中存储数值b。
如果任何线程1200、1300和1400的执行条件为真,则该线程的执行结果需要映射给连接到运行主线程2100的处理器内核的存储器中。这可以通过“_commit”代码实现。例如,图12所示的代码1215和代码1216为这种代码。该代码使得线程的执行结果映射到主线程的存储器中。
在目标硬件130为存储器分布型的情况,编译器器件100产生组织为包括线程1200、1300和1400以及包含线程600的主线程2100的可执行程序。这种可执行程序可以在目标硬件130中正确地执行同时维持数值一致性。
以下通过参照图17的流程图,说明在存储器分布型的情况可执行程序的步骤。下面的说明主要集中于主线程2100的步骤。
首先,产生要通过其他处理器内核执行的线程,即线程1200、1300和1400(S1700)。将在前一源程序段中获得的数据传送到并存储在这些处理器内核每个的存储器中(S1701)。此后,执行每个线程(S1702)。一旦所有线程已经结束(S1703),终止该线程(S1704)。
第三实施方式
第一和第二实施方式说明了对于编译器器件100目标硬件130可以并行执行的指令数量为已知的情况。但是,还可能存在在目标硬件130中可以并行执行的指令数量为未知的情况。该情况包括当事先将执行频率信息140和存储器信息提供给编译器器件100时,该编译器器件100需要在没有从目标硬件130向编译器器件100的信息传送的情况下产生可执行程序120。在这种情况,在该主线程中需要包含用于获取处理器内核数量的代码和用于根据处理器内核的数量设定线程数量的代码。图11示出处理器内核数量为未知情况下主线程1100的代码。以下说明该代码的执行内容。这里假设该编译器器件100产生如图6到9的四个线程600、700、800和900。
有标号代码1104指定的代码1105到1117获取目标硬件130的处理器内核的数量并根据该处理器内核的数量设定线程的数量。
首先,获取由该编译器器件100产生的线程数量,由m表示,并存储在寄存器D0中(代码1105)。接下来,获取可以在目标硬件130中并行执行的处理器内核的数量,由n表示,并存储在寄存器D1中(代码1106)。将寄存器D0中的数量m和寄存器D1中的数量n进行比较(代码1107)。如果n≥m,该控制跳转到标号代码1110(代码1108)。如果n<m,控制跳转到标号代码1112(代码1109)。
如果n≥m,没有必要进行调节,因此将m存储在寄存器D1中(代码1111)。
如果n<m,线程数量超过了并发可执行指令的数量,这意味着不可能执行全部的指令。
因此,在寄存器D1中存储从寄存器D1中的数值n减1所获得的数量(代码1113)。该数量n-1表示可执行线程的数量。使用一个额外的处理器内核执行基本直接转换源程序110得到的线程600。
接下来,为了计算指令地址,将n-1乘以指令字长(代码1114)。例如,如果指令字长为8位,那么n-1乘以8。此后,在寄存器D2中存储P_POINTER(代码1115)。从寄存器D2中的数值中减去寄存器D1中的数值,并且采用由此产生的差更新寄存器D2(代码1116)。此后,控制跳转到寄存器D2中的地址(代码1117)。因此,寄存器D2中的数值确定要启动线程700、800和900中的哪个线程。例如,如果可以并行执行处理器内核的数量为2,控制跳转到代码1121。如果可以并行执行处理器内核的数量为3,控制跳转到代码1120。这里注意代码1119到代码1121分别启动对应于按执行频率升序排列的执行路径的线程900、800和700。
通过采用这种主线程1100,该编译器器件100即使在在目标硬件130中可以并行执行的指令数量为未知的情况下也可以产生预期可执行程序120,尽管在图11中省略,但是代码1126以后的代码和图10中的代码1012以后的代码一样。
图16所示为对目标硬件130的硬件配置进行判断操作的流程图。
首先,优化单元103判断在目标硬件130中可以并行执行的指令数量为已知还是未知(S1601)。根据编译器器件100是否已经从目标硬件130获得并行执行信息可以进行判断。如果并发执行的线程数量为未知,则产生图11所示的代码。优化单元103还获取存储器信息,并判断该目标硬件130为存储器共享型还是存储器分布型(S1603)。基于该判断,产生可执行程序120。
第四实施方式
本发明的第四实施方式和第一到第三实施方式不同点在于用于执行程序的单元包括在编译器器件中。图18所示为已经包括用于执行程序的单元的程序转换和执行器件1800的框图。
更详细地,除了编译器器件100的结构部件外,该程序转换和执行器件1800包括源程序存储单元1801、可执行程序存储单元1806,以及执行单元1807。这省去了为了使目标硬件执行原始可执行程序以获取执行频率信息而连接到目标硬件的麻烦。该程序转换和执行器件1800可以获取可执行程序的执行结果和其本身的执行频率信息。
源程序存储单元1801存储输入的源程序。
可执行程序存储单元1806用于存储由代码转换单元1805产生的可执行程序。该可执行程序存储单元1806包括RAM。
执行单元1807从可执行程序存储单元1806中读取可执行程序,并执行该读取的可执行程序。执行单元1807包括MPU、ROM和RAM并以和图1所示的目标硬件130同样的方式实现功能。执行单元1807的MPU由多个处理器内核构成。
产生于程序转换和执行器件1800中的代码和第一到第三实施方式中的一样。
根据该结构,程序转换和执行器件1800可以用作在转换程序同时执行程序的解释程序(interpreter)。
变型实施例
尽管已经通过上述实施方式说明了本发明,但是本发明不限于以上陈述。以下给出实施例的变型。
(1)第一和第二实施方式说明了目标硬件具有足够数量的用于执行所有产生线程的处理器内核的情况。如果仅有几个处理器内核,例如2个,但是,组织该主线程使得仅并行执行线程600和线程700。在该情况下,省略图10所示的代码1003、1004、1007、1008、1011、1012、1015和1016。
(2)上述实施方式说明了假设第一代码,即如3所示的线程300比其他线程慢,产生预期可执行程序。另外,考虑到线程300比其他线程快的情况,用于停止其他线程的代码可以插入线程300的末端。
(3)上述的实施方式说明了目标硬件具有多个处理器内核的情况。作为替代,把一台个人计算机作为一个处理器内核,多台个人计算机通过网络连接到编译器器件上以执行并行执行。
(4)上述实施方式说明了一个线程的执行条件为真的情况,执行另一线程的处理器内核停止执行,删除线程和操作数据,并然后执行新分配的线程。然而,当同一线程一次又一次的循环,每次重新分配同一线程是低效率的,这可能会降低目标程序的执行速度。因此,如果下一线程和当前线程一样并且仅仅操作数据不同,则可以产生包括用于保留当前线程不抛弃该线程并且仅传送必要的操作数据的目标程序。
(5)上述实施方式说明了通过彼此连接操作的器件的功能单元产生源程序的情况。但是,本发明还可以用于通过根据上述操作步骤产生目标程序的方法来实现。
尽管已经参照附图以实施例的方式对本发明进行了充分描述,但是应该注意的是,很显然对于本领域的技术人员而言,可以对本发明做出各种变型和改进。
因此,除非这些变型和改进脱离开本发明的范围,否则将认为它们包含在本发明中。

Claims (28)

1、一种程序转换器件,用于将包括条件分支的源程序转换为计算机的目标程序,所述计算机至少可以并行执行两个指令,所述程序转换器件包括:
执行路径指定单元,用于指定源程序的一个程序段中多条执行路径中的一条执行路径,所述程序段包括条件分支和所述条件分支的多个分支目标;
第一代码产生单元,用于产生对应于所述程序段中所有指令的第一代码;
第二代码产生单元,用于产生对应于指定执行路径中的指令序列的第二代码,所述第二代码包括表示如果用于选择执行路径的条件为真则继续执行序列中跟在条件分支后面的指令以及如果条件为假停止继续所述跟在条件分支后面的指令的代码,以作为对应于条件分支的代码;
第三代码产生单元,用于产生对应于所述程序段之后的源程序的随后程序段中指令的第三代码;以及
目标程序产生单元,用于产生目标程序,所述目标程序使得计算机并行执行所述第一代码和所述第二代码;并且如果所述条件为真,在第二代码后执行第三代码;而如果所述条件为假,在所述第一代码后执行所述第三代码。
2、根据权利要求1所述的程序转换器件,其特征在于,
所述目标程序产生单元产生还会使计算机在所述第一代码先于所述第二代码结束时停止执行所述第二代码的所述目标程序。
3、根据权利要求1所述的程序转换器件,其特征在于,还包括:
执行路径获取单元,用于通过所述计算机执行由所述源程序转化来的程序,而从所述计算机获取表示在所述程序段中被最频繁选择的执行路径的信息;
其中,所述执行路径指定单元指定所述被最频繁选择的执行路径。
4、根据权利要求3所述的程序转换器件,其特征在于,还包括
并行执行限度获取单元,用于获取表示由所述计算机可并行执行的可执行指令数量的数量m,
其中所述执行路径获取单元还从计算机获取表示程序段中第二频繁选择的执行路径到最少选择的执行路径的信息,
所述执行路径指定单元还基于数量m指定第二频繁执行路径到第n频繁执行路径,其中n=m-1,
所述第二代码产生单元产生与由执行路径指定单元指定的最频繁执行路径到第n频繁执行路径一一对应的n组第二代码,并且
所述目标程序产生单元产生使计算机并行地执行第一代码和n组第二代码的目标代码。
5、根据权利要求4所述的程序转换器件,其特征在于,
所述目标程序产生单元产生还使计算机停止执行除用于相应执行路径的条件为真的一组第二代码以外的n组第二代码的目标程序。
6、根据权利要求5所述的程序转换器件,其特征在于,
所述目标程序产生单元产生使计算机不是删除而是保留任何被停止的多组第二代码的目标程序。
7、根据权利要求1所述的程序转换器件,其特征在于,还包括:
存储信息获取单元,用于获取表示计算机为计算机中的所有处理器内核共享一个存储器的存储器共享型还是处理器内核分别具有单独存储器的存储器分布型的存储器信息,
其中如果存储器信息显示存储器共享型,所述目标程序产生单元产生还使分别执行第一代码和第二代码的处理器内核单独处理同一变量的目标程序。
8、根据权利要求1所述的程序转换器件,其特征在于,还包括
用于将目标程序转换为适用于计算机的机器语言的机器语言转换单元。
9、一种程序转换和执行器件,用于将包括条件分支的源程序转化为目标程序,所述程序转换和执行器件可以并行执行至少两个指令,并包括:
执行路径指定单元,用于指定源程序的程序段中多个执行路径中的一个执行路径,所述程序段包括条件分支和所述条件分支的多个分支目标;
第一代码产生单元,用于产生对应于所述程序段中所有指令的第一代码;
执行单元,用于执行由所述源程序转化来的程序,所述程序包括第一代码;
获取单元,用于通过所述执行单元执行所述程序获取表示在程序段中被最频繁选择的执行路径的信息,其中所述执行路径指定单元指定所述被最频繁选择的执行路径;
第二代码产生单元,用于产生对应于指定的执行路径中指令序列的第二代码,所述第二代码包括表示如果用于执行路径的条件为真则继续执行序列中跟在条件分支后的指令以及如果条件为假停止继续所述跟在条件分支后的指令的代码作为对应于条件分支的代码;
第三代码产生单元,用于产生对应于所述程序段之后的源程序的随后程序段中指令的第三代码;以及
目标程序产生单元,用于产生目标程序,所述目标程序使执行单元并行执行第一代码和第二代码;并且如果条件为真,在第二代码后执行第三代码;而如果条件为假,在第一代码后执行第三代码;
其中所述执行单元执行所述的目标程序。
10、根据权利要求9所述的程序转换和执行器件,其特征在于,
所述目标程序产生单元产生还会使所述执行单元在所述第一代码先于所述第二代码结束时停止执行所述第二代码的目标程序。
11、根据权利要求10所述的程序转换和执行器件,其特征在于,
并行执行限度获取单元,用于获取表示由程序转换和执行器件并行执行的可执行指令数量的数量m,
其中所述执行路径获取单元还获取在程序段中第二频繁选择的执行路径到最少选择的执行路径的信息,
所述执行路径指定单元还基于数量m指定第二频繁执行路径到第n频繁执行路径,其中n=m-1,
所述第二代码产生单元产生与由执行路径指定单元指定的最高频繁执行路径到第n频繁执行路径一一对应的n组第二代码,并且
所述目标程序产生单元产生使所述执行单元并行地执行所述第一代码和所述n组第二代码的目标程序。
12、根据权利要求11所述的程序转换和执行器件,其特征在于,
所述目标程序产生单元产生还使所述执行单元停止执行除用于相应执行路径的条件为真的一组第二代码以外的n组第二代码的目标程序。
13、根据权利要求12所述的程序转换和执行器件,其特征在于,
所述目标程序产生单元产生使所述执行单元不是删除而是保留任何被停止的多组第二代码的目标程序。
14、根据权利要求9所述的程序转换和执行器件,其特征在于,
如果程序转换和执行器件的存储器类型为在程序转换和执行器件中所有处理器内核共享一个存储器的存储器共享型,则所述目标程序产生单元产生还使分别执行第一代码和第二代码的处理器内核单独处理同一变量的目标程序。
15、一种程序转换方法,用于将包括条件分支的源程序转换为用于可以并行执行至少两个指令的计算机的目标程序,所述方法包括:
执行路径指定步骤,用于指定源程序的一个程序段中多个执行路径中的一个执行路径,所述程序段包括条件分支和所述条件分支的多个分支目标;
第一代码产生步骤,用于产生对应于所述程序段所有指令的第一代码;
第二代码产生步骤,用于产生对应于指定执行路径中指令序列的第二代码,所述第二代码包括表示如果用于执行路径的条件为真则继续执行序列中跟在条件分支之后的指令以及如果条件为假停止继续所述跟在条件分支之后的指令的代码作为对应于条件分支的代码;
第三代码产生步骤,用于产生对应于所述程序段之后的源程序的随后程序段中指令的第三代码;以及
目标程序产生步骤,用于产生目标程序,所述目标程序使得所述计算机并行执行第一代码和第二代码;并且如果条件为真,在第二代码后执行第三代码;而如果条件为假,在第一代码后执行第三代码。
16、根据权利要求15所述的程序转换方法,其特征在于,
所述目标程序产生步骤产生还使所述计算机在所述第一代码先于所述第二代码结束时停止执行第二代码的目标程序。
17、根据权利要求15所述的程序转换方法,其特征在于,还包括,
执行路径获取步骤,用于通过所述计算机执行由所述源程序转化得到的程序,而从所述计算机获取表示程序段中被最频繁选择的执行路径的信息;
其中,所述执行路径指定步骤指定所述被最频繁选择的执行路径。
18、根据权利要求17所述的程序转换方法,其特征在于,还包括,
并行执行限度获取步骤,用于获取表示由所述计算机并行执行的可执行指令数量的数量m,
其中所述执行路径获取步骤还从计算机获取表示在程序段中第二频繁选择的执行路径到最少选择的执行路径的信息,
所述执行路径指定步骤还基于数量m指定第二频繁执行路径到第n频繁执行路径,其中n=m-1,
所述第二代码产生步骤产生与由执行路径指定步骤指定的最高频繁执行路径到第n高频繁执行路径一一对应的n组第二代码,并且
所述目标程序产生步骤产生使所述计算机并行地执行第一代码和所述n组第二代码的目标代码。
19、根据权利要求18所述的程序转换方法,其特征在于,
所述目标程序产生步骤产生还使所述计算机停止执行除用于相应执行路径的条件为真的一组第二代码以外的n组第二代码的目标程序。
20、根据权利要求19所述的程序转换方法,其特征在于,
所述目标程序产生步骤产生使所述计算机不是删除而是保留任何被停止的多组第二代码的目标程序。
21、根据权利要求15所述的程序转换方法,其特征在于,还包括:
存储信息获取步骤,用于获取表示计算机为计算机中的所有处理器内核共享一个存储器的存储器共享型还是处理器内核分别具有单独存储器的存储器分布型的存储器信息,
其中如果存储器信息显示存储器共享型,所述目标程序产生步骤产生还使分别执行第一代码和第二代码的处理器内核单独处理同一变量的目标程序。
22、根据权利要求15所述的程序转换方法,其特征在于,还包括:
将目标程序转换为适用于计算机的机器语言的机器语言转换步骤。
23、一种程序转换和执行方法,用于将包括条件分支的源程序转化为目标程序的程序转换和执行器件,所述程序转换和执行器件可以至少并行执行两个指令,所述方法包括:
执行路径指定步骤,用于指定源程序的一个程序段中多个执行路径中的一个执行路径,所述程序段包括条件分支和所述条件分支的多个分支目标;
第一代码产生步骤,用于在所述程序段中产生对应于所有指令的第一代码;
执行步骤,用于执行由所述源程序转化的程序,所述程序包括所述第一代码;
获取步骤,用于通过执行所述程序获取表示在程序段中被最频繁选择的执行路径的信息,其中执行路径指定步骤指定所述被最频繁选择的的执行路径;
第二代码产生步骤,用于产生对应于指定的执行路径中指令序列的第二代码,所述第二代码包括表示如果用于执行路径的条件为真则继续执行序列中跟在条件分支之后的指令,以及如果条件为假停止继续所述跟在条件分支之后的指令的代码作为对应于条件分支的代码;
第三代码产生步骤,用于产生对应于所述程序段之后的所述源程序的随后程序段中指令的第三代码;以及
目标程序产生步骤,用于产生目标程序,所述目标程序使第一代码和第二代码并行执行;并且如果所述条件为真,在第二代码后执行第三代码;而如果所述条件为假,在第一代码后执行第三代码;
其中,所述执行步骤执行所述目标程序。
24、根据权利要求23所述的程序转换和执行方法,其特征在于,
所述目标代码产生步骤产生还使得在第一代码先于第二代码结束时停止第二代码执行的目标程序。
25、根据权利要求24所述的程序转换和执行方法,其特征在于,还包括,
并行执行限度获取步骤,用于获取表示由程序转换和执行器件并行执行的可执行指令数量的数量m,
其中所述执行路径获取步骤还在程序段中获得表示第二频繁选择的执行路径到最少选择的执行路径的信息,
所述执行路径指定步骤还基于数量m指定第二频繁执行路径到第n频繁执行路径,其中n=m-1,
所述第二代码产生步骤产生与由执行路径指定步骤指定的最高频繁执行路径到第n频繁执行路径一一对应的n组第二代码,并且
所述目标程序产生步骤产生使并行地执行第一代码和n组第二代码的目标程序。
26、根据权利要求25所述的程序转换和执行方法,其特征在于,
所述目标程序产生步骤产生还使停止执行除用于相应执行路径的条件为真的一组第二代码以外的n组第二代码的目标程序。
27、根据权利要求26所述的程序转换和执行方法,其特征在于,
所述目标程序产生步骤产生使得不是删除而是保留任何被停止的第二代码的目标程序。
28、根据权利要求23所述的程序转换和执行方法,其特征在于,
如果程序转换和执行器件的存储器类型为在程序转换和执行器件中所有处理器内核共享一个存储器的存储器共享型,则所述目标程序产生步骤产生还使分别执行第一代码和第二代码的处理器内核单独处理同一变量的目标程序。
CNB2005101236116A 2004-11-25 2005-11-18 程序转换器件及方法、程序转换执行器件及转换执行方法 Expired - Fee Related CN100562849C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP341236/2004 2004-11-25
JP2004-341236 2004-11-25
JP2004341236A JP4783005B2 (ja) 2004-11-25 2004-11-25 プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。

Publications (2)

Publication Number Publication Date
CN1783012A CN1783012A (zh) 2006-06-07
CN100562849C true CN100562849C (zh) 2009-11-25

Family

ID=36585567

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005101236116A Expired - Fee Related CN100562849C (zh) 2004-11-25 2005-11-18 程序转换器件及方法、程序转换执行器件及转换执行方法

Country Status (3)

Country Link
US (1) US20060130012A1 (zh)
JP (1) JP4783005B2 (zh)
CN (1) CN100562849C (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4712512B2 (ja) * 2005-10-14 2011-06-29 富士通株式会社 プログラム変換プログラム、プログラム変換装置、プログラム変換方法
WO2008072334A1 (ja) * 2006-12-14 2008-06-19 Fujitsu Limited コンパイル方法及びコンパイラ
JP2008158806A (ja) * 2006-12-22 2008-07-10 Matsushita Electric Ind Co Ltd 複数プロセッサエレメントを備えるプロセッサ用プログラム及びそのプログラムの生成方法及び生成装置
EP2257874A4 (en) 2008-03-27 2013-07-17 Rocketick Technologies Ltd DESIGN SIMULATION ON THE BASIS OF PARALLEL PROCESSORS
US9032377B2 (en) * 2008-07-10 2015-05-12 Rocketick Technologies Ltd. Efficient parallel computation of dependency problems
JP2010039536A (ja) * 2008-07-31 2010-02-18 Panasonic Corp プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
US9489183B2 (en) 2010-10-12 2016-11-08 Microsoft Technology Licensing, Llc Tile communication operator
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) * 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US9128748B2 (en) 2011-04-12 2015-09-08 Rocketick Technologies Ltd. Parallel simulation using multiple co-simulators
US9195443B2 (en) 2012-01-18 2015-11-24 International Business Machines Corporation Providing performance tuned versions of compiled code to a CPU in a system of heterogeneous cores
US20150363230A1 (en) * 2013-01-23 2015-12-17 Waseda University Parallelism extraction method and method for making program
EP2972782A1 (en) * 2013-03-15 2016-01-20 Intel Corporation Path profiling using hardware and software combination
IL232836A0 (en) * 2013-06-02 2014-08-31 Rocketick Technologies Ltd Efficient parallel computation of dependency problems
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9372695B2 (en) * 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9335987B2 (en) * 2013-12-09 2016-05-10 International Business Machines Corporation Data object with common statement series
JP6592450B2 (ja) * 2014-03-11 2019-10-16 アイイーエックス グループ,インコーポレーテッド データ同期及びフェイルオーバ管理のためのシステム及び方法
US9858058B2 (en) 2014-03-31 2018-01-02 International Business Machines Corporation Partition mobility for partitions with extended code

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2921190B2 (ja) * 1991-07-25 1999-07-19 日本電気株式会社 並列実行方式
FR2685511B1 (fr) * 1991-12-19 1994-02-04 Bull Sa Procede de classification des architectures d'ordinateur.
JPH0660047A (ja) * 1992-08-05 1994-03-04 Seiko Epson Corp マルチプロセッサ処理装置
JPH0736680A (ja) * 1993-07-23 1995-02-07 Omron Corp 並列化プログラム開発支援装置
JPH1196005A (ja) * 1997-09-19 1999-04-09 Nec Corp 並列処理装置
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6308261B1 (en) * 1998-01-30 2001-10-23 Hewlett-Packard Company Computer system having an instruction for probing memory latency
JP2000163266A (ja) * 1998-11-30 2000-06-16 Mitsubishi Electric Corp 命令実行方式
JP3641997B2 (ja) * 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体
EP1365328B1 (en) * 2001-02-28 2013-09-04 Fujitsu Limited Method for executing parallel process, and multi-processor computer
JP2003323304A (ja) * 2002-04-30 2003-11-14 Fujitsu Ltd 投機タスク生成方法および装置
JP3896087B2 (ja) * 2003-01-28 2007-03-22 松下電器産業株式会社 コンパイラ装置およびコンパイル方法
JP2004303113A (ja) * 2003-04-01 2004-10-28 Hitachi Ltd 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法

Also Published As

Publication number Publication date
JP2006154971A (ja) 2006-06-15
JP4783005B2 (ja) 2011-09-28
US20060130012A1 (en) 2006-06-15
CN1783012A (zh) 2006-06-07

Similar Documents

Publication Publication Date Title
CN100562849C (zh) 程序转换器件及方法、程序转换执行器件及转换执行方法
US5212794A (en) Method for optimizing computer code to provide more efficient execution on computers having cache memories
US7082602B2 (en) Function unit based finite state automata data structure, transitions and methods for making the same
US5339420A (en) Partitioning case statements for optimal execution performance
JPH06250846A (ja) コンパイル装置
Bala et al. Efficient instruction scheduling using finite state automata
CN100388201C (zh) 用于多存储器多处理系统的程序代码大小划分系统和方法
JPH10187443A (ja) 複数の非分岐命令と分岐命令とを有する基本ブロックにおける分岐実行システムおよび方法
CN101563673A (zh) 编译方法以及编译器
CN100382028C (zh) 中间代码预处理、执行装置及执行系统及计算机程序产品
JP2003099248A (ja) プロセッサ、コンパイル装置及びコンパイル方法
US4853872A (en) Program execution method in a system having plural computers
US7058937B2 (en) Methods and systems for integrated scheduling and resource management for a compiler
WO2000038054A1 (fr) Appareil et procede de generation d'objet d'optimisation
CN100541421C (zh) 由专用指令配置的处理器和用于这种处理器的分配方法
CN101246433A (zh) 产生优化程序的装置和方法、程序执行装置及记录介质
US7000091B2 (en) System and method for independent branching in systems with plural processing elements
US20030120897A1 (en) Multiple function unit processor using distributed variable length instruction words
Taft Achieving 60 GFLOP/s on the production CFD code OVERFLOW-MLP
Wilson et al. An ILP-based approach to code generation
Mantripragada et al. A new framework for integrated global local scheduling
US20210373974A1 (en) Accelerated Operation of a Graph Streaming Processor
Warshall et al. A general-purpose table-driven compiler
Eigenmann et al. Cedar Fortrand its compiler
JP2729795B2 (ja) 並列計算機及びその制御方法

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20091125

Termination date: 20121118