生成用于并行计算架构的源代码的方法及源到源编译器的制造方法

文档序号:8258114阅读:366来源:国知局
生成用于并行计算架构的源代码的方法及源到源编译器的制造方法
【技术领域】
[0001] 本发明涉及计算机领域,尤其涉及生成用于并行计算架构的源代码的方法及源到 源编译器。
【背景技术】
[0002] 单指令多数据(Single Instruction Multiple Data,简称:SIMD)表不在多个数 据项上并行操作的单个指令。例如"加(add) "相对应的SMD指令可以表示对8个16比特 值的并行加法。
[0003] 目前,计算机已实现从硬件上支持SMD的多种并行化策略。为了充分使用这些性 能特征,软件层面上可依据程序的计算架构特性,对不同特性的计算采用不同的并行化策 略进行源到源的并行化转换。这通常涉及到"源码到源码的编译器"技术。
[0004] 现有技术中,存在利用"源码到源码的编译器"技术生成任意并行计算架构的并行 单指令多数据代码的方案。如图1所示,该方案预定义了注释标准,其独立于并行计算架 构,根据该预定义的注释标准,用户可以指定生成源代码的期望环境。具体工作原理为:自 动化并行代码生成器(Automatic parallel code generator,APCG)源到源编译器120接 收带APCG注释的并行应用源代码110,并根据预定义的注释标准评估带APCG注释的并行应 用源代码110中的注释,生成用于注释所描述的并行计算架构的本机并行应用源代码,如 X86并行应用源代码130、Cell电源处理单元(Power Processing Unit,简称:PPU)并行应 用源代码132、Cell协处理单元(Synergistic Processing Unit,简称:SPU)并行应用源代 码134。本机并行应用源代码130、132、134分别由X86编译器140、Cell PPU编译器142、 Cell SPU编译器144接收后,生成用于各个并行计算架构的各个目标代码,分别为X86并行 应用目标代码150、Cell PPU并行应用目标代码152、Cell SPU并行应用目标代码154。
[0005] 该方案虽然在一定程度上通过高层抽象的带APCG带注释的并行应用源代码实现 了高层的软件抽象,进而实现了源到源编译器的跨平台,但由于带APCG注释的并行应用源 代码110与本机源代码一一机械地对应,程序员需要熟悉本机源代码的算法来改写成相应 的带APCG注释的并行应用源代码110,因此这种转换系统效率较低,可移植性较差,进而不 能有效地使用上述性能特征。

【发明内容】

