可重构处理器的高级语言的并行化和循环优化方法及系统的制作方法

文档序号:9921901阅读:549来源:国知局
可重构处理器的高级语言的并行化和循环优化方法及系统的制作方法
【技术领域】
[0001] 本发明涉及基于通用可重构处理器的高级语言的自动并行化和循环优化的方法 和系统的实现。
【背景技术】
[0002] 随着在单个芯片上的计算的操作数和操作符越来越多,并行化的和多核的处理器 体系结构已经成为了主流。在以往的处理器计算模式中,通常分为以下两类。传统的以冯· 诺依曼处理器为基础的通用计算具有极强的灵活性,但是其指令流驱动的执行方式、有限 的运算单元和存储带宽使其整体性能和功耗并不理想。专用计算可以针对特定的应用优化 结构和电路,无需指令集,其执行速度快,功耗低。但专用计算系统存在着致命的缺陷,灵活 性和扩展性很差,对不断演化的更加复杂的应用往往不能通过简单的扩展来完成。可重构 计算就是在这种背景下出现的一种将软件的灵活性和硬件的高效性结合在一起的计算方 式。
[0003] 对于一个可重构处理器,它包括了一个通用的处理器和若干个可重构的计算单 元。通用处理器用来控制可重构计算单元的计算过程,并行任务调度和执行串行任务。可重 构计算单元负责根据配置信息来进行重构和计算。由此,可重构架构可以适应不同的算法 和应用的计算。虽然现在已经有了很多种可重构的计算架构,但是原始C语言并不能满足并 行计算的需要,而如何更高效的编程来尽可能的激发出PEA的高效性已经成为了一个显而 易见的难题和挑战。
[0004] 对于一种可重构架构,需要实现一个与它相匹配的任务编译器和一个并行化扩展 后的C语言版本。CUDA允许开发者利用图形计算单元(GPU)来进行特定用途的编程。但是它 的编程过程非常繁琐,需要程序员自己去进行内存分配和循环优化。OpenMP支持对C、C++和 Fortran语言的多核编程。尽管它在程序中添加了很多并行化的标记,但是它仅仅能够进行 多线程的优化和计算。以上这两种并行语言都不能在可重构架构上进行任务调度。

【发明内容】

