一种面向多核处理器的程序划分方法及装置的制造方法

文档序号:9810248阅读:348来源:国知局
一种面向多核处理器的程序划分方法及装置的制造方法
【技术领域】
[0001] 本发明涉及计算机技术领域,尤其涉及一种面向多核处理器的程序划分方法及装 置。
【背景技术】
[0002] 随着计算机技术的不断发展,多核处理器(英文:chip multi-processor,缩写: CMP)的应用越来越广泛。CMP在执行程序时,为了实现CMP的每个核并行执行以提高CMP 的执行效率,可以对部分程序进行划分,并将划分后的各个程序模块分别映射到CMP的每 个核中执行。
[0003] 现有技术中,实现CMP的每个核并行执行的主要方式为依赖于主从线程模式的操 作系统实现的OpenMP (英文:0pen Multiple Processing,中文:开放多重处理)并行方式, 其对程序进行划分、对划分后的程序模块进行调度,以及将调度后的程序模块映射到CMP 的每个核中执行。其中,对程序进行划分主要指采用主从线程的fork-join (分叉-合并) 模式对for循环进行划分。具体实现为在程序的头文件中增加 OpenMP的库文件"omp. h", 并在for循环的第一行语句的前一行增加制导语句"#pragma omp parallel for",该制导 语句的作用为需要对该for循环进行划分。编译器在编译程序的过程中,在程序开始的部 分,编译器采用主线程单线程的方式执行,当编译器执行到制导语句时,编译器调用OpenMP 的库文件对该for循环进行划分,即将该for循环划分为多个线程并行执行,当并行执行 结束后,多个线程进行同步,并继续采用主线程单线程的方式往下执行,直到执行到下一个 for循环。上述过程重复进行,直到程序执行结束。
[0004] 然而,上述OpenMP并行方式只能对程序中的for循环进行划分,对于程序中常见 的程序模块之间的流水线并行模式和函数模块之间的并行模式等,OpenMP并行方式并不能 适用;同时OpenMP并行方式的实现需依赖于主从线程模式的操作系统,对于嵌入式系统等 非主从线程模式的操作系统,OpenMP并行方式也无法适用,从而限制了 CMP的并行处理性 能。

【发明内容】