[0006] 本发明的实施例提供生成用于并行计算架构的源代码的方法及源到源编译器,以 至少解决现有技术中利用"源码到源码的编译器"技术生成用于并行计算架构的源代码时 存在的低效率、可移植性较差的问题,能够提高生成用于并行计算架构的源代码时的效率 与可移植性。
[0007] 为达到上述目的,本发明的实施例采用如下技术方案:
[0008] 第一方面,提供一种生成用于并行计算架构的源代码的方法,所述方法包括:
[0009] 接收第一源代码,所述第一源代码为用户输入的向量矩阵的源代码;
[0010] 解析所述第一源代码,获得第一抽象语法树AST,其中,所述第一 AST为与所述并 行计算架构无关的AST ;
[0011] 获取所述并行计算架构的信息,并根据所述并行计算架构的信息,将所述第一 AST 转化为第二AST,其中,所述第二AST为与所述并行计算架构相关的AST ;
[0012] 将所述第二AST转化为所述并行计算架构的第二源代码,所述第二源代码为所述 并行计算架构的编译器能够编译的源代码。
[0013] 在第一方面第一种可能的实现方式中,结合第一方面,所述解析所述第一源代码, 获得第一抽象语法树AST,其中,所述第一 AST为与所述并行计算架构无关的AST,包括:
[0014] 解析所述第一源代码,获得向量矩阵操作的AST;
[0015] 根据预设规则,将所述向量矩阵操作的AST转化成元素操作的AST ;
[0016] 所述根据所述并行计算架构的信息,将所述第一 AST转化为第二AST,包括:
[0017] 根据所述并行计算架构的信息,将所述元素操作的AST转化为所述第二AST。
[0018] 在第一方面第二种可能的实现方式中,结合第一方面第一种可能的实现方式,所 述根据预设规则,将所述向量矩阵操作的AST转化成元素操作的AST,包括:
[0019] 在预设的元素操作的函数库中查找所述向量矩阵操作对应的函数体;
[0020] 用所述向量矩阵操作对应的函数体的AST替换所述向量矩阵操作的AST,获得所 述元素操作的AST。
[0021] 在第一方面第三种可能的实现方式中,结合第一方面第一种可能的实现方式,所 述根据预设规则,将所述向量矩阵操作的AST转化成元素操作的AST,包括:
[0022] 根据所述向量矩阵操作的操作符与操作数,将所述向量矩阵操作的AST进行分 解,获得所述向量矩阵操作的AST对应的元素操作的函数;
[0023] 用所述向量矩阵操作的AST对应的元素操作的函数的AST替换所述向量矩阵操作 的AST,获得所述元素操作的AST。
[0024] 在第一方面第四种可能的实现方式中,结合第一方面第一种可能的实现方式至第 一方面第三种可能的实现方式,在所述根据预设规则,将所述向量矩阵操作的AST转化成 元素操作的AST之后,所述根据所述并行计算架构的信息,将所述元素操作的AST转化为所 述第二AST之前,还包括:
[0025] 将所述元素操作的AST进行优化,获得优化后的所述元素操作的AST;
[0026] 所述根据所述并行计算架构的信息,将所述元素操作的AST转化为第二AST,包 括:
[0027] 根据所述并行计算架构的信息,将所述优化后的所述元素操作的AST转化为所述 第二 AST。
[0028] 第二方面,提供一种源到源编译器,所述源到源编译器包括:接收单元、解析单元、 获取单元、第一转化单元、第二转化单元;
[0029] 所述接收单元,用于接收第一源代码,所述第一源代码为用户输入的向量矩阵的 源代码;
[0030] 所述解析单元,用于解析所述第一源代码,获得第一抽象语法树AST,其中,所述第 一 AST为与所述并行计算架构无关的AST ;
[0031] 所述获取单元,用于获取所述并行计算架构的信息;
[0032] 所述第一转化单元,用于根据所述并行计算架构的信息,将所述第一 AST转化为 第二AST,其中,所述第二AST为与所述并行计算架构相关的AST ;
[0033] 所述第二转化单元,用于将所述第二AST转化为所述并行计算架构的第二源代 码,所述第二源代码为所述并行计算架构的编译器能够编译的源代码。
[0034] 在第二方面第一种可能的实现方式中,结合第二方面,所述解析单元包括:解析模 块、转化t吴块;
[0035] 所述解析模块,用于解析所述第一源代码,获得向量矩阵操作的AST ;
[0036] 所述转化模块,用于根据预设规则,将所述向量矩阵操作的AST转化成元素操作 的 AST ;
[0037] 所述第一转化单元具体用于:
[0038] 根据所述并行计算架构的信息,将所述元素操作的AST转化为所述第二AST。
[0039] 在第二方面第二种可能的实现方式中,结合第二方面第一种可能的实现方式,所 述转化模块具体用于:
[0040] 在预设的元素操作的函数库中查找所述向量矩阵操作对应的函数体;
[0041] 用所述向量矩阵操作对应的函数体的AST替换所述向量矩阵操作的AST,获得所 述元素操作的AST。
[0042] 在第二方面第三种可能的实现方式中,结合第二方面第一种可能的实现方式,所 述转化模块具体用于:
[0043] 根据所述向量矩阵操作的操作符与操作数,将所述向量矩阵操作的AST进行分 解,获得所述向量矩阵操作的AST对应的元素操作的函数;
[0044] 用所述向量矩阵操作的AST对应的元素操作的函数的AST替换所述向量矩阵操作 的AST,获得所述元素操作的AST。
[0045] 在第二方面第四种可能的实现方式中,结合第二方面第一种可能的实现方式至第 一方面第三种可能的实现方式,所述源到源编译器还包括:优化单元;
[0046] 所述优化单元,用于在所述转化模块根据预设规则,将所述向量矩阵操作的AST 转化成元素操作的AST之后,所述第一转化单元根据所述并行计算架构的信息,将所述元 素操作的AST转化为第二AST之前,将所述元素操作的AS
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1