[0005] 本发明的目的在于提供一种可重构处理器的高级语言的并行化和循环优化方法 及系统,能够将C语言自动转化成为GR-C语言并且实现针对于具体可重构架构的循环优化, 从而使得可重构架构的性能提升。
[0006] 为解决上述问题,本发明提供一种可重构处理器的高级语言的并行化和循环优化 方法,包括:
[0007]获取decls .h文件,根据所述decls .h文件得到输入和输出中间文件,从所述输入 和输出中间文件得到task函数和pea函数的参数信息;
[0008] 从C代码中提取出kerne 1函数部分,利用多面体模型对提出的kerne 1函数部分进 行优化,以生成kerne 1函数部分的GR-C语言;
[0009] 根据所述参数信息将所述kernel函数部分的GR-C语言写回到C代码的kernel函数 部分,以生成最终的GR-C代码。
[0010] 进一步的,在上述方法中,从C代码中提取出kernel函数部分,利用多面体模型对 提出的kernel函数部分进行优化,以生成kernel函数部分的GR-C语言,包括:
[0011] 输入C代码的静态依赖分析,将所述C代码的静态依赖分析转化为多面体模型;
[0012] 对所述多面体模型进行优化,以得到并行化的多面体模型;
[0013] 根据所述并行化的多面体模型生成kernel函数部分的GR-C语言。
[0014] 进一步的,在上述方法中,根据所述并行化的多面体模型生成kernel函数部分的 GR-C语言,包括:
[0015] 使用CLooG工具将所述并行化的多面体模型生成kernel函数部分的GR-C语言。
[0016] 进一步的,在上述方法中,输入C代码的静态依赖分析包括:
[0017 ]使用LooPo架构来进行代码扫描和依赖分析。
[0018] 进一步的,在上述方法中,对所述多面体模型进行优化,以得到并行化的多面体模 型的步骤中,
[0019] 基于PLUT0模型进行了改写,得到仿射优化转换的框架;
[0020]使用PipLib作为ILP计算器;
[0021] 根据所述框架和ILP计算器对所述多面体模型进行优化,以得到并行化的多面体 模型。
[0022] 进一步的,在上述方法中,对所述多面体模型进行优化的步骤中,采用如下循环优 化顺序对提出的kerne 1函数部分进行优化:
[0023] 首先,将所有状态分离,并且按照依赖关系和循环边界进行分组;
[0024] 然后,对每个组进行循环融合,将合适的状态融合到一起;
[0025] 然后,针对每组的操作数需要的执行周期来确定循环展开的参数;
[0026] 最后,通过计算得到的参数进行循环展开,得到合适的循环长度和表示形式。
[0027]根据本发明的另一面,提供一种可重构处理器的高级语言的并行化和循环优化系 统,包括:
[0028]获取模块,用于获取decls.h文件,根据所述decls.h文件得到输入和输出中间文 件,从所述输入和输出中间文件得到task函数和pea函数的参数信息;
[0029] 优化模块,用于从C代码中提取出kernel函数部分,利用多面体模型对提出的 kernel函数部分进行优化,以生成kernel函数部分的GR-C语言;
[0030] 生成模块,用于根据所述参数信息将所述kernel函数部分的GR-C语言写回到C代 码的kernel函数部分,以生成最终的GR-C代码。
[0031 ]进一步的,在上述系统中,所述优化模块,包括:
[0032] 转化单元,用于输入C代码的静态依赖分析,将所述C代码的静态依赖分析转化为 多面体模型;
[0033] 优化单元,用于对所述多面体模型进行优化,以得到并行化的多面体模型;
[0034] 生成单元,用于根据所述并行化的多面体模型生成kernel函数部分的GR-C语言。
[0035] 进一步的,在上述系统中,所述生成单元,用于使用CLooG工具将所述并行化的多 面体模型生成kernel函数部分的GR-C语言。
[0036] 进一步的,在上述系统中,所述转化单元,用于使用LooPo架构来进行代码扫描和 依赖分析。
[0037] 进一步的,在上述系统中,所述优化单元,用于基于PLUTO模型进行了改写,得到仿 射优化转换的框架;使用PipLib作为ILP计算器;根据所述框架和ILP计算器对所述多面体 模型进行优化,以得到并行化的多面体模型。
[0038] 进一步的,在上述系统中,所述优化单元采用如下循环优化顺序对提出的kernel 函数部分进行优化:
[0039] 首先,将所有状态分离,并且按照依赖关系和循环边界进行分组;
[0040] 然后,对每个组进行循环融合,将合适的状态融合到一起;
[0041] 然后,针对每组的操作数需要的执行周期来确定循环展开的参数;
[0042] 最后,通过计算得到的参数进行循环展开,得到合适的循环长度和表示形式。
[0043]与现有技术相比,本发明针对通用可重构处理器提出了一套端对端的语言转化系 统,对于可重构处理器,计算密集型应用中的核心循环需要通过可重构部分进行并行计算, 而这就使得C语言不能满足他的并行特性,利用本发明中的系统,所以需要将应用程序中的 串行部分和并行部分分别封装,并且根据系统特性来进行优化,最终生成一套新型的语言, 适用性非常广。另外,在确定kernel函数的输入输出的数据类型和长度时,采用了让程序员 编写decl s.h的方法,这大大简化了系统的复杂程度,并且使得系统的适用性大为提高。此 外,在进行循环优化的过程中,本发明利用了多面体模型进行处理,这也同样使得系统适用 性更加广泛,无论什么样的可重构架构,只需要改变循环优化部分的循环方法的顺序,就可 以得到通用的解决方法,系统在不同的架构上的移植更加简单。
【附图说明】
[0044] 图1是本发明一实施例的可重构处理器的高级语言的并行化和循环优化方法的流 程图;
[0045] 图2是本发明一优选实施例的可重构处理器的高级语言的并行化和循环优化方法 的流程图;
[0046] 图3是本发明一实施例的原始C代码kernel表示的示意图;
[0047]图4是本发明一实施例的GR-C代码函数声明和定义的示意图;
[0048] 图5是本发明一实施例的GR-C代码main函数kernel部分的示意图。
【具体实施方式】
[0049] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实 施方式对本发明作进一步详细的说明。
[0050] 实施例一
[0051]如图1所示,本发明提供一种可重构处理器的高级语言的并行化和循环优化方法, 包括:
[0052]步骤S1,获取decls. h文件,根据所述decls. h文件得到输入和输出中间文件,从所 述输入和输出中间文件得到task函数和pea函数的参数信息;具体的,在一个GR-C编写的应 用中,利用task函数(__GR_C_task void kernel_name())来表示kernel函数,而其中的核 心循环代码利用pea函数(__GR_C_pea void kernel_name_PEA())进行表示,Task函数用来 产生ARM7的可执行代码,负责搬运数据和调度P
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1