程序代码的并行性检测方法和装置制造方法及图纸

技术编号:39520298 阅读:13 留言:0更新日期:2023-11-25 18:58
本说明书实施例中提供了一种程序代码的并行性检测方法和装置

【技术实现步骤摘要】
程序代码的并行性检测方法和装置


[0001]本说明书一个或多个实施例涉及计算机,尤其涉及一种程序代码的并行性检测方法和装置


技术介绍

[0002]并行技术是提升程序性能的重要解决方案之一

然而开发者可能对并行技术并不熟悉,导致开发者在采用高级编程语言编写程序代码的过程中,更加重视程序代码的正确性和可读性等特性,极易忽视程序代码中通过并行技术来提升程序性能的机会

[0003]希望有一种新的技术方案,以期高效发现程序代码中允许采用并行技术的机会


技术实现思路

[0004]本说明书一个或多个实施例中提供了一种程序代码的并行性检测方法和装置

[0005]第一方面,提供了一种程序代码的并行性检测方法,所述方法包括:将程序代码拆分为多个程序单元,并确定所述多个程序单元间的依赖关系;根据所述依赖关系构建依赖关系图,其中包括与所述多个程序单元对应的多个节点;当所述依赖关系图是有向无环图时,根据所述依赖关系图确定所述多个节点各自的深度编号;确定所述多个节点各自的深度范围,其中对于所述多个节点中任意的第一节点,所述第一节点的深度范围所对应的下限值是其深度编号,所述第一节点的深度范围所对应的上限值基于邻居节点的深度编号确定,所述邻居节点直接依赖于所述第一节点;根据所述多个节点各自的深度范围,确定允许并行执行的程序单元集合,所述程序单元集合中包括第一程序单元和第二程序单元,其各自对应的节点的深度范围存在重叠区域

[0006]在一种可能的实施方式中,所述将程序代码拆分为多个程序单元,包括:将程序代码拆分为多个语句;对于所述多个语句中任意的第一语句,确定所述第一语句中是否存在函数调用;如果是,则从所述第一语句中确定出被调用函数,以及依赖所述被调用函数的函数调用原语,并将所述被调用函数和所述函数调用原语均作为程序单元;如果否,则将所述第一语句作为程序单元

[0007]在一种可能的实施方式中,所述确定所述多个程序单元间的依赖关系包括,根据所述多个程序单元各自访问的数据对象,以及所述多个程序单元各自对对应的数据对象的访问类型,确定所述多个程序单元间的依赖关系

[0008]在一种可能的实施方式中,所述确定所述多个节点各自的深度编号,包括:在所述依赖关系图中新增入口节点

出口节点

由所述入口节点指向第二节点的有向边以及由第三节点指向所述出口节点的有向边,获得目标有向无环图,其中所述第二节点在所述依赖关系图中的入度为0,所述第三节点在所述依赖关系图中的出度为0;对于所述目标有向无环图中的任意节点,确定所述节点的深度编号,其是所述入口节点与所述节点间的最长有向路径中所包括有向边的数量

[0009]在一种可能的实施方式中,直接依赖于所述第一节点的至少一个邻居节点各自的
深度编号中的最小值,与所述第一节点的深度范围所对应的上限值之间的差值为
1。
[0010]在一种可能的实施方式中,所述根据所述多个节点各自的深度范围,确定允许并行执行的程序单元集合,包括:根据所述入口节点和所述出口节点的深度编号,确定待查询的深度区间;对位于所述深度区间内的任意第一深度编号,从所述多个节点中查询目标节点,其中所述目标节点的深度范围中包括所述第一深度编号;当所述目标节点的数量不小于1的情况下,将各个所述目标节点各自对应的程序单元加入所述程序单元集合

[0011]在一种可能的实施方式中,所述方法还包括:根据所述程序单元集合确定允许并行执行的第一计算任务和第二计算任务,所述第一计算任务中至少包括所述第一程序单元,所述第二计算任务中至少包括所述第二程序单元

[0012]在一种可能的实施方式中,所述程序单元集合中还包括依赖于所述第二程序单元的第三程序单元;其中,所述第二计算任务中还包括所述第三程序单元

[0013]在一种可能的实施方式中,所述方法还包括:确定所述第一计算任务和所述第二计算任务各自对应的资源消费信息;根据所述资源消费信息,确定是否并行执行所述第一计算任务和所述第二计算任务

[0014]在一种可能的实施方式中,所述方法还包括:当所述依赖关系图是非有向无环图时,将所述依赖关系图拆解为多个强连通分量;从所述强连通分量中确定出平凡强连通分量;对于所述多个程序单元中的任意程序单元,当所述程序单元所对应的节点位于所述平凡强连通分量中的情况下,将所述程序单元加入所述程序单元集合

[0015]在一种可能的实施方式中,所述程序代码采用
Python
编写

