CN102105864A - 程序变换装置以及程序变换方法 - Google Patents

程序变换装置以及程序变换方法 Download PDF

Info

Publication number
CN102105864A
CN102105864A CN2009801294211A CN200980129421A CN102105864A CN 102105864 A CN102105864 A CN 102105864A CN 2009801294211 A CN2009801294211 A CN 2009801294211A CN 200980129421 A CN200980129421 A CN 200980129421A CN 102105864 A CN102105864 A CN 102105864A
Authority
CN
China
Prior art keywords
thread
mentioned
variable
instruction
main body
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2009801294211A
Other languages
English (en)
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 CN102105864A publication Critical patent/CN102105864A/zh
Pending legal-status Critical Current

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/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • 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

本发明的程序变换装置(1)具备:线程制作部(130),根据与程序中的程序部分的执行路径有关的路径信息,制作与上述程序部分等价的多个线程,且各个线程与上述程序部分的多个执行路径中的至少一个执行路径等价;置换部(140),置换上述多个线程的变量,以免在上述多个线程间引起变量的写入冲突,并使得只有单一的线程执行在上述多个线程间共享的变量的值的写入;以及线程并行化部(102),生成在置换变量之后使多个线程推测性地并行执行的程序。

Description

程序变换装置以及程序变换方法
技术领域
本发明涉及程序变换装置以及程序变换方法,特别涉及为了缩短程序执行时间而将程序的指定部分的执行路径变换为能够推测性地执行的多个线程的程序变换技术。
背景技术
由于近来的数字电视、蓝光刻录机、便携电话等多媒体处理的量和质的扩大、通信速度的扩大、以游戏机为代表的接口处理量的扩大等,对搭载于民用组装设备的处理器的性能提高的期待是没有止境的。
此外,由于近来的半导体技术的进步,在搭载于民用组装设备的处理器中也准备了能够廉价地使用通过多处理器结构能够并行执行程序部分(线程)的处理器、或具有能够用单一处理器并行执行多个线程的线程并行执行功能的处理器的环境。
另一方面,在有效利用这些处理器的编译器等程序变换装置中,重要的是将处理器的计算资源有效地利用,并更高速地执行程序。
作为这样的具有线程并行化功能的处理器的程序变换方法,有专利文献1。
该专利文献1的方法,将程序的指定部分按每个执行路径进行线程化,并且,按每个线程实施最优化,并将多个线程并行执行,由此在短时间内执行程序的指定部分。能够在短时间内执行的主要原因是实施特殊化为指定的执行路径的最优化、以及将生成的线程并行执行。
通常,程序的指定部分的执行路径是在执行时被选择唯一的执行路径来执行。另一方面,专利文献1提供的程序变换装置进行将按每个执行路径生成的线程并行执行、将原来不被选择的执行路径也并行执行的“推测性”的线程执行。即,专利文献1提供进行将程序的指定部分的执行路径变换为推测性地执行的线程的“软件·线程推测变换”的程序变换装置。
例如,如图38(专利文献1的图3)所示,首先,从作为变换前的程序部分的线程300生成线程301、线程302、线程303。这里,线程301中的I、J、K、Q、S、L、U、T以及X表示基本块。这里,基本块是指在线程中不包含分支及合流而被连续处理的部分,基本块中的指令从基本块的入口向出口依次被执行。从基本块画出的箭头表示执行的转移,例如,表示从基本块I的出口分支为基本块J、基本块X。另外,也可以在基本块的开头包含合流,也可以在最后包含分支。
此外,线程301中的基本块I、J及Q表示进行与执行转移在线程300中按照基本块I、基本块J、基本块Q的顺序移动时的执行路径等价的动作的基本块。线程302的基本块I、J、K、S及T、线程303的基本块I、J、K及L也同样。
接着,按取出的每个线程进行最优化,缩短每一个线程的执行时间,并且,将线程300、线程301、线程302以及线程303并行执行,由此与单独执行变换前的程序部分即线程300的情况相比,有实现执行时间的缩短的效果。
现有技术文献
专利文献
专利文献1:日本特开2006-154971号公报
发明内容
发明要解决的课题
在本发明中,基本思想基于专利文献1,目的是以共享存储器型的多处理结构的计算机系统为对象,提供一种更实际且功能进一步扩展的程序变换装置。具体而言,目的在于以能够并行执行指令的处理器的共有存储器型的多处理器结构的计算机系统为对象,提供包括不引起向共享存储器的写入冲突的线程生成、利用了执行路径上的变量所保持的值的线程生成、线程的执行控制指令生成及线程内部的指令调度的程序变换装置。
另外,存储器在程序上表现为变量,因此共享存储器也表现为共享变量。
解决课题的手段
为了达到上述目的,本发明的程序变换装置具备:线程制作部,根据与程序中的程序部分的执行路径有关的路径信息,制作与上述程序部分等价的多个线程、即各个线程与上述程序部分的多个执行路径中的至少一个执行路径等价的线程;置换部,置换上述多个线程的变量,以免在上述多个线程间引起向变量的写入冲突,并使得只有单一的线程执行在上述多个线程间共享的变量的值的写入;以及线程并行化部,生成在置换变量之后使多个线程推测性地并行执行的程序。
根据该结构,通过以多个线程并行执行指定的程序部分,由此能够在短时间内执行指定的程序部分。
此外,上述线程制作部还可以具备:线程主体块生成部,将构成上述程序部分的多个执行路径中的一个执行路径的指令复制,由此生成作为线程的主体的线程主体块;以及其他线程停止块生成部,生成由使其他线程的执行停止的指令构成的其他线程停止块,并配置在上述线程主体块之后;上述置换部具备:出入口生存变量检测部,检测出入口生存变量,该出入口生存变量是在上述线程主体块的入口及出口生存的变量;出入口变量置换部,按每个上述出入口生存变量生成变量,并将上述线程主体块的上述出入口生存变量置换为新生成的变量;入口块生成部,生成入口块,并配置在上述线程主体块之前,上述入口块由将上述出入口生存变量中的在入口生存的变量所保持的值代入到由上述出入口变量置换部置换后的变量中的指令构成;出口块生成部,生成出口块,并配置在上述其他线程停止块之后,上述出口块由将上述出入口变量置换部置换的变量所保持的值代入到上述出入口生存变量中在出口生存的变量中的指令构成;线程内生存变量检测部,检测线程内生存变量,该线程内生存变量是不被上述出入口生存变量检测部检测、且在上述线程主体块中出现的变量;以及线程内生存变量置换部,按检测出的每个上述线程内生存变量,生成新的变量,并将上述线程主体块中的上述线程内生存变量置换为新生成的变量。
根据该结构,在线程间共享的变量的写入能够设为单一的线程。即,在线程主体块内实施了写入的变量被置换为新生成的变量,并且,在其他线程被停止之后,实施向在线程间共享的变量的写入。此外,向共享的变量的写入仅对在线程的出口生存的变量实施,因此能够避免引起无用的变量的写入。
此外,上述线程制作部还可以具备本线程停止指令生成部,该本线程停止指令生成部在上述线程主体块中的条件分支指令的分支目标的指令不存在于该线程主体块的执行路径上的情况下,生成使该线程停止的本线程停止指令作为该分支目标的指令,并配置在该线程主体块内。
根据该结构,在判明线程的执行本身为原来不应执行的线程的时刻,能够使线程停止,能够将处理器的使用权让给其他线程。
此外,上述本线程停止指令生成部还可以在上述线程主体块中的条件分支指令的判断条件不成立时的分支目标的指令不存在于该线程主体块的执行路径上的情况下,使该条件分支指令的判断条件反转,并生成使自身的线程停止的本线程停止指令作为反转的判断条件成立时的分支目标的指令,配置在该线程主体块内。
根据该结构,在线程的条件分支指令的判断条件不成立时的分支目标的指令在该线程中不存在的情况下,能够使该线程停止,能够将处理器的使用权让给其他线程。
此外,也可以是,上述程序变换装置还具备线程内最优化部,该线程内最优化部将由上述置换部置换变量后的线程中的指令最优化为更高效的指令;上述线程并行化部生成使由上述线程内最优化部最优化的线程推测性地并行执行的程序。
根据该结构,通过将线程最优化,能够在短时间内执行线程。
此外,上述线程内最优化部还可以具备入口块内指令复制传播最优化部,该入口块内指令复制传播最优化部对于由上述置换部置换变量后的线程中的上述入口块的指令,实施向上述线程主体块以及上述出口块中的复制传播以及无用代码最优化。
根据该结构,能够删除在变换为由单一的线程进行向线程间共享的变量的写入时产生的无用的指令。
此外,上述线程内最优化部还可以具备:一般依存关系计算部,根据由上述置换部置换变量后的线程中的指令的数据的更新以及参照的执行顺序,计算被置换上述变量后的线程中的指令的依存关系;特殊依存产生部,产生在上述出口块中的指令之前执行上述其他线程停止块中的指令的依存关系、以及在上述其他线程停止块中的指令之前执行上述本线程停止指令的依存关系;以及指令调度部,根据由上述一般依存关系计算部计算的依存关系以及由上述特殊依存产生部计算的依存关系,将线程内的指令并行化。
根据该结构,不是单纯地从线程的入口向出口执行线程内部的指令,而是能够按照执行的顺序在没有依存的指令间并行执行,因此能够在短时间内执行线程。
此外,也可以是,上述路径信息包含路径上存在的变量、以及对每个变量预先设定的常数值;上述程序变换装置还具备:常数值判断块生成部,生成常数值判断块,并配置在上述入口块之前,上述常数值判断块由判断上述变量的值是否与上述常数值相等的指令和在不相等的情况下将该线程停止的指令构成;以及常数值变换部,将上述线程主体块中的上述变量变换为上述常数值;上述线程并行化部生成使变换后的多个线程推测性地并行执行的程序。
根据该结构,在指定的线程中线程内的变量所保持的值一定的情况下,能够将利用该值的最优化适用于线程,因此能够在短时间内执行线程。
此外,上述特殊依存产生部还可以产生在上述其他线程停止块中的指令之前执行上述常数值判断块中的指令的特别的依存关系。
根据该结构,在指定的线程中线程内的变量所保持的值一定的情况下,对于实施了利用该值的最优化的线程,也能够在线程内部按照执行的顺序在没有依存的指令间并行执行,因此能够在短时间内执行线程。
此外,也可以是,上述多个线程包含第1线程和第2线程;上述线程主体块生成部具备:路径包含关系计算部,计算上述第1线程和第2线程的包含关系;线程主体块路径简化部,根据上述线程的包含关系,在上述第1线程包含上述第2线程的情况下,从上述第1线程删除与上述第2线程重复的路径。
根据该结构,删除在线程内不被执行的路径,因此线程本身的指令数量削减,线程的代码尺寸削减。此外,通过删除不被执行的路径,能够适用新的最优化的机会增加,因此还能够增加在短时间内完成线程的机会。
此外,上述线程并行化部还可以具备:线程间包含关系计算部,对于上述多个线程所包含的第1线程和第2线程,判断与上述第1线程等价的路径是否包含在与上述第2线程等价的路径中,在判断为包含的情况下,看作上述第1线程包含在上述第2线程中来计算线程间的包含关系;线程平均执行时间计算部,根据上述路径信息,通过路径的执行概率和变量所保持的值的保持概率,计算所生成的线程的平均执行时间;以及概率信息线程删除部,在上述第1线程包含在上述第2线程中、且上述第2线程的平均执行时间比上述第1线程的平均执行时间短时,删除上述第1线程。
根据该结构,能够使用线程的平均执行时间来删除即使执行也没有用的线程,抑制了代码尺寸的增加,并且不使处理器执行无用的线程,因此能够增加其他线程能够使用处理器的机会。
此外,也可以是,上述程序包含用于对路径进行识别的信息即路径识别信息;上述程序变换装置还具备对上述路径识别信息进行解析并提取上述路径信息的路径解析部。
根据该结构,程序变换装置的利用者能够将路径识别信息直接记载到源程序中,并能够确定想要线程化的程序部分,因此利用者能够在短期内实施程序的高效化。
此外,也可以是,上述程序包含变量保持值信息,该变量保持值信息表示在路径上存在的变量所保持的值;上述路径解析部具备变量保持值解析单元,该变量保持值解析单元对上述路径识别信息和上述变量保持值信息进行解析,并确定变量所保持的值。
根据该结构,程序变换装置的利用者能够将在路径上存在的变量所保持的值直接记载到源程序中,并能够在更短的时间内执行线程,因此利用者能够在短期内实施程序的高效化。
此外,上述程序包含用于对路径进行识别的信息即路径识别信息、路径的执行概率信息、表示在路径上存在的变量所保持的值的变量保持值信息、以及变量所保持的值的保持概率信息;上述程序变换装置还具备概率确定单元,该概率确定单元根据上述路径识别信息、上述执行概率信息、上述变量保持值信息以及上述保持概率信息,确定上述执行概率以及上述保持概率。
根据该结构,程序变换装置的利用者能够将路径的执行概率信息、在路径上存在的变量所保持的值的保持概率信息直接记载到源程序中,根据线程的平均执行时间,能够抑制生成无用的线程,而有效地生成线程,因此利用者能够在短时间内实施程序的高效化。
此外,本发明不仅实现为这样的程序变换装置,而且还能够实现为将程序变换装置所包含的处理部作为步骤的程序变换方法,或实现为使计算机执行这样的特征性步骤的程序。并且,这样的程序当然可以通过CD-ROM等记录介质以及因特网等传输媒体来流通。
发明效果
根据本发明的程序变换装置,将指定的程序部分变换为推测性地以多个线程并行执行的程序,因此能够在短时间内执行指定的程序部分。
(有关本申请的技术背景的信息)
2008年7月31日申请的申请号为2008-198375的日本申请的说明书、附图及权利要求公开的整个内容作为参考收入本申请。
附图说明
图1是表示计算机系统的概要的一例的图。
图2是表示编译器系统的结构的模块图。
图3是分层地表示程序变换装置的结构的图。
图4是源程序的例子。
图5是记载了路径识别信息的源程序的例子。
图6是表示线程主体块的一例的程序。
图7是表示包括本线程停止指令的线程的一例的程序。
图8是表示包括其他线程停止块的线程的一例的程序。
图9是表示包括入口块和出口块的线程的一例的程序。
图10是表示包括线程内生存变量的线程的一例的程序。
图11是表示实施了复制传播及无用代码最优化的线程的一例的程序。
图12是表示一般的依存关系的图。
图13是表示追加了特殊的依存关系的一例的图。
图14是表示实施了指令调度的线程的一例的程序。
图15是表示将源程序进行线程化后的包括线程主体块和其他线程停止块的线程的一例的程序。
图16是表示包括入口块和出口块的线程的其他一例的程序。
图17是表示包括线程内生存变量的线程的其他一例的程序。
图18是表示实施了复制传播及无用代码最优化的线程的其他一例的程序。
图19是表示并行化的线程的一例的程序。
图20是分层地表示变形例1的程序变换装置的结构的图。
图21是记载了变形例1的变量的值信息的源程序的例子。
图22是表示变形例1的实施了复制传播及无用代码最优化的线程的一例的程序。
图23是表示变形例1的包括常数值判断块的线程的一例的程序。
图24是表示变形例1的实施了常数传播·对合的线程的一例的程序。
图25是表示变形例1的实施了无用指令和无用分支的删除的线程的一例的程序。
图26是表示变形例1的追加了特殊的依存关系的一例的图。
图27是表示变形例1的实施了指令调度的线程的一例的程序。
图28是表示变形例1的并行化的线程的一例的程序。
图29是表示变形例2的记载了多个路径信息的源程序的例子。
图30是分层地表示变形例2的线程主体块生成部的结构的图。
图31A是表示变形例2的线程主体块的一例的程序。
图31B是表示变形例2的实施了各处理的线程的一例的程序。
图32是表示变形例2的并行化的线程的一例的一部分的程序。
图33是表示变形例2的并行化的线程的一例的其他一部分的程序。
图34是变形例3的记载了概率信息的源程序的例子。
图35是表示变形例3的并行化的线程的一例的一部分的程序。
图36是表示变形例3的并行化的线程的一例的其他一部分的程序。
图37是分层地表示变形例3的线程并行化部的结构的图。
图38是用于说明现有技术的图。
具体实施方式
以下,参照附图说明程序变换装置等的实施方式。另外,在实施方式中附加了相同的符号的结构要素进行相同的动作,因此有时省略重复的说明。
<用语的说明>
在叙述具体的本实施方式之前,对用语进行定义。
·语句
指一般的程序语言上的语句。语句中有代入语句、分支语句、循环语句等。此外,在本实施方式中,只要没有特别说明,则将语句和指令不作区分而按同义对待。
·路径
多个语句的集合,并且在语句之间规定有执行顺序。但是,对于构成路径的语句中的若干个语句也可以不规定执行顺序。例如,在图4中,用箭头“→”表示执行顺序的情况下,
S1→S2→S3→S4→S5→S8→S9→S12→S13→S14→S15是一个路径,
将S1→S2→S3→S4→S5→S8→S9→S12→S13→S14→S15和S1→S2→S3→S6→S7→S8→S9→S12→S13→S14→S15结合的路径也为一个路径。但是,在该情况下,S4与S6、S7之间,以及S5与S6、S7之间没有规定执行顺序。
·线程
线程是指适合计算机的处理的附加顺序的指令的集合。
<实施方式>
本发明的实施方式的程序变换装置在计算机系统200上执行。图1是表示计算机系统的概要的一例的图。存储部201是硬盘等大容量存储装置,处理器204由控制装置和运算装置构成,存储器205由MOS-IC等存储元件构成。
本发明的实施方式的程序变换装置在存储部201中实现为程序变换程序202,程序变换程序202通过处理器204保存在存储器205中,由处理器204执行。处理器204按照程序变换程序202的指令,通过后述的编译器系统将保存在存储部201中的源程序203变换为目标程序207,保存到存储部201。
图2是表示处理器204所具备的编译器系统的结构的模块图。该编译器系统210是将用C语言或C++语言等高级语言记述的源程序203变换为作为机器语言程序的目标程序207的编译器系统,大致分为编译器211、汇编器212以及连接器213。
编译器211通过程序变换程序202对源程序203进行编译,并置换为机器语言指令,从而生成汇编器程序215。
汇编器212对于从编译器211输出的汇编器程序215,通过参照在内部保持的变换表等,将所有代码置换为二进制的机械语言代码,从而生成可重构二进制程序216。
连接器213对于从汇编器212输出的多个可重构二进制程序216,通过决定并连接未解决数据的地址配置等,生成目标程序207。
接着,详细说明作为上述的程序变换程序202实现的程序变换装置。本实施方式的程序变换装置具备:线程制作部,根据与程序中的程序部分的执行路径有关的路径信息,制作与上述程序部分等价的多个线程,该多个线程的各个线程与上述程序部分的多个执行路径中的至少一个执行路径等价;置换部,将上述多个线程的变量进行置换,以免在上述多个线程之间引起变量的写入冲突,并且将在上述多个线程间共享的变量的值的写入仅由单一的线程执行;以及线程并行化部,在变量的置换后,将多个线程推测性地并行执行。
图3是分层地表示本实施方式的程序变换装置的结构的图。
程序变换装置1具备路径解析部124、线程生成部101、线程并行化部102。具体而言,线程生成部101具备线程主体块生成部103、本线程停止指令生成部111、其他线程停止块生成部104、出入口生存变量检测部105、出入口变量置换部106、入口块生成部107、出口块生成部108、线程内生存变量检测部109、线程内生存变量置换部110、入口块内指令复制传播最优化部112、一般依存关系计算部113、特殊依存产生部114以及指令调度部115。
这里,由线程主体块生成部103、本线程停止指令生成部111、以及其他线程停止块生成部104构成线程制作部130。此外,由出入口生存变量检测部105、出入口变量置换部106、入口块生成部107、出口块生成部108、线程内生存变量检测部109、以及线程内生存变量置换部110构成置换部140。此外,由入口块内指令复制传播最优化部112、一般依存关系计算部113、特殊依存产生部114、以及指令调度部115构成线程内最优化部150。
此外,图3表示程序变换装置1的动作顺序,从上开始依次启动各部。即,程序变换装置1按照路径解析部124、线程生成部101、线程并行化部102的顺序启动,并且,线程生成部101按照线程主体块生成部103、本线程停止指令生成部111、其他线程停止块生成部104、出入口生存变量检测部105、出入口变量置换部106、入口块生成部107、出口块生成部108、线程内生存变量检测部109、线程内生存变量置换部110、入口块内指令复制传播最优化部112、一般依存关系计算部113、特殊依存产生部114、指令调度部115的顺序启动各部。
以下,按照启动顺序说明各部,并且使用图4到图19的例子来说明具体的动作。
路径解析部124对由编程者记载在源程序上的识别路径的信息即路径识别信息进行解析,并提取路径信息。
图4是按照C语言程序的写法记述的源程序的例子,图5是由编程者追加记述了路径识别信息的源程序的例子。图5中“#pragma PathInf”表示各种路径信息。在图5中“#pragma PathInf:BEGIN(X)”表示路径的开始,“#pragma PathInf:END(X)”表示路径的结束。此外,X是识别路径的路径名。“#pragma PathInf:PID(X)”表示路径的中途,X是识别路径的路径名。通过将这些3种路径信息按程序所示的执行顺序参照,来确定路径。即,在图5中路径X被确定为S1→S2→S3→S4→S5→S8→S9→S10→S11→S15。
此外,在图5中,当不存在紧接S9之后的“#pragma PathInf:PID(X)”的情况下,路径X被确定为将S1→S2→S3→S4→S5→S8→S9→S10→S11→S15和S1→S2→S3→S4→S5→S8→S9→S12→S13→S14→S15结合的路径。
线程生成部101根据与指定的程序部分有关的路径信息,以在线程间不引起向存储器或寄存器等存储区域的写入冲突的方式生成多个线程。具体而言,如图3所示,线程生成部101具备线程主体块生成部103、本线程停止指令生成部111、其他线程停止块生成部104、出入口生存变量检测部105、出入口变量置换部106、入口块生成部107、出口块生成部108、线程内生存变量检测部109、线程内生存变量置换部110、入口块内指令复制传播最优化部112、一般依存关系计算部113、特殊依存产生部114以及指令调度部115。
线程主体块生成部103根据路径信息生成通过复制路径来生成的线程主体块。
图6是表示包含将图5的路径X复制而生成的线程主体块的程序。在本实施方式中,如图6所示,通过“#pragma Thread thr_X”以及后接于它的大括号“{}”来定义线程。“thr_X”是识别线程的线程名,在以下说明中,如“线程thr_X”那样,用线程名识别线程。此外,线程主体块如图6所示,进一步用大括号“{//线程主体块....}”括起来表示其范围。综上所述,线程主体块生成部103对图5的路径X即S1→S2→S3→S4→S5→S8→S9→S10→S11→S15进行复制,生成线程thr_X的线程主体块。特别地,图5的条件分支指令S3以及条件分支指令S9的条件不成立的情况下的执行路径的“else侧”不被复制。
本线程停止指令生成部111在线程主体块中的条件分支指令的判断条件成立的情况下的分支目标在线程主体块中未被复制的情况下,生成在判断条件成立时使自身的线程停止的本线程停止指令,在线程主体块中的条件分支指令的判断条件不成立的情况下的分支目标在线程主体块中未被复制的情况下,生成使判断条件反转、在反转的判断条件成立时使自身的线程停止的本线程停止指令。
图7是对图6的线程thr_X适用了本线程停止指令生成部111的结果。从图5的源程序可以判断出,对作为条件分支指令S3不成立时的分支目标的语句S6进行复制的语句在线程thr_X的线程主体块中不存在。因此,本线程停止指令生成部111生成如S3_11那样使判断条件反转、在反转的判断条件成立的情况下使自身的线程停止的“Stop thr_X”指令。S9_11也同样。
其他线程停止块生成部104生成由使其他线程的执行停止的指令构成的其他线程停止块,配置在线程主体块之后。
图8是对图7的线程thr_X适用了其他线程停止块生成部104的结果。在线程主体块之后,生成其他线程停止块。图中的“Stop OTHER_THREAD”表示使与线程thr_X并行执行的其他线程停止。只要并行执行的其他线程的识别名被确定,则OTHER_THREAD记述具体的线程的识别名。对此将在后面叙述。
出入口生存变量检测部105检测在线程主体块的入口及出口生存的变量即出入口生存变量。
关于生存的变量的定义及其计算方法,与在非专利文献1中示出的内容相同,且不是本发明的的重点,因此省略。另外,在线程主体块的入口生存,是指在线程主体块中,在被参照之前没有值的更新的变量。此外,在线程主体块的出口生存,是指其值在线程主体块被执行之后被参照的变量。即,在记载有路径识别信息的源程序中指定了表示路径的结束的“#pragma PathInf:END(..)”的位置以后其值被参照的变量。总之,是在图5的语句S15之后其值被参照的变量。若对图8的线程主体块适用出入口生存变量检测部105,则入口生存变量为变量b、变量c、变量e、变量g以及变量y,出口生存变量为变量a、变量c、变量h以及变量x。
(非专利文献1)A.V.Aho、R.Sethi、J.D.Ullman著“Compilers、Principle、Techniques、and Tool”Addison Wesley Publishing Company Inc.1986、P.631-P.632
接着,出入口变量置换部106按每个出入口生存变量生成新的变量,并将线程主体块中的出入口生存变量的出现位置置换为新生成的变量,入口块生成部107及出口块生成部108生成在出入口生存变量和新生成的变量之间进行变量所保持的值的交换的指令。
图9是对图8的线程主体块适用了出入口变量置换部106、入口块生成部107、及出口块生成部108的结果。
例如,作为图8的线程主体块中的入口生存变量的变量b的出现位置在图9的线程主体块中置换为新生成的变量b2。对于作为其他入口生存变量的变量c、变量e、变量g、变量y也同样。此外,作为图8的线程主体块中的出口生存变量的变量a的出现位置在图9的线程主体块中置换为了新生成的变量a2。对于作为其他出口生存变量的变量c、变量h、变量x也同样。另外,变量c也是入口生存变量,因此已被置换为新的变量c2,在出口生存变量的置换时被省略。
入口块生成部107生成入口块,配置在线程主体块之前,该入口块是将出入口生存变量中的在入口生存的变量所保持的值代入到由出入口变量置换部106置换后的变量中的指令的集合。
出口块生成部108生成出口块,配置在其他线程停止块之后,该出口块是将由出入口变量置换部106置换后的变量所保持的值代入到出入口生存变量中的在出口生存的变量的指令的集合。
图9的入口块及出口块是对图9的线程主体块及其他线程停止块适用了入口块生成部107及出口块生成部108的结果。
例如,在图9的入口块中生成语句S201,该语句S201是从图8的线程主体块的在入口生存的变量b向由出入口变量置换部106进行置换后的变量b2代入变量b所保持的值的指令。其他入口生存变量即变量c、变量e、变量g、变量y也同样。
此外,在图9的出口块中生成语句S206,该语句S206是将由出入口变量置换部106置换后的变量a2所保持的值代入到图8的线程主体块的在出口生存的变量a中的指令。其他出口生存变量即变量c、变量h、变量x也同样。
接着,检测并置换为由出入口生存变量检测部105检测出且在线程主体块中出现的变量。
图10是对图9的线程主体块适用了线程内生存变量检测部109及线程内生存变量置换部110的结果。
线程内生存变量检测部109检测未由出入口生存变量检测部105检测出且在线程主体块中出现的变量即线程内生存变量。在图9的例子中,未被出入口生存变量检测部105检测出的变量d及变量f被检测出来。
线程内生存变量置换部110按检测到的每个线程内生存变量生成新的变量,并将线程主体块中的线程内生存变量的出现位置置换为新生成的变量。在图9的线程主体块中,变量d如图10所示被置换为新生成的变量d2。变量f也同样被置换为变量f2。
这里,比较实施了其他线程停止块生成部104为止的变换之后的线程thr_X即图8、和表示实施了线程内生存变量置换部110为止后的线程thr_X的图10。首先,图8和图10的入口生存变量、出口生存变量相同,并且,在线程主体块内,虽然所保存的变量有差异,但计算过程完全相同。因此图8和图10的线程thr_X等价。
接着,对各处理部进行说明。
入口块内指令复制传播最优化部112对入口块中的指令语句实施向线程主体块及出口块中的复制传播及无用代码最优化。
图11是对图10的线程实施了复制传播及无用代码最优化的结果。
关于复制传播最优化和无用代码最优化本身的方法,与非专利文献2中示出的方法相同,并且不是本发明的重点,因此省略。这里,利用图10和图11具体说明。
(非专利文献2)A.V.Aho、R.Sethi、J.D.Ullman著“Compilers、Principle、Techniques、and Tool”、Addison Wesley Publishing Company Inc.、1986、p.594-P.595及P.636-P.638
在图10的语句S201中设定的变量b2的值的参照目标语句S1_1、语句S10_1中,通过置换为保持与变量b2所保持的值相等的值的变量b,来实施复制传播,分别成为a2=b+c1、a2=b/f2。进而,参照在语句S201中设定的b2的值的语句在线程主体块及出口块中不存在,因此作为无用代码而被删除。
其他的在入口块中存在的语句S202、语句S203、语句S204及语句S205也与语句S201同样,变量被置换并删除。
以上说明的从出入口生存变量检测部105向入口块内指令复制传播最优化部112的变换的目的,是为了在自身的线程和并行执行的其他线程之间不引起存储器或寄存器等存储区域的写入冲突。例如,在以适用出入口生存变量检测部105之前的图8原样执行、并且其他线程参照变量a的值的情况下,语句S1_1的变量a所保持的值的更新使其他线程发生无法预料的动作。因此,导致计算出与作为源程序的图5的执行结果不同的结果,引起不能成为等价程序的问题。
比较图8和图11可知,在图8中所保持的值被更新的变量在图11中置换为新生成的变量。由此,图11的线程主体块为止的执行不会对其他线程的执行带来影响。进而,执行其他线程停止块,并在将其他线程停止之后执行出口块,因此安全地执行出口块中的各语句的与其他线程共享的变量所保持的值的更新。这里,共享的变量是指在多个线程中作为相同的变量来处理的变量。
接着,为了提高每个线程的处理速度,进行线程中的指令等级的并行化。
一般依存关系计算部113在线程中的指令间计算基于数据的更新和参照的一般的执行顺序的依存关系。一般依存关系计算部113与在非专利文献3中示出的结构相同,并且不是本发明的重点,因此省略。
(非专利文献3)中田育男著“编译器的构成和最优化”朝仓书店、1999年9月20日、p.412-p.414
图12是对图11适用了一般依存关系计算部113的结果。图12是表示语句间的依存关系的依存图。在图中,从箭头的头部向箭头的尾部产生依存。即,在图中,例如,语句S2_1→语句S4_1表示语句S4_1依存于语句S2_1,如果不是执行了语句S2_1之后,则不能执行语句S4_1。
特殊依存产生部114产生在出口块中的指令之前执行其他线程停止块中的指令的特别的依存关系,进而,产生在其他线程停止块中的指令之前执行本线程停止指令的特别的依存关系。
图13是对图11适用了特殊依存产生部114的结果。在图12的依存图中,用粗箭头追加特殊依存产生部114的结果所产生的依存。通过这里产生的依存,能够正确指定将其他线程停止的定时以及出口块中的指令的执行顺序。
指令调度部115根据由一般依存关系计算部113计算的依存关系和由特殊依存产生部114产生的依存关系,使线程内的指令并行化。指令调度部115与在非专利文献4中示出的结构相同,并且不是本发明的重点,因此省略。
(非专利文献4)中田育男著“编译器的构成和最优化”朝仓书店、1999年9月20日、p.358-p.382
图14是根据图13的依存关系将图11的线程中的指令进行调度并并行化的结果。这里,假设两个指令能够并行执行。在图中,“#”是能够并行执行的指令的划分,例如,表示语句S1_1和语句S5_1能够并行执行。
以上,对图5所示的程序中的有关路径X的线程生成进行了说明。但是,仅通过执行图14的线程thr_X,显然不能成为与作为源程序的图5等价的执行。这是因为,在图5中路径X仅是进行与语句S1到语句15的路径的一个等价的执行。因此,生成将作为源程序的图5的语句S1到语句S15的程序部分原样进行线程化的线程thr_Or,若设为与图14的线程thr_X并行执行,则即使线程thr_X停止,也不使线程thr_Or停止,由此必然保证与图5的语句S1到语句S15的部分等价的执行。以下,首先对线程thr_Or的生成进行说明,然后对线程thr_Or和线程thr_X的并行执行进行说明。
图15是将图5的源程序线程化后的线程主体块及其他线程停止块的例子。
线程thr_Or与线程thr_X同样地生成。线程主体块生成部103如图15所示,通过复制图5的语句S1到语句15的全路径,生成线程thr_Or的线程主体块。
接着,本线程停止指令生成部111按照图15的线程主体块中的每个条件分支指令,着眼于分支目标来进行处理,在语句S3的条件分支指令中,在判断条件成立的情况下和不成立的情况下分支目标都存在于线程主体块中,因此不生成使自身停止的本线程停止指令。语句S9的条件分支指令也因为同样的理由,不生成使自身停止的本线程停止指令。
接着,其他线程停止块生成部104如图15所示,生成其他线程停止块,配置在线程主体块之后。
接着,与线程thr_X的情况同样,进行出入口生存变量的检测以及置换。图16是对图15的线程适用了出入口生存变量检测部105、出入口变量置换部106、入口块生成部107、以及出口块生成部108的结果。
出入口生存变量检测部105启动,作为入口生存变量而检测到变量b、变量c、变量d、变量e、变量g以及变量y,作为出口生存变量而检测到变量a、变量c、变量h以及变量x。
接着,出入口变量置换部106、入口块生成部107以及出口块生成部108启动,图15变换为如图16那样。
接着,与线程thr_X的情况相同,线程内生存变量检测部109启动,检测出未被检测为出入口生存变量的变量f。
接着,线程内生存变量置换部110启动,图16变换为如图17那样。
接着,与线程thr_X的情况同样,入口块内指令复制传播最优化部112启动,图17的入口块的各语句被实施复制传播以及无用代码最优化,图17变换为如图18那样。
由此,线程thr_Or的生成结束。另外,对于线程thr_Or的入口块、线程主体块、出口块内的语句,也可以计算一般的指令的依存关系,来实施指令调度。
接着,说明用于使目前生成的线程thr_Or和程thr_X并行动作的处理。
线程并行化部102将线程配置成使由线程生成部101生成的多个线程并行动作,生成与指定的程序部分等价且高速化的程序。此外,这里,在其他线程停止块中具体决定停止的线程。
图19是对图14的线程thr_X和图18的线程thr_Or适用了线程并行化部102的结果。
在图19中,“#pragma ParaThreadExe{..}”表示将大括弧中的线程并行执行。在图19中,在“#pragma ParaThreadExe{..}”的大括弧中配置有两个线程,即线程thr_Or和线程thr_X,表示并行执行线程thr_Or和线程thr_X。进而,图18中的语句S100的“Stop OTHER_THREAD”的OTHER_THEAD由线程thr_X决定,设定为如图19中的语句S100。图14的线程thr_X中的语句S200的情况也相同,语句S200的“StopOTHER_THREAD”的OTHER_THEAD由线程thr_Or决定,设定为如图19中的语句S200。
如上所述,本实施方式的程序变换装置1能够进行不引起向共享存储器的写入冲突的线程生成、线程的执行控制指令生成以及线程内部的指令调度。
因此,本实施方式的程序变换装置1在执行路径X的情况下,变换前的路径X的执行需要10个步骤,相对于此,线程thr_X的执行能够通过8个步骤来执行。进而,在不执行路径X的情况下,执行线程thr_Or,因此成为与变换前的执行等价的执行。但是,线程thr_Or与变换前相比较,入口块、其他线程停止块、出口块增加,且步骤数增加。但是,在路径X的执行频率非常高时,如图19那样线程化更有利于缩短平均执行时间。
另外,图14的语句S10_1在语句S91_11之前被执行。这里,在变量f2所保持的值为0的情况下,在语句SS10_1中在执行时产生除零引起的例外。像这样在执行时产生例外的情况下,也可以在处理器及操作系统在执行中感知了例外时,使线程自动停止。
或者,与专利文献2中公开的方法同样,也可以在特殊依存产生部114中生成依存,以使执行时产生例外的语句(图14中语句S10_1)不在用于避免产生例外的判断语句(图14中语句S91_11)之前执行。
即,在特殊依存产生部114中,从用于避免产生例外的判断语句向执行时产生例外的语句生成依存。在图12的依存图中,生成语句S91_11→语句S10_1的依存。
(专利文献2)日本特开2008-4082号公报
<变形例1>
在上述的实施方式中,作为路径信息仅使用了路径,但也可以扩展为使用包含路径上的变量和对该每个变量预先设定的常数值的变量保持值信息。
图20是分层地表示本变形例的程序变换装置的结构的图。本变形例的程序变换装置1与实施方式的程序变换装置1相比较,不同的是还具备常数值判断块生成部116、常数值变换部117以及冗余性删除最优化部118。
图21是由编程者对路径信息追加记述了变量所保持的值的信息的源程序的例子。图中,“#pragma PathInf:BEGIN(x)、VAL(b:5)、VAL(e:8)”表示在路径X中,变量b及变量e分别保持值5、值8。
路径解析部124与实施方式相比较,还具备变量保持值解析单元。变量保持值解析单元根据变量保持值信息确定变量所保持的值。具体而言,在图21的例子中,路径解析部124对“#pragma PathInf:BEGIN(X)、VAL(b:5)、VAL(e:8)”进行解析,确定在路径X中变量b及变量e分别保持值5、值8。
从线程主体块生成部103到入口块内指令复制传播最优化部112的动作与实施方式相同。作为结果,对于路径X得到与图11相同的结果。这里,为了避免与图11的变换结果混淆,如图22所示,复制图11,将线程名变更为thr_X_VP,将在线程内使用的变量名也变更。接着,利用图22对变换过程进行说明。
常数值判断块生成部116生成常数值判断块,配置在入口块之前,上述常数值判断块包括判断对变量保持值信息所包含的每个变量预先设定的常数值和路径上的变量是否相等的指令、以及在判断为不相等的情况下停止本线程的指令。
常数值变换部117按变量保持值信息所包含的每个变量,将线程主体块中的该变量的参照处置换为预先设定的常数值。
图23是对图22适用了常数值判断块生成部116及常数值变换部117的结果。如在图中的常数值判断块中示出的那样,变量b所保持的值不是5时,或者变量e所保持的值不是8时,生成将线程thr_X_VP停止的指令。此外,线程主体块中的变量b及变量e的参照处分别被置换为常数值5及常数值8。
冗余性删除最优化部118对入口块、线程主体块及出口块进行一般的常数传播·对合最优化。进而,在常数传播·对合最优化后,将无用指令删除,或者在条件分支指令的判断条件为恒真或恒伪的情况下将无用的分支删除。特别的,在条件分支指令的判断成立时执行本线程停止指令、并且判断条件为恒真的情况下,总是执行本线程停止指令,因此将使用了变量所保持的值的信息的线程生成本身取消。
另外,一般的常数传播最优化与在非专利文献2中示出的内容相同,并且不是本发明的重点,因此省略。
图24是对图23适用了冗余性删除最优化部118中的常数传播·对合的结果。图中,语句S5_2被进行常数对合而成为“d3=9”,语句S8_2被进行语句S5_2的常数传播和常数对合而成为“f3=12”。此外,语句S91_21被进行语句S8_2的常数传播,从而判断条件成为“12<=0”。关于其他的变化也同样。
图25是对图24实施了冗余性删除最优化部118中的剩余的最优化的结果。图24中的语句S5_2不存在变量d3的参照处,因此通过无用指令的删除处理来删除。图24中的语句S8_2、语句S10_2也以同样的理由被删除。图24中的语句S91_21的判断条件成为恒伪,因此被删除。
接着,一般依存关系计算部113、特殊依存产生部114及指令调度部115依次启动。特别地,在特殊依存产生部114中,生成特别的依存关系,该特别的依存关系为:由常数值判断块生成部116生成的常数值判断块中的指令在其他线程停止块生成部104中的指令之前被执行。图26表示图25的程序的依存图。图中,用粗箭头表示的从语句S310、语句S311向语句S300的依存为这里新生成的依存。
图27是对图25的程序的调度结果。与作为路径信息不使用变量所保持的值的信息的情况的图14相比,步骤数为7个步骤,减少1个步骤。
图28是对图27的线程thr_X_VP和图17的线程thr_Or适用了线程并行化部102的结果。
由此,本变形例的程序变换装置1利用包含路径上的变量和对每个该变量预先设定的常数值的变量保持值信息,进行线程内的最优化,从而能够在短时间内执行该线程。
<变形例2>
在上述的实施方式中,生成将作为源程序的图5的从语句S1到语句S15的程序部分原样进行了线程化的线程thr_Or,将线程形成为与线程thr_X或线程thr_X_VP并行执行,由此即使线程thr_X或线程thr_X_VP停止,线程thr_Or也不会停止,因此必然保证了与图5的语句S1到语句S15的部分等价的执行。
但是,一般如图29,路径也有可能被指定多个。在该情况下,不需要将源程序中的路径全部线程化。即,在上述的例子中能够将线程thr_Or简化。以下,利用图详细说明。
图30是分层地表示本变形例的程序变换装置的线程主体块生成部的结构的图。线程主体块生成部103还具备路径包含关系计算部119以及线程主体块路径简化部120。
路径包含关系计算部119计算线程的包含关系。首先,关于被指定了路径信息的路径,将在执行时通过的部分路径全部提取。
有关图29的路径X的部分路径仅为语句S1→语句S2→语句S3→语句S4→语句S5→语句S8→语句S9→语句S10→语句S11→语句S15,有关路径Y的部分路径为语句S1→语句S2→语句S3→语句S6→语句S7→语句S8→语句S9→语句S10→语句S11→语句S15。
此外,与紧接路径X、路径Y的开始点(BEGIN(X)、BEGIN(Y))的语句S1到结束点(END(X)、END(Y))紧前的语句S15为止的路径(说明中叫做路径Or)有关的部分路径为:
部分路径1:语句S1→语句S2→语句S3→语句S4→语句S5→语句S8→语句S9→语句S10→语句S11→语句S15(与路径X相同)
部分路径2:语句S1→语句S2→语句S3→语句S6→语句S7→语句S8→语句S9→语句S10→语句S11→语句S15(与路径Y相同)
部分路径3:语句S1→语句S2→语句S3→语句S4→语句S5→语句S8→语句S9→语句S12→语句S13→语句S14→语句S15
部分路径4:语句S1→语句S2→语句S3→语句S6→语句S7→语句S8→语句S9→语句S12→语句S13→语句S14→语句S15这4个路径。当然,计算出路径X、路径Y都包含于路径Or。
这里,假设在没有记载紧接语句S3的“#pragma PathInf:PID(X)”的情况下,路径X为:
部分路径1:语句S1→语句S2→语句S3→语句S4→语句S5→语句S8→语句S9→语句S10→语句S11→语句S15
部分路径2:语句S1→语句S2→语句S3→语句S6→语句S7→语句S8→语句S9→语句S10→语句S11→语句S15(与路径Y相同)这两个路径。因此,在该情况下,路径Y还包含于路径X。
线程主体块路径简化部120根据线程的包含关系,在第1线程包含第2线程的情况下,生成从第1线程中删除与第2线程重复的路径、并且删除了无用指令的线程主体块。
图29的路径X及路径Y被线程化,因此路径Or的部分路径中的与路径X及路径Y等价的部分路径1及部分路径2被删除,路径Or通过部分路径3及部分路径4而重新被构筑。
图31A是表示针对路径Or的线程thr_Or的线程主体块的图。在部分路径3及部分路径4上不存在的语句S10及语句S11不被复制。图31B是对生成的线程thr_Or实施了本线程停止指令生成部111、其他线程停止块生成部104、出入口生存变量检测部105、出入口变量置换部106、入口块生成部107、出口块生成部108、线程内生存变量检测部109、线程内生存变量置换部110及入口块内指令复制传播最优化部112的结果。
图32及图33是对图29实施到线程并行化部102为止的变换结果。变换为线程thr_Or、线程thr_X、线程Thr_Y并行执行。图32的线程thr_Or比图19简化。
如上所述,本变形例的程序变换装置在指定的线程停止了的情况下,剩余的线程也进行必要的最小限度的执行,因此能够缩短剩余的线程的执行时间。
<变形例3>
在上述的变形例1中,作为路径信息使用了包含路径上存在的变量和对该每个变量预先设定的常数值的变量保持值信息,但作为路径信息,也可以使用保持概率信息,该保持概率信息表示路径的执行概率及变量保持特定的值的概率。
图34是由编程者追加记述了路径的执行概率和变量在路径上保持指定的值的概率的源程序的例子。图中,“#pragma PathInf:BEGIN(X:70)、VAL(b:5:80)、VAL(e:8:50)”表示路径X的执行概率为70%、变量b在路径X中保持值5的概率为80%、变量e在路径X中保持值8的概率为50%。此外,“#pragma PathInf:BEGIN(Y:25)”表示路径Y的执行概率为25%。
路径解析部124相比于变形例1,还具备概率确定单元。概率确定单元确定路径的执行概率和变量在路径上保持指定的值的概率。具体而言,在图34的例子中,概率确定单元对“#pragma PathInf:BEGIN(X:70)、VAL(b:5:80)、VAL(e:8:50)”进行解析,确定路径X的执行概率为70%、变量b在路径X中保持值5的概率为80%、变量e在路径X中保持值8的概率为50%。同样,确定路径Y的执行概率为25%。
线程生成部101的动作与上述的实施方式及各变形例相同,结果,生成图27、图32及图33所示的线程thr_X_VP、线程thr_Or、线程thr_X及线程thr_Y。图35及图36是生成的线程的结果。
图37是分层地表示本变形例的程序变换装置的线程并行化部的结构的图。线程并行化部102还具备线程间包含关系计算部121、线程平均执行时间计算部122以及概率信息线程删除部123。
线程间包含关系计算部121对于由线程生成部101生成的第1线程和第2线程,判断与第1线程等价的路径是否包含在与第2线程等价的路径中,在判断为包含时,看作第1线程包含在第2线程中来计算线程间的包含关系。
为了具体计算线程的包含关系,利用由上述的变形例2的路径包含关系计算部119计算的路径间的包含关系。即,在与路径1等价的线程1和与路径2等价的线程2中,在路径1包含路径2的情况下,确定为线程1也包含线程2。
此外,在变形例1中,在用预先设定的常数值进行置换前的线程3和置换后的线程4中,确定为线程3包含线程4,由此计算线程的包含关系。例如,图36所示的线程thr_X_VP是在路径X中将变量b的值特殊化为5、将变量e的值特殊化为8的情况的线程,因此线程thr_X_VP包含在线程thr_X中。
线程平均执行时间计算部122根据路径信息所包含的路径的执行概率和变量所保持的值的保持概率,计算所生成的线程的平均执行时间。
图35及图36的线程thr_Or、线程thr_X、线程thr_X_VP及线程thr_Y的平均执行时间如下:
线程thr_X的平均执行时间                     ...Tx*Px
线程thr_X_VP的平均执行时间                  ...Tx*Pxv
线程thr_Y的平均执行时间                     ...Ty*Py
线程thr_Or的平均执行时间                    ...Tor*Por
这里,Tx、Ty及Tor分别为线程thr_X、线程thr_Y、线程thr_Or的执行时间。Px是路径X的概率70%、Py是路径Y的执行概率25%。Por是执行了路径X及路径Y以外的路径的情况下的概率,因此为5%。此外,Pxv是路径X上的变量b保持5、变量e保持8的概率,因此为28%(70%*80%*50%)。
概率信息线程删除部123根据线程间包含关系,对于所生成的两个线程,在第1线程包含在第2线程中并且第2线程的平均执行时间比第1线程的平均执行时间短时,删除第1线程。
在图36中,线程thr_X_VP包含在线程_thr_X中,若线程thr_X_VP的平均执行时间与线程thr_X的平均执行时间相同或比其大,则删除线程thr_X_VP。
以上示出了实施方式、变形例1、变形例2及变形例3,但不限定于这些。只要不脱离本发明的主旨,则本领域技术人员对本实施方式实施了各种能够想到的变形例的结构、或将不同实施方式中的结构要素组合来构筑的形态也包含于本发明的范围内。
另外,在上述中,路径信息是由编程者提供的,但也可以由调试器或仿真器等执行工具提供给程序变换装置。此外,路径信息的提供方式也可以不是由源程序提供,而是作为与源程序不同的信息,例如作为路径信息文件而提供给程序变换装置。
此外,也可以对汇编器程序追加指令代码。此外,共享存储器可以为集中共享存储器型,也可以为分散共享存储器型。
工业实用性
如上所述,本发明的程序变换装置将源程序的指定部分用等价且在线程间不引起向共享的存储区域的值的写入冲突的多个线程重构,按每个线程进行最优化变换和指令等级的并行化变换,并行执行多个线程,因此具有能够生成使源程序的指定部分高速化的程序的效果,作为程序变换装置等是有用的。
符号说明
1程序变换装置
101线程生成部
102线程并行化部
103线程主体块生成部
104其他线程停止块生成部
105出入口生存变量检测部
106出入口变量置换部
107入口块生成部
108出口块生成部
109线程内生存变量检测部
110线程内生存变量置换部
111本线程停止指令生成部
112指令复制传播最优化部
113一般依存关系计算部
114特殊依存产生部
115指令调度部
116常数值判断块生成部
117常数值变换部
118冗余性删除最优化部
119路径包含关系计算部
120线程主体块路径简化部
121线程间包含关系计算部
122线程平均执行时间计算部
123概率信息线程删除部
124路径解析部
130线程制作部
140置换部
150线程内最优化部
200计算机系统
201存储部
202程序变换程序
203源程序
204处理器
205存储器
207目标程序
210编译器系统
211编译器
212汇编器
213连接器
215汇编器程序
216可重构二进制程序
300现有技术的线程的例子
301现有技术的线程的例子
302现有技术的线程的例子
303现有技术的线程的例子