[0005] 本发明的实施例提供一种面向多核处理器的程序划分方法及装置,能够将整个程 序划分为多个程序模块,且无需依赖于操作系统,从而当划分后的多个程序模块映射到CMP 执行时,可以更好地发挥CMP的并行处理性能。
[0006] 为达到上述目的,本发明的实施例采用如下技术方案:
[0007] 第一方面,本发明提供一种面向多核处理器的程序划分方法,包括:
[0008] 从源程序的数据结构中的入口节点开始,依次标记所述源程序的数据结构中的 N个节点的层级,所述入口节点的层级为1,所述入口节点为上依赖节点数量为0的节点, N彡1,N为整数;
[0009] 由Μ = 1开始循环执行S1-S4,直至循环结束,Μ彡N,Μ为整数;
[0010] si :若所述N个节点中层级为Μ的第一节点的计算量小于预设的第一计算量阈值, 则根据所述第一节点的下依赖节点数量,从所述第一节点的依赖节点中确定备选节点集, 所述备选节点集中的每个备选节点的计算量与所述第一节点的计算量之和均小于等于预 设的第二计算量阈值;
[0011] S2:根据预设规则,从所述备选节点集中确定一个备选节点作为所述第一节点的 目标节点;
[0012] S3 :将所述第一节点和所述第一节点的目标节点合并为第二节点,所述第二节点 的层级与所述第一节点的目标节点的层级相同;
[0013] 34:将厘加 1。
[0014] 在第一方面的第一种可能的实现方式中,所述S1中根据所述第一节点的下依赖 节点数量,从所述第一节点的依赖节点中确定备选节点集,包括:
[0015] 若所述第一节点的下依赖节点数量大于等于1,则从所述第一节点的下依赖节点 中确定备选节点集。
[0016] 结合前述的第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现 方式中,所述S1中根据所述第一节点的下依赖节点数量,从所述第一节点的依赖节点中确 定备选节点集,包括:
[0017] 若所述第一节点的下依赖节点数量为0,则从所述第一节点的上依赖节点中确定 备选节点集。
[0018] 结合前述的第一方面或第一方面的第一种可能的实现方式至第二种可能的实现 方式中的任一种实现方式,在第三种可能的实现方式中,所述第一节点的下依赖节点数量 为1,所述备选节点集中包括一个备选节点,
[0019] 其中,所述S2中根据预设规则,从所述备选节点集中确定一个备选节点作为所述 第一节点的目标节点,包括:
[0020] 将所述一个备选节点作为所述第一节点的目标节点。
[0021] 结合前述的第一方面或第一方面的第一种可能的实现方式至第三种可能的实现 方式中的任一种实现方式,在第四种可能的实现方式中,所述第一节点的下依赖节点数量 大于1,所述预设规则为备选节点的层级和备选节点的上依赖节点数量,
[0022] 其中,所述S2中根据预设规则,从所述备选节点集中确定一个备选节点作为所述 第一节点的目标节点,包括:
[0023] 根据所述备选节点的层级,从所述备选节点集中确定层级最小的至少一个备选节 占 .
[0024] 根据所述备选节点的上依赖节点数量,从所述层级最小的至少一个备选节点中确 定上依赖节点数量最大的所述一个备选节点,作为所述第一节点的目标节点。
[0025] 结合前述的第一方面或第一方面的第一种可能的实现方式至第四种可能的实现 方式中的任一种实现方式,在第五种可能的实现方式中,所述第一节点的下依赖节点数量 为〇,所述预设规则为备选节点的上依赖节点数量,
[0026] 其中,所述S2中根据预设规则,从所述备选节点集中确定一个备选节点作为所述 第一节点的目标节点,包括:
[0027] 根据所述备选节点的上依赖节点数量,从所述备选节点集中确定上依赖节点数量 最大的所述一个备选节点作为所述第一节点的目标节点。
[0028] 结合前述的第一方面或第一方面的第一种可能的实现方式至第五种可能的实现 方式中的任一种实现方式,在第六种可能的实现方式中,所述第一节点的下依赖节点数量 为〇,所述预设规则为备选节点的计算量和备选节点的上依赖节点数量,
[0029] 其中,所述S2中根据预设规则,从所述备选节点集中确定一个备选节点作为所述 第一节点的目标节点,包括:
[0030] 根据所述备选节点的计算量,从所述备选节点集中确定计算量最小的至少一个备 选节点;
[0031] 根据所述备选节点的上依赖节点数量,从所述计算量最小的至少一个备选节点中 确定上依赖节点数量最大的所述一个备选节点,作为所述第一节点的目标节点。
[0032] 结合前述的第一方面或第一方面的第一种可能的实现方式至第六种可能的实现 方式中的任一种实现方式,在第七种可能的实现方式中,所述从源程序的数据结构中的入 口节点开始,依次标记所述源程序的数据结构中的N个节点的层级之前,所述方法还包括:
[0033] 采用静态单赋值SSA技术,生成所述源程序的数据结构,所述源程序的数据结构 包括所述N个节点的数据结构,所述N个节点中的每个节点的数据结构至少包括所述节点 的下依赖节点、所述节点的下依赖节点数量、所述节点的上依赖节点、所述节点的计算量, 以及所述节点的生命期。
[0034] 结合第一方面的第七种可能的实现方式,在第八种可能的实现方式中,所述S3中 将所述第一节点和所述第一节点的目标节点合并为第二节点,包括:
[0035] 根据所述第一节点的数据结构和所述第一节点的目标节点的数据结构,确定所述 第二节点的数据结构,所述第二节点的数据结构中包括所述第二节点的层级。
[0036] 结合前述的第一方面或第一方面的第一种可能的实现方式至第八种可能的实现 方式中的任一种实现方式,在第九种可能的实现方式中,所述方法还包括:
[0037] S5:若所述第一节点的计算量大于等于所述第一计算量阈值,且所述第一节点的 下依赖节点数量大于等于1,则执行S4。
[0038] 结合前述的第一方面或第一方面的第一种可能的实现方式至第九种可能的实现 方式中的任一种实现方式,在第十种可能的实现方式中,所述方法还包括:
[0039] S6:若所述第一节点的计算量大于等于所述第一计算量阈值,且所述第一节点的 下依赖节点数量为〇,则结束循环。
[0040] 结合前述的第一方面或第一方面的第一种可能的实现方式至第十种可能的实现 方式中的任一种实现方式,在第十一种可能的实现方式中,所述方法还包括:
[0041] 将下依赖节点数量和上依赖节点数量均为0的所有节点合并为所述第二节点。
[0042] 结合第一方面的第七种可能的实现方式,在第十二种可能的实现方式中,所述采 用SSA技术,生成所述源程序的数据结构之后,所述方法还包括:
[0043] 为所述N个节点中的每个节点分别分配存储地址。
[0044] 结合第一方面的第十二种可能的实现方式,在第十三种可能的实现方式中,在循 环结束后,所述N个节点合并为K个第二节点,所述K个第二节点表征K个线程,1 < K < N, K为整数,所述方法还包括:
[0045] 若第一线程中的第一子节点的生命周期为0,且所述第一子节点的下依赖节点数 量为1,则将所述第一子节点的存储地址分配给第二子节点,所述第二子节点为所述第一线 程中的所述第一子节点的下依赖节点,所述第一线程为所述K个线程中的一个。
[0046] 第二方面,本发明提供一种面向多核处理器的程序划分装置,包括:
[0047] 标记单元,用于从源程序的数据结构中的入口节点开始,依次标记所述源程序的 数据结构中的N个节点的层级,所述入口节点的层级为1,所述入口节点为上依赖节点数量 为〇的节点,1,N为整数;
[0048] 执行单元,用于由Μ = 1开始循环执行S1-S4,直至循环结束,Μ彡N,Μ为整数;
[0049] S1 :若所述Ν个节点中所述标记单元标记的层级为Μ的第一节点的计算量小于预 设的第一计算量阈值,则根据所述第一节点的下依赖节点数量,从所述第一节点的依赖节 点中确定备选节点集,所述备选节点集中的每个备选节点的计算量与所述第一节点的计算 量之和均小于等于预设的第二计算量阈值;
[0050] S2:根据预设规则,从所述备选节点集中确定一个备选节点作为所述第一节点的 目标节点;
[0051] S3 :将所述第一节点和所述第一节点的目标节点合并为第二节点,所述第二节点 的层级与所述第一节点的目标节点的层级相同;
[0052] 34:将11加 1。
[0053] 在第二方面的第一种可能的实现方式中,
[0054] 所述执行单元,具体用于若所述第一节点的下依赖节点数量大于等于1,则从所述 第一节点的下依赖节点中确定备选节点集。
[0055] 结合前述的第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现 方式中,
[0056] 所述执行单元,具体用于若所述第一节点的下依赖节点数量为0,则从所述第一节 点的上依赖节点中确定备选节点集。
[0057] 结合前述的第二方面或第二方面的第一种可能的实现方式至第二种可能的实现 方式中的任一种实现方式,在第三种可能的实现方式中,所述第一节点的下依赖节点数量 为1,所述备选节点集中包括一个备选节点,
[0058] 所述执行单元,具体用于将所述一个备选节点作为所述第一节点的目标节点。
[0059] 结合前述的第二方面或第二方面的第一种可能的实现方式至第三种可能的实现 方式中的任一种实现方式,在第四种可能的实现方式中,所述第一节点的下依赖节点数量 大于1,所述预设规则为备选节点的层级和备选节点的上依赖节点数量,
[0060] 所述执行单元,具体用于根据所述备选节点的层级,从所述备选节点集中确定层 级最小的至少一个备选节点,并根据所述备选节点的上依赖节点数量,从所述层级最小的 至少一个备选节点中确定上依赖节点数量最大的所述一个备选节点,作为所述第一节点的 目标节点。
[0061] 结合前述的第二方面或第二方面的第一种可能的实现方式至第四种可能的实现 方式中的任一种实现方式,在第五种可能的实现方式中,所述第一节点的下依赖节点数量 为〇,所述预设规则为备选节点的上依赖节点数量,
[0062] 所述执行单元,具体用于根据所述备选节点的上依赖节点数量,从所述备选节点 集中确定上依赖节点数量最大的所述一个备选节点作为所述第一节点的目标节点。
[0063] 结合前述的第二方面或第二方面的第一种可能的实现方式至第五种可能的实现 方式中的任一种实现方式,在第六种可能的实现方式中,所述第一节点的下依赖节点数量 为〇,所述预设规则为备选节点的计算量和备选节点的上依赖节点数量,
[0064] 所述执行单元,具体用于根据所述备选节点的计算量,从所述备选节点集中确定 计算量最小的至少一个备选节点,并根据所述备选节点的上依赖节点数量,从所述计算量 最小的至少一个备选节点中确定上依赖节点数量最大的所述一个备选节点,作为所述第一 节点的目标节点。
[0065] 结合前述的第二方面或第二方面的第一种可能的实现方式至第六种可能的实现 方式中的任一种实现方式,在第七种可能的实现方式中,所述程序划分装置还包括:
[0066] 生成单元,用于在所述标记单元从源程序的数据结构中的入口节点开始,依次标 记所述源程序的数据结构中的N个节点的层级之前,采用静态单赋值SSA技术,生成所述源 程序的数据结构,所述源程序的数据结构包括所述N个节点的数据结构,所述N个节点中的 每个节点的数据结构至少包括所述节点的下依赖节点、所述节点的下依赖节点数量、所述 节点的上依赖节点、所述节点的计算量,以及所述节点的生命期。
[0067] 结合第二方面的第七种可能的实现方式,在第八种可能的实现方式中,
[0068] 所述执行单元,具体用于根据所述第一节点的数据结构和所述第一节点的目标节 点的数据结构,确定所述第二节点的数据结构,所述第二节点的数据结构中包括所述第二 节点的层级。
[0069] 结合前述的第二方面或第二方面的第一种可能的实现方式至第八种可能的实现 方式中的任一种实现方式,在第九种可能的实现方式中,
[0070] 所述执行单元,还用于执行S5,
[0071] S5:若所述第一节点的计算量大于等于所述第一计算量阈值,且所述第一节点的 下依赖节点数量大于等于1,则执行S4。
[0072] 结合前述的第二方面或第二方面的第一种可能的实现方式至第九种可能的实现 方式中的任一种实现方式,在第十种可能的实现方式中,
[0073] 所述执行单元,还用于执行S6,
[0074] S6:若所述第一节点的计算量大于等于所述第一计算量阈值,且所述第一节点的 下依赖节点数量为〇,则结束循环。
[0075] 结合前述的第二方面或第二方面的第一种可能的实现方式至第十种可能的实现 方式中的任一种实现方式,在第十一种可能的实现方式中,
[0076] 所述执行单元,还用于将下依赖节点数量和上依赖节点数量均为0的所有节点合 并为所述第二节点。
[0077] 结合第二方面的第七种可能的实现方式,在第十二种可能的实现方式中,所述程 序划分装置还包括:
[0078] 分配单元,用于在所述生成单元采用SSA技术,生成所述源程序的数据结构之后, 为所述N个节点中的每个节点分别分配存储地址。
[0079] 结合第二方面的第十二种可能的实现方式,在第十三种可能的实现方式中,在所 述执行单元执行循环结束后,所述N个节点合并为K个第二节点,所述K个第二节点表征K 个线程,1彡K
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1