一种确定应用程序计算逻辑的方法及装置的制造方法_3

文档序号:9631424阅读:来源:国知局
员可以根据一个应用程序要实现的具体功能采用高级编程语言为该 应用程序编写源代码。例如,编程人员编写源代码所采用的高级编程语言可以为C语言。
[0133] SlOlb、编译一组应用程序中每个应用程序的源代码,得到一组应用程序中每个应 用程序的数据流图。
[0134] 本发明实施例中,对每个应用程序的源代码进行编译得到该应用程序的数据流图 的方法均相同,以下仅以对一个应用程序的源代码进行编译得到该应用程序的数据流图的 具体过程为例,对本发明实施例中编译应用程序的源代码,得到应用程序的数据流图的方 法进行说明:
[0135] 示例性的,本发明实施例中可以采用底层虚拟机(LowLevelVirtualMachine, LLVM)工具对应用程序的源代码进行编译得到应用程序的数据流图。具体的,首先可以采 用LLVM工具链将应用程序的源代码编译为中间代码(IR);其中,IR可以为一个该应用程序 的指令集,且IR中包含了指令集中各个指令之间的依赖关系(use-define),设计人员(用 户)可以通过LLVM的pass模块访问该use-define;然后可以通过LLVM的pass模块中的 子工具将编译得到的IR转化为数据流图,这样便实现了由应用程序的源代码到应用程序 的数据流图的转化。
[0136] 需要说明的是,本发明实施例中采用LLVM工具对应用程序的源代码进行编译得 到应用程序的数据流图的具体方法的详细描述可以参考现有技术中的相关方法,本发明实 施例这里不再赘述。
[0137] S102、通过分析每个应用程序的数据流图,得到至少一个第一公共频繁子图。
[0138] 其中,第一公共频繁子图为所述一组应用程序中至少两个应用程序的数据流图的 公共部分。
[0139] 假设一组应用程序A中包含4个应用程序,分别为怂、4、~和A3,即A= {A。,軋A2,A3}。其中,应用程序A。的数据流图为如图3所示的数据流图G。,应用程序&的数 据流图为如图3所示的数据流图&,应用程序A2的数据流图为如图3所示的数据流图G2, 应用程序A3的数据流图为如图3所示的数据流图G3。即一组应用程序A的数据流图集合 为D= {G0, G2,G3} 〇
[0140] 在图3中,由于有向边a-c不仅包含于数据流图G。,还包含于数据流图Gi、数据 流图G2和数据流图G3,因此可以确定有向边a-c为该组应用程序A的一个频繁子图,即 一个第一公共频繁子图。如图4所示,有向边a-c所表示的第一公共频繁子图记为第一 公共频繁子图gl。
[0141] 在图3中,由于有向边b-c不仅包含于数据流图G。,还包含于数据流图Gi和数 据流图G3,因此可以确定有向边b-c为该组应用程序A的一个频繁子图,即一个第一公共 频繁子图。如图4所示,有向边b-c所表示的第一公共频繁子图记为第一公共频繁子图 g2。
[0142] 在图3中,由于有向边d-a不仅包含于数据流图G2,还包含于数据流图G3,因此 可以确定有向边d-a为该组应用程序A的一个频繁子图,即一个第一公共频繁子图。如 图4所示,有向边d-a所表示的第一公共频繁子图记为第一公共频繁子图g3。
[0143] 在图3中,由于有向边d-b不仅包含于数据流图G2,还包含于数据流图G3,因此 可以确定有向边d-b为该组应用程序A的一个频繁子图,即一个第一公共频繁子图。如 图4所示,有向边d-b所表示的第一公共频繁子图记为第一公共频繁子图g4。
[0M4] 在图3中,由于有向边a-c-b不仅包含于数据流图G。,还包含于数据流图GJP数据流图G3,因此可以确定有向边a-c-b为该组应用程序A的一个频繁子图,即一个第 一公共频繁子图。如图4所示,有向边a-c-b所表示的第一公共频繁子图记为第一公 共频繁子图g5。
[0145] 在图3中,由于有向边(d-a)+(d-b)不仅包含于数据流图G2,还包含于数据流 图G3,因此可以确定有向边(d-a) +(d-b)为该组应用程序A的一个频繁子图,即一个第 一公共频繁子图。如图4所示,有向边(d-a) +(d-b)所表示的第一公共频繁子图记为 第一公共频繁子图g6。
[0146] 在图3中,由于有向边(d-a-c)不仅包含于数据流图G2,还包含于数据流图 G3,因此可以确定有向边(d-a-c)为该组应用程序A的一个频繁子图,即一个第一公共 频繁子图。如图4所示,有向边(d-a-c)所表示的第一公共频繁子图记为第一公共频 繁子图g7。
[0147] 基于上述实例,可以得到一组应用程序A的公共频繁子图集合MD,即至少一个第 一公共频繁子图,该至少一个第一公共频繁子图中包含7个第一公共频繁子图,分别为: gl、 g2、&、g4、&、和g7,艮P MD= {g丄,g2, g3, g4, g5, g6, g7}〇
[0148] 示例性的,本发明实施例中可以采用频繁子图挖掘算法分析一组应用程序中每个 应用程序的数据流图,从该组应用程序中所有应用程序的数据流图中,挖掘出该组应用程 序的所有公共频繁子图(至少一个第一公共频繁子图)。
[0149] 需要说明的是,本发明实施例中进行频繁子图挖掘所采用的公共频繁子图挖掘算 法与现有技术中的公共频繁子图挖掘算法不同。现有技术中一般采用gSpan算法进行无向 图的公共频繁子图挖掘,而考虑到本发明实施例中编译源代码得到的数据流图是有向图, 本发明实施例采用频繁子图挖掘工具CGFSM进行频繁子图的挖掘。其中CGFSM可以将方向 边的方向信息编码到方向边的标记码上,以便于可以进行有向图的公共频繁子图挖掘。例 如对于一条有向边e= (u,v)(即u-v),u是源点,v是目的点,如果顶点u跟v的标记码 分别是a,b,即label(u) =a,label(v) =b,那本发明实施例可以将方向信息编码到边e 上,即label(e) =ab。同理对于有向边f= (V,u)而言,label(f) =ba。可见e跟f方 向相反,虽然e跟f具有相同的顶点,但本发明实施例仍然可以根据e跟f的标记码来解码 出它们实际的方向信息。
[0150] 示例性的,以下给出一个CGFSM的算法流程实例:
[0151]
[0152] 函数CGFSM(D)的接口原型如下所示:
[0153] set〈subgraph>CGFSM(set〈graph>D,unsignedintsigma);
[0154] 其中,在上述CGFSM算法流程中,D为用于表示上述一组应用程序中所有应用程序 的数据流图集合,如D= {6。,匕,62,63};e= (u,v)用于表示集合D中的数据流图的有向边 (即u-v);集合S即为上述一组应用程序中所有应用程序的公共频繁子图集合,S=Md = fe,&5, &,ge,gd,即通过执行上述CGFSM算法流程可以调用CCGFSM返回集合D中数 据流图的所有公共频繁子图。
[0155] S103、根据第一公共频繁子图和每个应用程序的数据流图,计算得到每个应用程 序的流图相似度。
[0156] 其中,一个应用程序的流图相似度用于表征该应用程序与一组应用程序中其他应 用程序的相似性。
[0157] 由于第一公共频繁子图为该组应用程序中至少两个应用程序的数据流图中的公 共部分,因此根据第一公共频繁子图和每个应用程序的数据流图,计算得到的流图相似度 则可以用于表征一组应用程序中一个应用程序与该组应用程序中其他应用程序的相似性。
[0158] S104、根据每个应用程序的流图相似度,得到对该一组应用程序中的应用程序的 分组结果,分组结果包括至少一个子应用组。
[0159] 其中,根据每个应用程序的流图相似度,对一组应用程序中的应用程序进行分组, 可以将相似度较高的应用程序划分至同一子应用组,从而可以得到对该一组应用程序中的 应用程序的分组结果。子应用组为分组结果中的任一个子应用组。
[0160] S105、根据分组结果中任一子应用组中的应用程序的数据流图,确定子应用组中 应用程序的计算逻辑,计算逻辑用于设计子应用组中的应用程序的体系结构。
[0161] 本发明实施例提供的确定应用程序计算逻辑的方法,可以通过分析一组应用程序 中的每个应用程序,得到该组应用程序的公共频繁子图(至少一个第一公共频繁子图);由 于第一公共频繁子图为该组应用程序中至少两个应用程序的数据流图中的公共部分,因此 根据第一公共频繁子图和每个应用程序的数据流图,计算得到的每个应用程序的流图相似 度则可以用于表征一组应用程序中每个应用程序与一组应用程序中其他应用程序的相似 性;然后根据每个应用程序的流图相似度则可以将该组应用程序中的应用程序划分至不同 的子应用组,这样则可以将相似度较高的应用程序划分至同一子应用组,针对各个子应用 组,根据其包含的应用程序的数据流图,确定该子应用组中的应用程序的计算逻辑。
[0162] 通过本方案,不需要采用人工分析的方式对各个应用程序逐个分析,而是根据一 组应用程序中各个应用程序与其他应用程序的相似度对应用程序进行分组,然后确定该子 应用组中的应用程序的计算逻辑,该计算逻辑是分析一个子应用组中的应用程序得到的, 因此采用该计算逻辑设计得到的体系结构则可以适用于该子应用组中的所有应用程序的。
[0163] 由此可见,本方案实现了一组应用程序的自动分析,提高了对应用程序进行分析 的效率;并且可以针对一个子应用组中的所有应用程序确定计算逻辑,从而减少了设计工 作量,并扩大了设计得到的体系结构的适用范围。
[0164] 进一步的,如图5所示,根据第一公共频繁子图和每个应用程序的数据流图,计算 每个应用程序的流图相似度的方法(即S103)具体可以包括:S103a和S103b:
[0165] S103a、确定第一应用程序的匹配顶点个数和第一应用程序的数据流图中的顶点 个数。
[0166] 其中,第一应用程序为一组应用程序中的任一个应用程序,第一应用程序的匹配 顶点个数为至少一个第一公共频繁子图中的所有第一公共频繁子图在第一应用程序的数 据流图中所匹配的顶点个数之和。
[0167] 示例性的,采用表示应用~的数据流图中的顶点个数,如图3所示,应用程序 A。的数据流图G。中的顶点个数为3,即数据流图G。中包含3个顶点;应用程序Ai的数 据流图匕中的顶点个数匕^ 4,即数据流图&中包含4个顶点;应用程序A2的数据流图 G2中的顶点个数为4,即数据流图G2中包含4个顶点;应用程序A3的数据流图G3中的 顶点个数为4,即数据流图G3中包含4个顶点。
[0168] 采用Mg表示出现在应用程序Αι的数据流图Gi中的公共频繁子图组成的集合, 即#0;为数据流图&中包含的所有公共频繁子图的集合,那么应用程序Ai的匹配顶点 。采用表示应用程序~的匹配顶点个数,那么??为集合^^中的所有 公共频繁子图在应用程序4的数据流图Gi中所匹配的顶点个数之和。
[0169] 以应用程序A。为例,由于图3所示的应用程序A。的数据流图G。中包含了如图4所 示的&和g53个第一公共频繁子图,因此可以确定至少一个第一公共频繁子图中的gl、 &和g5与数据流图G。中的3个顶点a、b和c匹配,应用程序A。的匹配顶点个数为3。
[0170] 以应用程序&为例,由于图3所示的应用程序Ai的数据流图Gi中包含了如图4所 示的&和g53个第一公共频繁子图,因此可以确定至少一个第一公共频繁子图中的gl、 &和g5与数据流图Gi中的3个顶点a、b和c匹配,应用程序Ai的匹配顶点个数为3。
[0171] 以应用程序A2为例,由于图3所示的应用程序六2的数据流图G2中包含了如图4所 示的g3、g4、g#Pg74个第一公共频繁子图,因此可以确定至少一个第一公共频繁子图中的 g3、g4、g6和g7与数据流图G2中的4个顶点a、b、c和d匹配,应用程序厶2的匹配顶点个数 为4〇
[0172] 以应用程序A3为例,由于图3所示的应用程序A3的数据流图G3中包含了如图4所 示的g3、g4、g#Pg74个第一公共频繁子图,因此可以确定至少一个第一公共频繁子图中的 g3、g4、g6和g7与数据流图G3中的4个顶点a、b、c和d匹配,应用程序厶3的匹配顶点个数 为4〇
[0173] S103b、计算第一应用程序的匹配顶点个数和第一应用程序的数据流图中的顶点 个数的比值,该比值用于表征第一应用程序的流图相似度。
[0174]示例性的,可以采用以下公式:
[0175]
[0176] 计算第一应用程序(即一组应用程序中的任一个应用程序)的流图相似度。
[0177] 其中,degm?ei用于表示应用~的流图相似度,%用于表示应用Αι的数据流图 中的顶点个数,用于表示应用4的匹配顶点个数。
[0178] 例如,基于如图3所示的数据流图实例和如图4所示的第一公共频繁子图实例,应 用程序A。的匹配顶点个数为3,应用程序A。的数据流图G。中的顶点个数为3,由此可以计 算得到应用程序A。的匹配顶点个数(3)和应用程序A。的数据流图G。中的顶点个数(3)的 比值为1,即应用程序A。的流图相似度为1。
[0179] 应用程序&的匹配顶点个数为3,应用程序Ai的数据流图G 的顶点个数为4, 可以计算得到应用程序4的匹配顶点个数(3)和应用程序Ai的数据流图Gi中的顶点个数 (3)的比值为0. 75,即应用程序流图相似度为0. 75。
[0180] 同理可以计算得到应用程序A2和应用程序A3的流图相似度均为1。
[0181] 可以想到的是,本发明实施例中确定第一应用程序(即上述一组应用程序中的任 一个应用程序)的匹配顶点个数的方法可以包括:遍历至少一个第一公共频繁子图中的每 个第一公共频繁子图;针对每个第一公共频繁子图,采用vflib子图匹配函数确定该第一 公共频繁子图在第一应用程序的数据流图中
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1