Claims (19)

1.一种程序变换装置,具备:
线程制作部,根据与程序中的程序部分的执行路径有关的路径信息,制作与上述程序部分等价的多个线程,且各个线程与上述程序部分的多个执行路径中的至少一个执行路径等价;
置换部,置换上述多个线程的变量,以使在上述多个线程间不引起变量的写入冲突,并使在上述多个线程间共享的变量的值的写入仅由单一的线程执行;以及
线程并行化部,生成在置换变量之后推测性地使多个线程并行执行的程序。
2.如权利要求1所述的程序变换装置,其中,
上述线程制作部具备:
线程主体块生成部,对构成上述程序部分的多个执行路径中的一个执行路径的指令进行复制,由此生成作为线程的主体的线程主体块;以及
其他线程停止块生成部,生成由使其他线程的执行停止的指令构成的其他线程停止块,并配置在上述线程主体块之后;
上述置换部具备:
出入口生存变量检测部,检测出入口生存变量,该出入口生存变量是在上述线程主体块的入口及出口生存的变量;
出入口变量置换部,按每个上述出入口生存变量生成新的变量,并将上述线程主体块中的上述出入口生存变量置换为新生成的变量;
入口块生成部,生成入口块并配置在上述线程主体块之前,上述入口块由将上述出入口生存变量中的在入口生存的变量所保持的值代入到由上述出入口变量置换部置换后的变量中的指令构成;
出口块生成部,生成出口块并配置在上述其他线程停止块之后,上述出口块由将上述出入口变量置换部置换后的变量所保持的值代入到上述出入口生存变量中的在出口生存的变量中的指令构成;
线程内生存变量检测部,检测线程内生存变量,该线程内生存变量是未由上述出入口生存变量检测部检测出的变量,而且是在上述线程主体块中出现的变量;以及
线程内生存变量置换部,按检测出的每个上述线程内生存变量生成新的变量,并将上述线程主体块中的上述线程内生存变量置换为新生成的变量。
3.如权利要求2所述的程序变换装置,其中,
上述线程制作部还具备本线程停止指令生成部,该本线程停止指令生成部在上述线程主体块中的条件分支指令的分支目标的指令不存在于该线程主体块的执行路径上的情况下,生成使该线程停止的本线程停止指令作为该分支目标的指令,并配置在该线程主体块内。
4.如权利要求3所述的程序变换装置,其中,
上述本线程停止指令生成部还在上述线程主体块中的条件分支指令的判断条件不成立时的分支目标的指令不存在于该线程主体块的执行路径上的情况下,使该条件分支指令的判断条件反转,并生成使自身的线程停止的本线程停止指令作为反转的判断条件成立时的分支目标的指令,配置在该线程主体块内。
5.如权利要求2所述的程序变换装置,其中,
上述程序变换装置还具备线程内最优化部,该线程内最优化部将由上述置换部置换了变量的线程中的指令最优化为更高效的指令;
上述线程并行化部生成推测性地使由上述线程内最优化部最优化后的线程并行执行的程序。
6.如权利要求5所述的程序变换装置,其中,
上述线程内最优化部具备入口块内指令复制传播最优化部,该入口块内指令复制传播最优化部对于由上述置换部置换了变量的线程中的上述入口块的指令,实施向上述线程主体块和上述出口块中的复制传播以及无用代码最优化。
7.如权利要求5所述的程序变换装置,其中,
上述线程内最优化部还具备:
一般依存关系计算部,根据由上述置换部置换了变量的线程中的指令的数据的更新以及参照的执行顺序,计算被置换了上述变量的线程中的指令的依存关系;
特殊依存产生部,产生在上述出口块中的指令之前执行上述其他线程停止块中的指令的依存关系、以及在位于上述其他线程停止块中的指令之前执行上述本线程停止指令的依存关系;以及
指令调度部,根据由上述一般依存关系计算部计算的依存关系以及由上述特殊依存产生部计算的依存关系,使线程内的指令并行化。
8.如权利要求2所述的程序变换装置,其中,
上述路径信息包含路径上存在的变量、以及对每个上述变量预先设定的常数值;
上述程序变换装置还具备:
常数值判断块生成部,生成常数值判断块并配置在上述入口块之前,上述常数值判断块由判断上述变量的值是否与上述常数值相等的指令、以及在不相等的情况下停止该线程的指令构成;以及
常数值变换部,将上述线程主体块中的上述变量变换为上述常数值;
上述线程并行化部生成推测性地使变换后的多个线程并行执行的程序。
9.如权利要求7所述的程序变换装置,其中,
上述路径信息包含路径上存在的变量、以及对每个上述变量预先设定的常数值;
上述程序变换装置还具备:
常数值判断块生成部,生成常数值判断块并配置在上述入口块之前,上述常数值判断块由判断上述变量的值是否与上述常数值相等的指令、以及在不相等的情况下停止该线程的指令构成;以及
常数值变换部,在由上述常数值判断块生成部判断为相等的情况下,将该线程中的上述线程主体块中的上述变量变换为上述常数值;
上述线程并行化部生成推测性地使变换后的多个线程并行执行的程序。
10.如权利要求9所述的程序变换装置,其中,
上述特殊依存产生部还产生在上述其他线程停止块中的指令之前执行上述常数值判断块中的指令的特别的依存关系。
11.如权利要求2所述的程序变换装置,其中,
上述多个线程包含第1线程和第2线程;
上述线程主体块生成部具备:
路径包含关系计算部,计算上述第1线程和第2线程的包含关系;以及
线程主体块路径简化部,根据上述线程的包含关系,在上述第1线程包含上述第2线程的情况下,从上述第1线程中删除与上述第2线程重复的路径。
12.如权利要求2所述的程序变换装置,其中,
上述线程并行化部具备:
线程间包含关系计算部,对于上述多个线程所包含的第1线程和第2线程,判断与上述第1线程等价的路径是否包含在与上述第2线程等价的路径中,在判断为包含的情况下,看作上述第1线程包含在上述第2线程中来计算线程间的包含关系;
线程平均执行时间计算部,根据上述路径信息,通过路径的执行概率和变量所保持的值的保持概率,计算所生成的线程的平均执行时间;以及
概率信息线程删除部,在上述第1线程包含在上述第2线程中、且上述第2线程的平均执行时间比上述第1线程的平均执行时间短时,删除上述第1线程。
13.如权利要求1所述的程序变换装置,其中,
上述程序包含对路径进行识别的信息即路径识别信息;
上述程序变换装置还具备路径解析部,该路径解析部对上述路径识别信息进行解析来提取上述路径信息。
14.如权利要求13所述的程序变换装置,其中,
上述程序包含变量保持值信息,该变量保持值信息表示在路径上存在的变量所保持的值;
上述路径解析部具备变量保持值解析单元,该变量保持值解析单元对上述路径识别信息和上述变量保持值信息进行解析,来确定变量所保持的值。
15.如权利要求12所述的程序变换装置,其中,
上述程序包含对路径进行识别的信息即路径识别信息、路径的执行概率信息、表示在路径上存在的变量所保持的值的变量保持值信息、以及变量所保持的值的保持概率信息;
上述程序变换装置还具备概率确定单元,该概率确定单元根据上述路径识别信息、上述执行概率信息、上述变量保持值信息以及上述保持概率信息,确定上述执行概率以及上述保持概率。
16.一种程序变换方法,包括:
线程制作步骤,根据与程序中的程序部分的执行路径有关的路径信息,制作与上述程序部分等价的多个线程,且各个线程与上述程序部分的多个执行路径中的至少一个执行路径等价;
置换步骤,置换上述多个线程的变量,以使在上述多个线程间不引起变量的写入冲突,并使在上述多个线程间共享的变量的值的写入仅由单一的线程执行;以及
线程并行化步骤,生成在置换变量之后推测性地使多个线程并行执行的程序。
17.如权利要求16所述的程序变换方法,其中,
上述线程制作步骤包括:
线程主体块生成步骤,对构成上述程序部分的多个执行路径中的一个执行路径的指令进行复制,由此生成作为线程的主体的线程主体块;以及
其他线程停止块生成步骤,生成由使其他线程的执行停止的指令构成的其他线程停止块,并配置在上述线程主体块之后;
上述置换步骤包括:
出入口生存变量检测步骤,检测出入口生存变量,该出入口生存变量是在上述线程主体块的入口及出口生存的变量;
出入口变量置换步骤,按每个上述出入口生存变量生成新的变量,将上述线程主体块中的上述出入口生存变量置换为新生成的变量;
入口块生成部步骤,生成入口块并配置在上述线程主体块之前,上述入口块由将上述出入口生存变量中的在入口生存的变量所保持的值代入到上述出入口变量置换步骤置换后的变量中的指令构成;
出口块生成步骤,生成出口块并配置在上述其他线程停止块之后,上述出口块由将上述出入口变量置换步骤置换后的变量所保持的值代入到上述出入口生存变量中的在出口生存的变量中的指令构成;
线程内生存变量检测步骤,检测线程内生存变量,该线程内生存变量是未在上述出入口生存变量检测步骤中检测出的变量,而且是在上述线程主体块中出现的变量;以及
线程内生存变量置换步骤,按检测出的每个上述线程内生存变量生成新的变量,并将上述线程主体块中的上述线程内生存变量置换为新生成的变量;
上述程序变换方法还包括线程内最优化步骤,该线程内最优化步骤将由上述置换部置换了变量的线程中的指令最优化为更高效的指令;
上述线程内最优化步骤包括:
入口块内指令复制传播最优化步骤,对于在上述置换步骤中置换了变量的线程中的上述入口块的指令,实施向上述线程主体块和上述出口块中的复制传播以及无用代码最优化;
一般依存关系计算步骤,根据在上述置换步骤中置换了变量的线程中的指令的数据的更新以及参照的执行顺序,计算置换了上述变量的线程中的指令的依存关系;
特殊依存产生步骤,产生在上述出口块中的指令之前执行上述其他线程停止块中的指令的依存关系、以及在位于上述其他线程停止块中的指令之前执行上述本线程停止指令的依存关系;以及
指令调度步骤,根据在上述一般依存关系计算步骤中计算的依存关系以及在上述特殊依存产生步骤中计算的依存关系,使线程内的指令并行化;
在上述线程并行化步骤中,生成推测性地使通过上述线程内最优化步骤最优化后的线程并行执行的程序。
18.如权利要求17所述的程序变换方法,其中,
上述路径信息包含路径上存在的变量、以及对每个上述变量预先设定的常数值;
上述程序变换方法还包括:
常数值判断块生成步骤,生成常数值判断块并配置在上述入口块之前,上述常数值判断块由判断上述变量的值是否与上述常数值相等的指令、以及在不相等的情况下停止该线程的指令构成;以及
常数值变换步骤,将该线程主体块中的上述变量变换为上述常数值;
在上述线程并行化步骤中,生成推测性地使变换后的多个线程并行执行的程序。
19.如权利要求18所述的程序变换方法,其中,
在上述特殊依存产生步骤中,还产生在上述其他线程停止块中的指令之前执行上述常数值判断块中的指令的特别的依存关系。
CN2009801294211A 2008-07-31 2009-04-28 程序变换装置以及程序变换方法 Pending CN102105864A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2008198375A JP2010039536A (ja) 2008-07-31 2008-07-31 プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
JP2008-198375 2008-07-31
PCT/JP2009/001932 WO2010013370A1 (ja) 2008-07-31 2009-04-28 プログラム変換装置及びプログラム変換方法

