一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于DAG图的流水线编排算法的制作方法

2022-04-25 03:11:03 来源:中国专利 TAG:

一种基于dag图的流水线编排算法
技术领域
1.本发明涉及fpga设计技术领域,具体为一种基于dag图的流水线编排算法。


背景技术:

2.在国防科技大学的工学博士学位论文,“基于可重构的网络报文处理关键技术及快速生成方法研究”中,采用的方法如下:
3.在图1中,(a)表示原始的解析图,(b)至(c)演示了调度某一个节点的操作过程,其中(c)和(d)之间的虚线箭头表示省略针对其他节点相同操作的步骤,而(d)表示最终的调度结果。详细地调度过程如下步骤所述:
4.1.主干选择:我们需要在(a)中找出一条最长的路径。如果解析图存在多条最长路径,任选其中一条路径作为后续操作的基准。
5.2.定位层级:在所有未选入主干中的节点任选一个节点作为操作对象,找出该节点在主干中的所有前驱节点,从所有前驱节点中选取一个处于主干最底层位置的节点,并保留该前驱节点与当前操作对象的依赖关系,删除其他的连接关系。
6.3.合并兄弟节点:将处于兄弟关系的两个节点合并为一个虚拟节点,并将这两个节点的与其前驱和后继节点的关系调整为与这个虚拟节点的关系。结果如图1(c)所示。
7.4.重复:重复上述步骤2和步骤3,直至所有其他节点全部进入主干中。图1(d)显示最终的图优化结果。
8.通过第一个步骤,解析图中主干的节点个数即解析器的流水深度。通过第二个步骤,能够将解析图中的所有节点在流水线中应处的位置确定。而第三步即将所有节点与自己处于同一级流水线的节点合并,实现流水级的设计。解析功能模块调度完成之后,每个输入的报文均能在该流水线中逐级解析。该解析器具有固定的流水级数,所有报文的解析具有恒定的延迟,并且上述方法定位层级步骤,需要遍历dag数据结构的次数,和非主干节点数目相同,以完成非主干节点只保留一个处于主干最底层位置的节点驱动,并删除其他前级驱动关系的操作。当dag图中节点数非常庞大时,将需要更多cpu时间来完成算法。


技术实现要素:

9.(一)解决的技术问题
10.针对现有技术的不足,本发明提供了一种基于dag图的流水线编排算法,解决了上述背景技术中所存在的问题。
11.(二)技术方案
12.为实现上述目的,本发明提供如下技术方案:一种基于dag图的流水线编排算法,包括以下步骤:
13.s1、先序遍历dag:从起点(例如图2的节点a)开始,按先序遍历算法,遍历所有dag节点,将每个节点记录在级数列表中,得到一个级数为n的列表,第m级所包含的节点列表可记录为level[m],其中1≤m≤n;
[0014]
s2、剪枝:从最高层级列表逐级向低层级遍历,当节点已在高层级出现时,删除本级列表中对应节点,即针对重复节点,只保留最大层级中的节点。
[0015]
优选的,所述步骤s1中,起点(例如图2的节点a)记录为第一级节点,步骤s1中在记录时,同一级中重复出现的节点只记录一次。
[0016]
优选的,所述步骤s2的剪枝算法具体如下:
[0017]
定义节点列表nodes_list={}
[0018]

、将最高层级内所有节点添加到节点列表,nodes_list={level[n]},保留最高层级的所有节点level[n];
[0019]

、级数减1,删除本级内已经出现在nodes_list中的节点,即level[n-1]中删除nodes_list中已有节点,并将level[n-1]剩余节点添加到nodes_list,此时nodes_list={level[n],level[n-1]};
[0020]

、重复步骤

,直到完成第1级的处理,此时nodes_list={level[n],level[n-1],...,level[1]};
[0021]
完成剪枝后,呈现最终的pipeline结构:
[0022]
(1)、pipeline级数为n级;
[0023]
(2)、每一级pipeline要完成的功能分别为level[n]、level[n-1]、...、level[1];
[0024]
(3)、同一级有多个节点的,当级pipeline需要并行处理多个节点的功能。
[0025]
(三)有益效果
[0026]
本发明提供了一种基于dag图的流水线编排算法,具备以下有益效果:
[0027]
(1)、本发明提出的基于dag图的流水线编排算法步骤更加简洁高效,使编译器对应功能实现的鲁棒性更强:a、无需选择主干路径;b、剪枝算法简洁高效,无需多次遍历dag。
[0028]
(2)、本发明提出的基于dag图的流水线编排算法可辅助芯片或fpga设计人员,完成从系统方案的dag状态机到硬件流水线的自动转换工作。
附图说明
[0029]
图1为现有技术的技术路线图;
[0030]
图2为本发明具体实例1需要处理的dag示意图;
[0031]
图3为实施例1通过算法转换后原dag图对应的流水线的示意图;
[0032]
图4为本发明提出的一个具体实例2;
[0033]
图5为实例2通过本发明的算法转换后,原dag图对应的流水线的示意图。
具体实施方式
[0034]
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0035]
本发明提供一种技术方案:一种基于dag图的流水线编排算法,具体步骤用以下2个实施例进行说明:
[0036]
实施例1
[0037]
算法输入的dag图如图2所示。
[0038]
s1、先序遍历dag(如图2所示):从起点a开始(a记录为第一级节点),按先序遍历算法,遍历所有dag节点,将每个节点记录在如表1的级数列表中,在记录时,同一级中重复出现的节点只记录一次(表1中为了更清晰的标明每条路径,列出了重复节点);
[0039][0040]
表1:先序遍历后记录的节点列表
[0041]
s2、剪枝:针对表1,从最高层级列表逐级向低层级遍历,当节点已在高层级出现时,删除本级列表中对应节点,即针对重复节点,只保留最大层级中的节点,针对如表1的步骤1结果,剪枝算法具体如下:
[0042]
定义节点列表nodes_list={}
[0043]

、将最高层级内所有节点添加到节点列表,nodes_list={e},保留最高层级的所有节点level[5]={e};
[0044]

、级数减1,删除本级内已经出现在nodes_list中的节点,level[4]中删除e,此时level[4]={f,g},将其余节点添加到nodes_list,此时nodes_list={e,f,g};
[0045]

、重复步骤

,直到完成第1级的处理,此时nodes_list={e,f,g,d,c,b,a},level[1]={a};
[0046]
结果如表2
[0047][0048]
表2:剪枝后的节点列表
[0049]
完成剪枝后,表2即已表明最终的pipeline结构:
[0050]
(1)、pipeline级数为5级;
[0051]
(2)、每一级pipeline要完成的功能分别为a、b、d/c、f/g、e;
[0052]
(3)、同一级有多个节点的,当级pipeline需要并行处理多个节点的功能,例如
pipeline3,需要并行处理d和c,pipeline4,需要并行处理f和g。
[0053]
通过以上算法转换后,原dag图对应的流水线设计如图3所示。
[0054]
实施例2
[0055]
p4编译器中,对包解析功能进行编译时,编译器输入的dag如图4所示。
[0056]
算法步骤s1,先序遍历dag结果如下:
[0057][0058][0059]
算法步骤s2剪枝结果如下:
[0060][0061]
最终的pipeline结构:pipeline级数为7级,每一级pipeline要完成的功能已在对应列表中列出。
[0062]
通过以上算法转换后,原dag图对应的流水线设计如图5所示。
[0063]
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要
素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
[0064]
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献