发明内容
本发明所要解决的技术问题是提出一种提供友好的交互手段、使用户与编译器紧密协作、并结合最新的先进并行化技术、并使串行应用程序在多核体系结构下获得好的性能的交互式并行化编译系统及其编译方法。
本发明为解决其技术问题提供了一种交互式并行化编译系统,该系统包括具有多核处理器的计算机和运行在多核处理器的计算机环境下的编译器,其中,编译器为Eclipse编译器,交互式并行化编译系统还包括交互式并行化插件和交互式并行化引擎,交互式并行化插件为基于Eclipse编译器的交互式视图插件,通过和用户交互来获取交互信息,将串行程序信息和交互信息传输到交互式并行化引擎;交互式并行化引擎接收串行程序和交互信息,确定串行程序的计算结构特性,对不同特性的计算采用不同的并行化策略进行并行化,并将并行化结果传递给交互式并行化插件。
本发明还提供了一种交互式并行化编译方法,该方法基于Eclipse编译器,通过与用户交互来对串行程序编译为可由计算机的多核处理器来并行处理的并行程序,该方法包括预备阶段和并行化阶段,在预备阶段交互式并行化插件与用户交互获取交互信息,交互式并行化引擎接收交互信息并进行自动化程序分析,确定串行程序的计算结构特性;在并行化阶段,交互式并行化插件与用户交互获取交互信息,交互式并行化引擎对不同特性的计算采用不同的并行化策略进行并行化,并将并行化结果传递给交互式并行化插件,Eclipse编译器显示并行化结果。
本发明提供的交互式并行化编译系统和编译方法,根据自动分析所得的信息,结合通过交互方式由用户提供的信息,形成程序的计算结构特性。针对不同的计算,采用不同的并行化方法实现源到源的并行化转换。本发明具有以下优点:
(1)基于Eclipse编译器的插件来实现交互功能,提供了友好的可视化环境和强大的用户交互功能,具有较好的可移植性和可扩展性;
(2)采用源到源的变换,具有通用性,可针对不同目标机器体系结构获得较好的并行化效果;
(3)采用最新自动并行化分析技术与交互式结合,较好地抽取程序信息及用户知识,具有较强的程序理解能力;
(4)支持多种不同类型计算,提供相应的并行化方案,支持多种粒度的并行性,支持投机多线程并行化。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发明进行详细描述。
图1为本发明的交互式并行化编译系统的结构框图,参见图1,本发明提供的交互式并行化编译系统包括具有多核处理器的计算机,Eclipse编译器1在多核处理器的计算机环境下运行。Eclipse编译器1作为底层基础框架,交互式并行化插件2和交互式并行化引擎3相互协作,将串行程序编译为可由多核处理器并行处理的并行程序。本发明所述的Eclipse编译器为基于Eclipse环境的编译器。
交互式并行化插件2是基于Eclipse编译器1的交互式视图插件,使用了Eclipse编译器的插件环境作为基底平台进行开发,提供了友好的交互式可视化环境和用户交互功能,通过和用户进行交互来获取相关性能参数和用户经验知识等交互信息,并传递给交互式并行化引擎3以指导并行化工作。用户通过Eclipse编译器的编辑器选择程序块,再由交互式并行化插件2中的菜单选择并行化功能,触发交互式并行化引擎3进行并行化操作。交互式并行化引擎3接收交互式并行化插件2所获取的交互信息,进行源到源的并行化转换,并将并行化转换结果传递给交互式并行化插件2。交互式并行化插件2接收并行化结果,对源程序进行重写操作,在Eclipse编译器的编辑器中向用户显示结果,并可进一步接收用户的反馈,按需进一步进行并行化操作。
交互式并行化引擎3包括交互式模块31、自动并行化模块32、程序变换模块33以及并行代码生成模块34。交互式并行化插件2将串行程序信息以及交互信息经由交互式模块31传输给交互并式行化引擎3,交互式并行化引擎3在获取交互信息的基础上,对串行程序进行并行化工作。
交互式模块31是交互式并行化引擎3与交互式并行化插件2的接口模块,通过这个模块,交互式并行化引擎3获取交互信息,并将程序分析及并行化结果传给交互式并行化插件2。
自动并行化模块32接收串行程序和交互信息,进行程序分析。根据获得的交互信息筛选出线性任务计算。对于非线性任务计算,再进行过程内数据流分析和过程间分析,筛选出递归任务计算。对于非任务计算,再进行数据依赖分析,来区分规则数据流计算和特定计算。
程序变换模块33接收交互信息和自动并行化模块32的分析结果,对串行程序进行理解,并准对不同计算选择合适的并行化策略进行并行变换。程序变换模块33针对四种类型的计算提供了相应的并行化方案。对于线性任务计算,根据交互信息建立开销模型,采用基于图模型理论的方法,对程序图模型进行划分和调度,来挖掘粗粒度任务级并行性。对于递归任务计算,采用并行分治算法,使用并行库对程序进行变换。对于规则数据流计算,根据交互信息建立性能模型,采用仿射划分算法对程序进行变换,获得流水级并行。对于SPECCPU2000 Compress等的特定计算,采用开销驱动、基于采样和反馈的用户经验信息指导的投机多线程并行化方法对特定计算进行并行化处理。
并行代码生成模块34对程序变换模块33产生的相关并行化变换进行源代码更改,生成并行化代码。对于C语言串行程序,生成串行程序代码与OpenMP指导语句相结合的并行化代码。
整个交互式并行化引擎3不断循环工作,与用户进行交互,获取相关用户知识经验信息,并进一步按需进行并行化处理,直到满足用户的并行化结果性能要求,具有积极的交互能力及较强的并行化能力。
交互式并行化插件2还提供了性能参数配置页,通过用户自定义性能参数,与交互式并行化引擎3进行交互,动态地确定开销模型,来指导并行化工作。与性能参数配置页类似,交互式并行化插件2还提供了用户知识窗口,用户通过输入程序运行的相关知识,来指导投机多线程并行化工作。另外,交互式并行化插件2还提供了可视化浏览环境,包括可以查看并行化效果的可视化性能分析器,以及可以查看程序信息图的多图浏览器。在交互式并行化引擎3完成并行化工作后,交互式并行化插件2负责将并行化后的代码写入,对源文件进行修改,并在Eclipse编译器的编辑器中实时显示并行化结果。
本发明提出了一种计算类型驱动的并行化算法,并以此算法作为理论基础,针对不同类型的计算,采用不同的并行化策略。本发明所支持的计算包括:1.由线性任务组成的计算,如多媒体编解码应用程序,MDG程序(分子动态模拟程序,PerfectBenchmarks的一部分)等等;2.由递归任务组成的计算,例如使用分治方法解决问题的应用等;3.由规则数据流组成的计算,如一部分科学计算应用程序等;4.特定计算,诸如SPECCPU2000Compress等。
本发明的核心算法分为两个阶段:预备阶段和并行化阶段。预备阶段,主要用来获取串行程序相关信息。通过交互方式,根据用户提供的信息来筛选线性任务计算。然后,进行自动化程序分析,包括过程内数据流分析和过程间分析,筛选递归任务计算。最后,通过数据依赖分析,来区分规则数据流计算和特定计算。确定串行应用程序的计算结构特性后,进入并行化阶段。并行化阶段针对不同特性的计算,采用不同的并行化策略。对于线性任务计算,通过与用户交互来建立开销模型,并根据开销模型,采用基于图模型理论的方法,对程序图模型进行划分和调度,来挖掘粗粒度任务级并行性。并将并行化结果显示给用户,并行化过程是迭代进行,直到用户满意并行化结果。对于递归任务计算,采用并行分治算法,使用并行库对程序进行变换,并显示并行化结果。对于规则数据流计算,通过用户交互手段,获取性能评估信息,根据性能模型使用仿射划分算法对程序进行变换,并显示并行化结果。对于特定计算,通过与用户交互,获取用户经验信息来指导投机执行,采用开销驱动、基于采样和反馈的投机多线程并行化方法对特定计算进行并行化处理,再通过一个支持投机并行的运行时环境的模拟执行,获得并行化性能值,并将并行化性能结果显示给用户,并行化过程迭代进行,直到用户满意并行化结果。
本发明的核心算法,即根据串行程序的计算特性使用合适的并行化策略进行源到源转换,其伪代码描述如下:
/*preparation phase*/
computation_info=Collect_interaction_info(PRE_PHASE)
if(computation_info is xml file){ /*filter linear task computation from others*/
id=LINEAR_TASK_COMPUTATION
}else{
Data_flow_analysis(id)
Interprocedural_analysis(id) /*filter out recursive task computation*/
Data_dependence_analysis(id)
/*distinguish regular data flow computation from“specific”computation*/
}
/*customizing parallelization strategy phase*/
switch(id){
case LINEAR_TASK_COMPUTATION:{
do {
cost_model_info=Collect_interaction_info(PAR_PHASE)
Task_level_parallelism_exploration(cost_model_info)
display parallelization result and interact with user
}while(user expects improvement on parallelization)
/*apply mapping and scheduling on program graph model*/
}
case RECURSIVE_TASK_COMPUTATION:{
DC_transformation()
/*apply Divide and Conquer algorithm using parallelizing library*/
}
case REGULAR_DATA_FLOW_COMPUTATION:{
performance_evaluation_info=Collect_interaction_info(PAR_PHASE)
AP_transformation(performance_evaluation_info)
/*apply transformation using affine partition algorithm*/
}
case SPECIFIC_COMPUTATION:{
do{
user_guidance_info=Collect_interaction_info(PAR_PHASE)
Speculative_parallelism_exploration(user_guidance_info)
/*apply cost driven speculative multithreading parallelization based on profiling*/
display parallelization result and interact with user
}while(user expects improvement on parallelization)
}
}
本发明的交互式并行化编译方法应用交互式并行化编译系统实现本发明的核心算法,包括预备阶段和并行化阶段。在预备阶段,交互式并行化插件与用户交互获取交互信息,并把交互信息传输给交互式并行化引擎。交互式并行化引擎接收交互信息和串行程序信息,自动并行化模块先根据交互信息来筛选线性任务计算,然后进行过程内数据流分析和过程间分析,筛选递归任务计算,最后通过数据依赖分析,区分规则数据流计算和特定计算。在并行化阶段,交互式并行化引擎的程序变换模块对于线性任务计算,通过与用户交互来建立开销模型,并根据开销模型,采用基于图模型理论的方法,对程序图模型进行划分和调度,来挖掘粗粒度任务级并行性,Eclipse编译器显示并行化结果,并行化过程是迭代进行,直到用户满意并行化结果。对于递归任务计算,程序变换模块采用并行分治算法,使用并行库对程序进行变换,Eclipse编译器显示并行化结果。程序变换模块对于规则数据流计算,通过用户交互手段,获取性能评估信息,根据性能模型使用仿射划分算法对程序进行变换,Eclipse编译器显示并行化结果。程序变换模块对于特定计算,通过与用户交互,获取用户经验信息来指导投机执行,采用开销驱动、基于采样和反馈的投机多线程并行化方法对特定计算进行并行化处理,Eclipse编译器显示并行化结果,行化过程迭代进行,直到用户满意并行化结果。