Publications (1)

Publication Number Publication Date
CN102105864A true CN102105864A (zh) 2011-06-22

Family

ID=41610086

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009801294211A Pending CN102105864A (zh) 2008-07-31 2009-04-28 程序变换装置以及程序变换方法

Country Status (4)

Country Link
US (1) US20110119660A1 (zh)
JP (1) JP2010039536A (zh)
CN (1) CN102105864A (zh)
WO (1) WO2010013370A1 (zh)

Cited By (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103635875A (zh) * 2011-03-25 2014-03-12 索夫特机械公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
US9766893B2 (en) 2011-03-25 2017-09-19 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9811377B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for executing multithreaded instructions grouped into blocks
US9823930B2 (en) 2013-03-15 2017-11-21 Intel Corporation Method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US9842005B2 (en) 2011-03-25 2017-12-12 Intel Corporation Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9858080B2 (en) 2013-03-15 2018-01-02 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886416B2 (en) 2006-04-12 2018-02-06 Intel Corporation Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9898412B2 (en) 2013-03-15 2018-02-20 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9934042B2 (en) 2013-03-15 2018-04-03 Intel Corporation Method for dependency broadcasting through a block organized source view data structure
US9940134B2 (en) 2011-05-20 2018-04-10 Intel Corporation Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
US9965281B2 (en) 2006-11-14 2018-05-08 Intel Corporation Cache storing data fetched by address calculating load instruction with label used as associated name for consuming instruction to refer
US10031784B2 (en) 2011-05-20 2018-07-24 Intel Corporation Interconnect system to support the execution of instruction sequences by a plurality of partitionable engines
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US10146548B2 (en) 2013-03-15 2018-12-04 Intel Corporation Method for populating a source view data structure by using register template snapshots
US10169045B2 (en) 2013-03-15 2019-01-01 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10191746B2 (en) 2011-11-22 2019-01-29 Intel Corporation Accelerated code optimizer for a multiengine microprocessor
US10198266B2 (en) 2013-03-15 2019-02-05 Intel Corporation Method for populating register view data structure by using register template snapshots
US10228949B2 (en) 2010-09-17 2019-03-12 Intel Corporation Single cycle multi-branch prediction including shadow cache for early far branch prediction
US10521239B2 (en) 2011-11-22 2019-12-31 Intel Corporation Microprocessor accelerated code optimizer

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9189233B2 (en) 2008-11-24 2015-11-17 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
CN102292709B (zh) * 2009-04-28 2014-05-21 国际商业机器公司 用于变换在多线程上工作的程序的程序代码的方法和系统
CA2684441C (en) * 2009-09-22 2012-06-05 Ibm Canada Limited - Ibm Canada Limitee May-constant propagation
US9417855B2 (en) 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
US9430199B2 (en) * 2012-02-16 2016-08-30 Microsoft Technology Licensing, Llc Scalar optimizations for shaders
CN103365720B (zh) * 2012-03-28 2017-12-05 国际商业机器公司 用于多线程环境下动态调整全局堆分配的方法和系统
US9880842B2 (en) 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
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
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
JP6283990B2 (ja) 2013-10-11 2018-02-28 ティアック株式会社 ケーブル固定装置
US20160098656A1 (en) * 2014-10-02 2016-04-07 Bernard Ertl Critical Path Scheduling with Primacy
US9658855B2 (en) * 2014-10-10 2017-05-23 Fujitsu Limited Compile method and compiler apparatus
US9575802B2 (en) * 2014-10-28 2017-02-21 International Business Machines Corporation Controlling execution of threads in a multi-threaded processor
US11080064B2 (en) 2014-10-28 2021-08-03 International Business Machines Corporation Instructions controlling access to shared registers of a multi-threaded processor
US9582268B2 (en) * 2015-05-27 2017-02-28 Runnable Inc. Automatic communications graphing for a source application
US20160350081A1 (en) 2015-05-27 2016-12-01 Runnable Inc. Automatic container definition
JP2018081592A (ja) * 2016-11-17 2018-05-24 富士通株式会社 コンパイルプログラム、コンパイル方法、およびコンパイル装置
US11080029B2 (en) 2019-08-28 2021-08-03 Red Hat, Inc. Configuration management through information and code injection at compile time
WO2022236031A1 (en) * 2021-05-06 2022-11-10 Wisconsin Alumni Research Foundation Computer implemented program specialization

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3630086B2 (ja) * 2000-09-18 2005-03-16 松下電器産業株式会社 プログラム変換装置、プログラム変換方法及び記録媒体
US6928645B2 (en) * 2001-03-30 2005-08-09 Intel Corporation Software-based speculative pre-computation and multithreading
US7159211B2 (en) * 2002-08-29 2007-01-02 Indian Institute Of Information Technology Method for executing a sequential program in parallel with automatic fault tolerance
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
JP4028444B2 (ja) * 2003-06-27 2007-12-26 株式会社東芝 スケジューリング方法およびリアルタイム処理システム
US7404067B2 (en) * 2003-09-08 2008-07-22 Intel Corporation Method and apparatus for efficient utilization for prescient instruction prefetch
US20050071438A1 (en) * 2003-09-30 2005-03-31 Shih-Wei Liao Methods and apparatuses for compiler-creating helper threads for multi-threading
US20050144602A1 (en) * 2003-12-12 2005-06-30 Tin-Fook Ngai Methods and apparatus to compile programs to use speculative parallel threads
US20050144604A1 (en) * 2003-12-30 2005-06-30 Li Xiao F. Methods and apparatus for software value prediction
US7624449B1 (en) * 2004-01-22 2009-11-24 Symantec Corporation Countering polymorphic malicious computer code through code optimization
US7784039B2 (en) * 2004-09-22 2010-08-24 Panasonic Corporation Compiler, compilation method, and compilation program
JP4754909B2 (ja) * 2004-09-22 2011-08-24 パナソニック株式会社 コンパイラ装置、コンパイル方法、コンパイラプログラム
JP4783005B2 (ja) * 2004-11-25 2011-09-28 パナソニック株式会社 プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
US7627864B2 (en) * 2005-06-27 2009-12-01 Intel Corporation Mechanism to optimize speculative parallel threading
JP4884297B2 (ja) * 2006-05-26 2012-02-29 パナソニック株式会社 コンパイラ装置、コンパイル方法およびコンパイラプログラム
US20080209436A1 (en) * 2006-10-25 2008-08-28 Gul Agha Automated testing of programs using race-detection and flipping
JP2008158806A (ja) * 2006-12-22 2008-07-10 Matsushita Electric Ind Co Ltd 複数プロセッサエレメントを備えるプロセッサ用プログラム及びそのプログラムの生成方法及び生成装置
JP4962564B2 (ja) * 2007-03-29 2012-06-27 富士通株式会社 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
US8381226B2 (en) * 2008-02-07 2013-02-19 Nec Laboratories America, Inc. System and method for monotonic partial order reduction
US8239843B2 (en) * 2008-03-11 2012-08-07 Oracle America, Inc. Value predictable variable scoping for speculative automatic parallelization with transactional memory

Cited By (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9886416B2 (en) 2006-04-12 2018-02-06 Intel Corporation Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US11163720B2 (en) 2006-04-12 2021-11-02 Intel Corporation Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US10289605B2 (en) 2006-04-12 2019-05-14 Intel Corporation Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US10585670B2 (en) 2006-11-14 2020-03-10 Intel Corporation Cache storing data fetched by address calculating load instruction with label used as associated name for consuming instruction to refer
US9965281B2 (en) 2006-11-14 2018-05-08 Intel Corporation Cache storing data fetched by address calculating load instruction with label used as associated name for consuming instruction to refer
US10228949B2 (en) 2010-09-17 2019-03-12 Intel Corporation Single cycle multi-branch prediction including shadow cache for early far branch prediction
CN103635875B (zh) * 2011-03-25 2018-02-16 英特尔公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
US9921845B2 (en) 2011-03-25 2018-03-20 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US11204769B2 (en) 2011-03-25 2021-12-21 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9766893B2 (en) 2011-03-25 2017-09-19 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
CN103635875A (zh) * 2011-03-25 2014-03-12 索夫特机械公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
US10564975B2 (en) 2011-03-25 2020-02-18 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9990200B2 (en) 2011-03-25 2018-06-05 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
US9842005B2 (en) 2011-03-25 2017-12-12 Intel Corporation Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9934072B2 (en) 2011-03-25 2018-04-03 Intel Corporation Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US10372454B2 (en) 2011-05-20 2019-08-06 Intel Corporation Allocation of a segmented interconnect to support the execution of instruction sequences by a plurality of engines
US9940134B2 (en) 2011-05-20 2018-04-10 Intel Corporation Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
US10031784B2 (en) 2011-05-20 2018-07-24 Intel Corporation Interconnect system to support the execution of instruction sequences by a plurality of partitionable engines
US10191746B2 (en) 2011-11-22 2019-01-29 Intel Corporation Accelerated code optimizer for a multiengine microprocessor
US10521239B2 (en) 2011-11-22 2019-12-31 Intel Corporation Microprocessor accelerated code optimizer
US9934042B2 (en) 2013-03-15 2018-04-03 Intel Corporation Method for dependency broadcasting through a block organized source view data structure
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10146548B2 (en) 2013-03-15 2018-12-04 Intel Corporation Method for populating a source view data structure by using register template snapshots
US10169045B2 (en) 2013-03-15 2019-01-01 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US10198266B2 (en) 2013-03-15 2019-02-05 Intel Corporation Method for populating register view data structure by using register template snapshots
US9823930B2 (en) 2013-03-15 2017-11-21 Intel Corporation Method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US10248570B2 (en) 2013-03-15 2019-04-02 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10255076B2 (en) 2013-03-15 2019-04-09 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US10146576B2 (en) 2013-03-15 2018-12-04 Intel Corporation Method for executing multithreaded instructions grouped into blocks
US9811377B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for executing multithreaded instructions grouped into blocks
US9858080B2 (en) 2013-03-15 2018-01-02 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US10503514B2 (en) 2013-03-15 2019-12-10 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9898412B2 (en) 2013-03-15 2018-02-20 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US10740126B2 (en) 2013-03-15 2020-08-11 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US11656875B2 (en) 2013-03-15 2023-05-23 Intel Corporation Method and system for instruction block to execution unit grouping

Also Published As

Publication number Publication date
JP2010039536A (ja) 2010-02-18
WO2010013370A1 (ja) 2010-02-04
US20110119660A1 (en) 2011-05-19

Similar Documents

Publication Publication Date Title
CN102105864A (zh) 程序变换装置以及程序变换方法
US7853937B2 (en) Object-oriented, parallel language, method of programming and multi-processor computer
CN102736948B (zh) 用于设置检查点并恢复程序状态的方法
Stachtiari et al. Early validation of system requirements and design through correctness-by-construction
Utke et al. Toward adjoinable MPI
US20120131559A1 (en) Automatic Program Partition For Targeted Replay
Yuki et al. Array dataflow analysis for polyhedral X10 programs
Gan et al. A symbolic model checking approach to verifying satellite onboard software
US10289395B2 (en) Performing a compiler optimization pass as a transaction
Li et al. Practical symbolic race checking of GPU programs
US20130024674A1 (en) Return address optimisation for a dynamic code translator
US8266416B2 (en) Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system
US9454382B2 (en) Verification of UML state machines
Qiu et al. Scalable fsm parallelization via path fusion and higher-order speculation
Margaria et al. Leveraging Applications of Formal Methods, Verification, and Validation: 4th International Symposium on Leveraging Applications, ISoLA 2010, Heraklion, Crete, Greece, October 18-21, 2010, Proceedings, Part I
Kim et al. {STRADS-AP}: Simplifying Distributed Machine Learning Programming without Introducing a New Programming Model
Midkiff Automatic generation of synchronization instructions for parallel processors
Girault Elimination of redundant messages with a two-pass static analysis algorithm
Kim et al. Failure-tolerant parallel programming and its supporting system architecture
Takizawa et al. Xevolver for performance tuning of C programs
KR101910934B1 (ko) 루프의 프롤로그 또는 에필로그의 비유효 연산을 처리하는 장치 및 방법
WO2023155863A1 (en) Methods and devices for compiler function fusion
Du et al. Developing Distributed Data Mining Implementations for a Grid Environment.
Schanen et al. Adjoining hybrid parallel code
Diarra Towards automatic restrictification of CUDA kernel arguments

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20110622