[0016]第二方面,提供了一种程序代码的并行性检测装置,所述装置包括:代码拆分单元,配置为将程序代码拆分为多个程序单元;依赖分析单元,配置为确定所述多个程序单元间的依赖关系;构图处理单元,配置为根据所述依赖关系构建依赖关系图,其中包括与所述多个程序单元对应的多个节点;深度确定单元,配置为当所述依赖关系图是有向无环图时,确定所述多个节点各自的深度编号;范围确定单元,配置为确定所述多个节点各自的深度范围,其中对于所述多个节点中任意的第一节点,其深度范围所对应的下限值是其深度编号,其深度范围所对应的上限值基于邻居节点的深度编号确定,所述邻居节点直接依赖于所述第一节点;并行检测单元,配置为根据所述多个节点各自的深度范围,确定允许并行执行的程序单元集合,所述程序单元集合中包括第一程序单元和第二程序单元,其各自对应的节点的深度范围存在重叠区域

[0017]第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序
/
指令,当所述计算机程序
/
指令在计算设备中执行时,计算设备实现第一方面中任一项所述的方法

[0018]第四方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有计算机程序
/
指令,所述处理器执行所述可计算机程序
/
指令,实现第一方面中任一项所述的方法

[0019]通过本说明书一个或多个实施例中提供的方法及装置,基于程序代码所包括多个程序单元间的依赖关系,构建出包含有与多个程序单元对应的多个节点的依赖关系图;当依赖关系图是有向无环图时,可以确定多个节点各自的深度编号,并基于多个节点各自的深度编号确定多个节点各自的深度范围,其中对于多个节点中任意第一节点,其深度范围
所对应的下限值是其深度编号,其深度范围所对应的上限值基于直接依赖于第一节点的邻居节点的深度编号确定;当任意两个节点的深度范围存在重叠区域时,则该两个节点所对应的两个程序单元必然允许并行执行,据此可以根据多个节点各自的深度范围确定允许并行执行的程序单元集合,使得允许并行执行的程序单元被加入到允许并行执行的程序单元集合中

如此,可以更加高效且准确的发现程序代码中允许并行执行的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种程序代码的并行性检测方法,所述方法包括:将程序代码拆分为多个程序单元,并确定所述多个程序单元间的依赖关系;根据所述依赖关系构建依赖关系图,其中包括与所述多个程序单元对应的多个节点;当所述依赖关系图是有向无环图时,确定所述多个节点各自的深度编号;确定所述多个节点各自的深度范围,其中对于所述多个节点中任意的第一节点,所述第一节点的深度范围所对应的下限值是其深度编号,所述第一节点的深度范围所对应的上限值基于邻居节点的深度编号确定,所述邻居节点直接依赖于所述第一节点;根据所述多个节点各自的深度范围,确定允许并行执行的程序单元集合,所述程序单元集合中包括第一程序单元和第二程序单元,其各自对应的节点的深度范围存在重叠区域
。2.
根据权利要求1所述的方法,所述将程序代码拆分为多个程序单元,包括:将程序代码拆分为多个语句;对于所述多个语句中任意的第一语句,确定所述第一语句中是否存在函数调用;如果是,则从所述第一语句中确定出被调用函数,以及依赖所述被调用函数的函数调用原语,并将所述被调用函数和所述函数调用原语均作为程序单元;如果否,则将所述第一语句作为程序单元
。3.
根据权利要求1所述的方法,所述确定所述多个程序单元间的依赖关系包括,根据所述多个程序单元各自访问的数据对象,以及所述多个程序单元各自对对应的数据对象的访问类型,确定所述多个程序单元间的依赖关系
。4.
根据权利要求1所述的方法,所述确定所述多个节点各自的深度编号,包括:在所述依赖关系图中新增入口节点

出口节点

由所述入口节点指向第二节点的有向边以及由第三节点指向所述出口节点的有向边,获得目标有向无环图,其中所述第二节点在所述依赖关系图中的入度为0,所述第三节点在所述依赖关系图中的出度为0;对于所述目标有向无环图中的任意节点,确定所述节点的深度编号,其是所述入口节点与所述节点间的最长有向路径中所包括有向边的数量
。5.
根据权利要求4所述的方法,直接依赖于所述第一节点的至少一个邻居节点各自的深度编号中的最小值,与所述第一节点的深度范围所对应的上限值之间的差值为
1。6.
根据权利要求4所述的方法,所述根据所述多个节点各自的深度范围,确定允许并行执行的程序单元集合,包括:根据所述入口节点和所述出口节点的深度编号,确定待查询的深度区间;对位于所述深度区间内的任意第一深度编号,从所述多个节点中查询目标节点,其中所述目标节点的深度范围中包括所述第一深度编号;当所述目标节点的数量不小于1的情况下,将各个所述目标节点各自对应的程...

【专利技术属性】
技术研发人员:卫思为
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1