一种基于图划分的TCAM的分配方法与流程

文档序号:22626681发布日期:2020-10-23 19:35阅读:180来源:国知局
一种基于图划分的TCAM的分配方法与流程

本发明涉及计算机领域,尤其涉及一种基于图划分的tcam的分配方法。



背景技术:

近年来随着许多新技术的涌现,新生代存储器市场不断升温,芯片架构正在与新市场一起发展。不同于传统的静态随机存取存储器(staticrandom-accessmemory,sram),三态内容寻址存储器(ternarycontent-addressablememory,tcam)提供了一种使用指示范围的掩码搜索大型数据集的方法。它允许通过其内容搜索存储的信息,而不是通过其物理地址检索存储器单元。tcam中每个字节除“0”和“1”两个状态之外,还有一种被称为“其他”(即“don’tcare”)的第三种状态。正是tcam的这个第三种状态特征使其既能进行精确匹配查找,又能进行模糊匹配查找,因此其性能远远优于只能进行精确匹配查找的scam。实际上,在使用基于硬件的tcam查找法中,整个表项空间的所有数据在同一时刻被查询,查找速度不受表项空间数据大小影响,每个时钟周期完成一次查找,其平均查找速度是基于sram算法查找的6-128倍。

现有技术中通常采用基于乘法加法原则的图划分方法进行tcam的分配。图1示出了现有技术中基于乘法加法原则的图划分方法的示意图。如图1所示,该方法自上而下地划分由程序执行过程抽象而成的控制流程图,其中乘法原则对应横切方法,是指由原图划分而成的两张子图之间可达,可视为上下两张子图,且上子图没有路径可以越过下子图(如图1(a)中所示)。横切方法需要图中存在汇聚节点,该节点控制所有后继节点。加法原则对应纵切方法,是指由原图划分而成的两张子图之间不可达,可视为左右两张子图(如图1(b)中所示)。纵切方法一方面是为了减小图的规模,一方面是为了给横切提供条件。基于乘法加法原则的图划分方法就是通过递归的方式执行横切、纵切、横切,直至所有子图的规模满足硬件资源的限制,并依据子图部署硬件资源。

然而,基于乘法加法原则的图划分方法分配tcam存在以下问题:首先,该方法采用了递归的划分策略,只考虑如何缩小图的规模,切分的目的仅是为了缩小图的规模,而没有全局视图,因而缺少全局的调度策略。这可能会造成局部子图的规模缩小,但整体效果可能很差的划分结果。其次,由于硬件资源的规格是多种的,不同子图可能需要不同的终止条件来限制,而使用该方法难以通过指标指导划分优化,这会进一步影响了划分结果。此外,横切的前提条件比较严格,需要大量的纵切来为横切创造条件,这可能会使划分结果交叉冗余。低质量的图划分结果会影响tcam的分配结果以及编译器的效率。

因此,亟需一种更加有效的tcam的分配方法以提高编译器的效率。



技术实现要素:

因此,本发明的目的在于克服上述现有技术的缺陷,提供一种基于图划分的tcam的分配方法,包括:将程序执行流程的控制流程图转换为条件变量图;依据效用值贪心地从当前条件变量图的备选节点中选取下一级子图根节点,直至获得最终子图根节点的集合;基于所述最终子图根节点的集合将所述条件变量图划分为若干最终子图;以及依据所述最终子图为所述程序执行流程分配tcam。

可选的,其中,通过以下方式确定所述效用值:当由所述下一级子图根节点所确定的下一级子图的键值中至少有一个大于待分配tcam的规格时,至少基于所有下一级子图的键值之和确定所述效用值;或者当由所述下一级子图根节点所确定的下一级子图的键值均小于或者等于待分配tcam的规格时,至少基于下一级子图所需占用的tcam数量以及tcam的平均资源占有率确定所述效用值。

可选的,其中,当由所述下一级子图根节点所确定的下一级子图的键值中至少有一个大于待分配的tcam的规格时,所述效用值表示为:u=e,其中,e为所述下一级子图中所有子图的键值的总和;或者当由所述下一级子图根节点所确定的下一级子图的键值均小于或者等于待分配的tcam的规格时,所述效用值表示为:u=v*n+ω*p,其中,n为由所述下一级子图的根节点的集合所确定的下一级子图所占用的tcam容器数量,p为单个tcam的平均占用率,p∈(0,1),ν,ω分别为权重系数。

可选的,其中,当由所述下一级子图根节点所确定的下一级子图的键值中至少有一个大于待分配的tcam的规格时,所述下一级子图的键值之和最小时所述效用值最优;或者当由所述下一级子图根节点所确定的下一级子图的键值均小于或者等于待分配的tcam的规格时,所述效用值最大时所述效用值最优。

可选的,其中,当由所述下一级子图根节点所确定的下一级子图的键值中至少有一个大于待分配的tcam的规格时,所述效用值基于所述下一级子图的最小键值确定,所述下一级子图的最小键值由所述下一级子图中节点的最小键值从下往上迭代计算获得,所述节点的最小键值为:其中,et′为满足所述节点中条件的键值,为满足所述节点中条件的子节点的最小键值,ef′为不满足所述节点中条件的键值,为不满足所述节点中条件的子节点的最小键值。

可选的,其中,当所述节点为叶子节点时,所述节点的最小键值为:el=min(et,ef)+1,其中,et为满足所述叶子节点中条件的键值,ef为不满足所述叶子节点中条件的键值。

可选的,其中,所述满足所述节点中条件的键值通过以下方式计算获得:当条件为x>a时,a的二进制编码中0的个数为所述节点的键值;当条件为x==a时,所述节点的键值为1;当条件为x<a时,a的二进制编码中1的个数为所述节点的键值;当条件为x>a且y>b时,所述节点的键值为条件为x>a时节点的键值与条件为y>b时节点的键值之乘积;当条件为x>a或y>b时,所述节点的键值为条件为x>a时节点的键值与条件为y>b时节点的键值之和,其中x、y为变量,a、b为条件值。

可选的,其中,所述依据效用值贪心地从当前条件变量图的备选节点中选取下一级子图根节点,直至获得最终子图根节点的集合包括:(3-1)从所述当前条件变量图选取备选节点;(3-2)贪心地从所述备选节点中选取效用值最优的节点作为下一级子图根节点;(3-3)将由所述下一级子图根节点所确定的下一级子图作为当前条件变量图,重复上述步骤(3-1)-(3-2),直至所述下一级子图的键值均小于或者等于待分配的tcam的规格且达到效用值最优;(3-4)将所获得的全部子图根节点作为最终子图根节点的集合。

可选的,上述方法还包括:当所述备选节点中既包含使所确定的下一级子图的键值中至少有一个大于待分配tcam的规格的下一级子图根节点,又包含使所确定的下一级子图的键值均小于或等于待分配tcam的规格的下一级子图根节点时,贪心地从后者中选取效用值最优的节点作为下一级子图根节点。

可选的,所述方法还包括:基于所述最终子图之间的约束关系分配tcam。

可选的,其中,所述基于所述最终子图之间的约束关系分配tcam包括:至少基于所述子图之间的依赖性为所述子图分配tcam;和/或至少基于所述子图的优先顺序为所述子图分配tcam,包括:当所述子图之间存在依赖性,则上子图优先分配;或者当所述子图之间不存在依赖性,则所述子图中记录条件较小的子图优先分配。

与现有技术相比,本发明的优点在于:

本发明通过将图划分的过程抽象为在条件变量图中选择子图根节点的过程,由于每次选取子图根节点会比较当前所有备选节点,因而具有全局视图,能够从根本上改变传统图划分中切点选择固定以及自上而下的划分方案,消除的冗余划分结果,有效统一算法搜索空间。另一方面,本发明以效用值为基础,根据下一级子图的键值与待分配的tcam的规格的关系将效用值分为两个阶段,并采用贪心策略从备选节点中选择效用值最优的节点作为子图根节点,可以在保证将子图规模减少至硬件允许范围内以满足硬件需求的基础上,大幅提高硬件资源的利用率。

附图说明

以下参照附图对本发明实施例作进一步说明,其中:

图1是示出了现有技术中基于乘法加法原则的图划分方法的示意图;

图2示出了本发明一个实施例中描述单个节点的键值的示意图;

图3示出了一个实施例中基于图划分的tcam的分配方法的流程图;

图4示出了一个实施例中将控制流程图转换为条件变量图的示意图;

图5示出了一个实施例中依据效用值获得最终子图根节点的集合方法;

图6示出了一个实施例中计算子图最小键值的示意图;

图7示出了一个实施例中依据效用值从备选节点中选取子图根节点的示意图;

图8示出了branchtcam中与tcam相关的硬件结构;

图9示出了一个实施例中依据子图分配tcam的示意图。

具体实施方式

为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

在tcam的芯片架构中,通常可以基于tcam的特性快速匹配程序执行流程,将程序执行过程抽象成一张控制流程图(cfg),并通过把cfg上的资源映射到tcam上来解决硬件资源的分配。然而,由于tcam资源有限,往往无法一次性将整张cfg上的资源部署在同一个tcam上,因此需要将cfg划分成多张子图,为每张子图分别单独分配硬件资源,最后由硬件将结果合并。因此,有关tcam的分配问题实际上可以看作图划分问题。

图划分本质上是将一张图从某个(或某几个)节点处断开,分成两个(或两个以上)子图,该节点可以看作是子图的根节点。因此图划分问题可以抽象为在备选节点中选择子图根节点的集合的过程,其中,子图可以定义为子图根节点以及该根节点所控制的所有后继节点的集合,并且子图的根节点不属于其他任何同一级子图的后继节点,备选节点是指在当前子图集合中,满足上述子图定义的下一级子图根节点的集合。

根据所得子图的键值与待分配tcam的规格之间的关系,可以将图划分的过程分为两个阶段,并在不同阶段采用不同的效用值的计算方式。在第一阶段,由图划分所得到的下一级子图中至少存在一个子图的键值大于待分配的tcam规格,此时可以基于下一级子图的键值之和确定效用值。这是为了促使将子图规模减少至tcam规格容许的范围内,以保证分配的准确性。这种情况下,可以设定下一级子图的键值之和越小,则效用值越优。在第二阶段,由图划分所得到的下一级子图的键值均小于或者等于待分配的tcam规格,此时可以基于下一级子图所需占用的tcam的数量以及tcam的利用率确定效用值。这是为了提高tcam利用率。在这种情况下,可以设定下一级子图所需占用的tcam的数量越少且每个tcam的利用率越高,则效用值越优。通过以效用值为基础选取子图根节点,能够在确保将划分所得的子图规模减少至硬件允许范围内以满足tcam规格的基础上,提高硬件资源的占有率,可以

如上所述,当图划分所得到的下一级子图中至少存在一个子图的键值大于待分配的tcam规格,效用值由下一级子图的键值之和所确定。子图的键值是指表示该子图的编码的数量,是基于图中节点的键值计算获得。而节点的键值由节点所表示的条件转换而来。条件变量图中的节点包括左右两个分支,各分支的键值分别表示满足该节点中条件的编码数量和不满足该节点中条件的编码数量。节点中的条件值可以通过一个无符号二进制编码来表示。

例如,可以用不同的二进制编码来表示x>a,x<a,x==a三种类型的条件,其他条件最终都分解为这三种类型:如,x>=a可转化为x>a-1;x<=a可转化为x<a+1;x!=a可转化为x==!a,其中x、y表示程序中的变量,a、b表示条件值。满足或不满足条件的二进制编码的数量即为代表该条件的节点的左右分支的键值。

当条件为x>a时,a的二进制编码中“0”的个数为满足该条件的编码数量。这是由于tcam中有“其他”这种第三种状态,因此可以将任何小于或者等于a的数用“*”表示。具体来说,可以从右到左扫描a的二进制编码,找到第一个“0”的位置,将其变为“1”,并将从该位置向右的所有编码全部置为“*”,即可得到一种编码;然后从右到左扫描a的二进制编码,找到第二个“0”的位置,将其变为“1”,并将从该位置向右的所有编码全部置为“*”,即可得到第二种编码;如此重复以上操作,直至找到a的二进制编码中最后一个“0”,将其变为“1”,并将从该位置向右的所有编码全部置为“*”,即可得到第n种编码。因此,满足该条件的编码数量也可以视为a的二进制编码中“0”的个数。例如,假设条件为x>5,5的二进制编码为00101,将该编码从右到左的第一个“0”(从右到左第二位)变成“1”可得到编码00111,将从该位置(从右到左第二位)向右的所有编码全部置为“*”可得到编码0011*,即得到第一种编码;然后将该编码从右到左的第二个“0”(从右到左第四位)变成“1”可得到编码01101,将从该位置(从右到左第四位)向右的所有编码全部置为“*”可得到编码01***,即得到第二种编码;最后将该编码从右到左的第三个“0”(从右到左第五位)变成“1”可得到编码10101,将从该位置(从右到左第五位)向右的所有编码全部置为“*”可得到编码1****,即得到第三种编码。由此可知,满足条件x>5的编码数量为3,即满足条件x>5的编码数量相当于5的二进制编码(即00101)中“0”的个数。

当条件为x==a时,满足该条件的编码数量为1,该编码即为a的二进制表示。

同理,当条件为x<a时,a的二进制编码中1的个数为满足该条件的键值。基于tcam的特性,可以将任何大于或者等于a的数用“*”表示。具体来说,可以从右到左扫描a的二进制编码,找到第一个“1”的位置,将其变为“0”,并将该位置向右的所有编码全部置为“*”,即可得到一种编码。重复以上操作,直至编码中没有“0”。因此,满足该条件的编码数量相当于a的二进制编码中“1”的个数。

对于复合条件,当条件为x>a且y>b时,满足该复合条件的编码数量为:满足条件x>a时的编码数量与满足条件为y>b时的编码数量的乘积;当条件为x>a或y>b时,满足该复合条件的编码数量为:满足条件x>a时的编码与满足条件y>b时的编码数量之和。

图2示出了一个实施例中描述单个节点的键值的示意图。节点中的条件值a可以通过一个5bits的无符号二进制编码表示。节点的左右两个分支分别表示满足节点中的条件和不满足节点中的条件的编码数量。如图2(a)所示,节点a中的条件为x<=6,满足该条件可以表示为x<7,其中7的二进制编码为00111,其中,“1”的个数为3,因此,满足条件x<=6可以由3种编码表示,分别是00110,0010*和000**;不满足该条件可以表示为x>6,其中,6的二进制编码为00110,因此,不满足条件x<=6也可以由3种编码表示,即00111,01***和1****。因此,节点a左右两个分支的键值分别为3和3。又如图2(b)所示,节点b中的条件为x==6时,满足该条件的编码只有一个,即6的二进制编码;而不满足该条件,即x>6或者x<6可以由5种编码表示,即00111、01***、1****、0010*和000**。因此,节点b左右两个分支的键值分别为1和5。

基于上述研究,本发明提供了一种基于图划分的tcam的分配方法,该方法把图划分的过程抽象为在条件变量图中选择子图根节点的过程,通过迭代的方式以效用值为基础选取下一级子图根节点,并依据所获得的最终子图根节点的集合分配tcam资源。

图3示出了本发明一个实施例中基于图划分的tcam的分配方法的流程图。如图3所示,该方法包括以下步骤:

s310,将程序的控制流程图转换为条件变量图。

控制流程图(cfg)中包括两种节点,一种是带条件的双出节点,其左右两支分别连接不同的子节点;另一种是不带条件的单出节点,即只有一个子节点。由于本发明中的图划分以效用为基础,子图规模取决于子图的键值(即图中条件的编码数量),因此只有带条件的节点才会影响编码,而不带条件的节点没有影响。因此,可以将cfg图进行处理,抽象成一张条件变量图。通过将cfg转换为条件变量图,可以在不影响划分结果的情况下,简化图结构,便于进行图划分。

图4示出了一个实施例中将控制流程图转换为条件变量图的示意图。如图4所示,保留cfg中带条件的节点(即双出节点,例如bb2、bb5、bb6、bb10),同时删除不带条件的节点(即单出节点,例如bb1、bb3、bb4、bb7、bb8、bb9、bb11、bb12),即可形成与该控制流程图对应的条件变量图。条件变量图中的节点用c1、c2、c3、c4以及c5来表示。由于条件变量图和原图的路径一一对应,容易将条件变量图划分结果还原为cfg图划分结果。

s320,依据效用值贪心地从当前条件变量图的备选节点中选取下一级子图根节点,直至获得最终子图的根节点的集合。

在一个实施例中,可以采用迭代的方式贪心地从当前条件变量图的备选节点中选取效用值最优的节点作为下一级子图的根节点,直至获得最终子图的根节点的集合。

图5示出了一个实施例中依据效用值获得最终子图根节点的集合方法。

如图5所示,该方法包括:

s510,从当前条件变量图中选取备选节点。

如上所述,子图可以定义为子图根节点以及该根节点所控制的所有后继节点的集合,并且子图的根节点不属于其他任何同一级子图的后继节点。备选节点是指在当前子图集合中,满足上述子图定义的下一级子图根节点的集合。

s520,从备选节点中选取一个节点作为下一级子图的根节点。

可以依次从备选节点中分别选取不同节点作为下一级子图的根节点。选取一个子图根节点就相当于划分出一个子图。

s530,计算由该节点确定的下一级子图的效用值。

如上所述,效用值的计算方式可以根据图划分过程中的不同阶段分为两种。

在一个实施例中,当由下一级子图根节点所确定的下一级子图的键值至少有一个大于待分配的tcam的规格时,效用值可以是所有下一级子图的键值之和,效用值公式如下:

u=e(1)

其中,e为所述下一级子图中所有子图的键值的总和。

在这种情况下,下一级子图的键值之和越小,则效用值越优。在一个实施例中,可以使用贪心算法从当前子图根节点集合中选出子图键值最小的节点作为下一级子图根节点,使得下一级子图的键值之和越小,从而实现效用值最优。

在一个实施例中,当两种图划分的子图键值之和相同时,还可以为下一级子图的键值设置权重,并设置划分平衡参数f(α),f(α)的取值范围为(0,1),效用值公式如下:

u=μ*e+f(α)(2)

其中,e为所述下一级子图中所有子图的键值的总和,μ为权重系数,f(α)为划分平衡参数,f(α)∈(0,1),当f(α)为0.5时,表示平均划分。

在一个实施例中,可以将子图的最小键值作为子图的键值来计算效用值。子图的最小键值,即子图根节点的最小键值,是由子图中的节点的最小键值从下往上迭代计算得出的。子图中的节点包括叶子节点和父节点。对于叶子节点,在实际编码中,不需要记录一个节点左右两支的全部编码,而只需要记录其中一支的编码,再附加一个编码表示不满足节点中的条件,以此进行条件判断。叶子节点的最小键值可以通过该节点左右两个分支中的最小的编码数量加1表示。例如在图2(a)中,条件x<=6有3种编码,x>6也有3种编码,但是判断该条件不需要记录全部的6个编码,而只需要记录任意一支的全部编码再加上一个表示另外一支的三个编码即可。因此节点a的最小键值为4(即3+1=4)。叶子节点最小键值可以用下列公式表示:

el=min(et,ef)+1(3)

其中,et为满足该叶子节点中条件的键值,ef为不满足该叶子节点中条件的键值。

对于父节点(包括根节点),在实际编码中,不需要记录满足该父节点中条件及其子节点(即其中一支)的全部编码以及不满足该条件及其子节点(即另外一支)的全部编码,而只需记录其中一支及其子节点的编码数量以及另一支子节点的最小键值。当另一支没有子节点时,其子节点的最小键值为1。父节点的最小键值可以用下列公式表示:

其中,et′为满足该节点中条件的键值,为满足该节点中条件的子节点的最小键值,ef′为不满足该节点中条件的键值,为不满足该节点中条件的子节点的最小键值,当没有满足或不满足该节点中条件的子节点时,为1。

图6示出了一个实施例中计算子图最小键值的示意图。如图6所示,以图4中的条件变量图为例,除去子图的出口节点c5,共有c1、c2、c3、和c4四个节点,其中c1为子图的入口节点(即子图根节点),,c2、c4为叶子节点,c3为父节点。该图的最小键值为由图中的节点的最小键值从下往上迭代计算得出的,具体包括:

(1)计算叶子节点的最小键值

对于叶子节点c4,其左右分支的键值分别为5和1,代入公式(3)

可得c4的最小键值为2;

对于叶子节点c2,其左右分支的键值分别为3和7,代入公式(3)

可得c2的最小键值为4。

(2)从下往上迭代,依次计算各级父节点的最小键值

对于父节点c3,其左分支的键值为1,该左分支下没有子节点,其右分支的键值为3,该右分支下子节点c4的最小键值为2,代入公式(4)可得c3的最小键值为3。

(3)计算子图根节点的最小键值

对于子图根节点c1,其左分支的键值为6,该左分支下子节点c2的最小键值为4,其右分支的键值为5,该右分支下子节点c3的最小键值为3,代入公式(4)可得c1的最小键值为19。

因此,图6中子图的最小键值为19。

在一个实施例中,当由所述下一级子图根节点所确定的下一级子图的键值均小于或者等于待分配的tcam的规格时,效用值可以表示为:

u=v*n+ω*p(5)

其中,n为由所述下一级子图的根节点确定的下一级子图所占用的tcam容器数量,p为单个tcam的平均占用率,p∈(0,1),ν,ω分别为权重系数。

此时,下一级子图所需占用的tcam数量越少且单个tcam的资源占有率越高,则效用值越优。在一个实施例中,还可以根据实际情况设定公式(5)中的权重系数,使得所得效用值越大则效用值越优。

s540,当该节点确定的下一级子图的效用值优于同级迭代中记录的最优效用值时,更新最优效用值记录,并记录该节点。

s550,撤销该节点作为根节点,并重复步骤s520-s540,直至遍历备选节点所有节点。

s560,将效用值最优的节点设置为下一级子图的根节点,并将该根节点确定的下一级子图作为当前条件变量图。

由于每次选取子图根节点会比较当前所有备选节点的效用值,选择当前效用值最优的节点作为子图根节点,因而具有全局视图,能够从根本上改变传统图划分中切点选择固定以及自上而下的划分方案,不需要记录任何冗余,有效统一算法搜索空间。

图7示出了一个实施例中依据效用值从备选节点中选取子图根节点的示意图。如图7所示,当前条件变量图中根节点为c1,当前条件变量图中备选节点为{c1,c2,c3,c4,c5,c6,c7,c8}。通过贪心算法,从备选节点中选取效用值最优的节点c6作为下一级子图的根节点,将其划分为两张子图,其中,上子图以c1为根节点,包含{c1,c2,c3,c4,c5};下子图以c6为根节点,包含{c6,c7,c8}。可以以上子图或下子图作为当前条件变量图采用上述步骤进行再次图划分。

在一个实施例中,当同级迭代的备选节点中既包含使所确定的下一级子图的键值中至少有一个大于待分配tcam的规格的下一级子图根节点,又包含使所确定的下一级子图的键值均小于或等于待分配tcam的规格的下一级子图根节点时,从后者中选取效用值最优的节点作为下一级子图根节点。

s570,重复步骤s510-s560,直至满足终止条件。

终止条件是当指由下一级子图根节点所确定的下一级子图的键值均小于或等于待分配的tcam的规格时,如果继续进行图划分已无法实现在不大幅增加tcam数量的前提下进一步提高tcam资源占有率,即不再优化效用值时,则停止划分下一级子图。在一个实施例中,当所得的下一级子图的效用值不再增加时,当前获得的所有子图根节点的集合为所述最终子图根节点的集合。

若获得的子图集合没有满足终止条件,即继续进行图划分仍可以优化效用值,则从当前子图中重新选取备选节点,重复上述步骤s510-s560,直至满足终止条件。

s330,基于最终子图根节点的集合将条件变量图划分为若干最终子图。

如上所述,子图可以由其根节点唯一确定,因此可以基于最终子图根节点以及该根节点的所有后继子节点,将条件变量图划分为若干最终子图。

s340,依据所述最终子图为所述程序执行流程分配tcam。

由于获得的最终子图的键值均小于tcam的规格,因此可以依据最终子图为相应的程序执行流程分配tcam。

在一个实施例中,在依据最终子图分配tcam时,还需要考虑最终子图之间约束关系。

图8示出了branchtcam中与tcam相关的硬件结构。如图8所示,整个硬件由m个tcam容器组成,每个tcam容器中能存放若干个tcam,这些tcam可以具有不同的规格,能够存放不同数量的编码(例如64、32、16)。在同一个容器中,所有tcam共享同一个关键字,作为该容器中tcam的索引。在硬件中,存在两级的优先匹配。在tcam中,排在前面的表项具有更高的优先级,在同一个tcam中如果存在多个表项命中冲突,tcam给出的命中结果是优先级最高的表项的结果。在tcam容器中,排在前面的tcam具有更高的优先级,在同一个tcam容器中如果多个tcam的表项命中冲突,tcam容器会选择优先级最高的tcam的命中结果。

由以上描述可知,处于同一路径的子图不能放在一个tcam中,因为一个tcam只会出一个结果,同一路径的子图放在一个tcam中会导致该路径无法命中。此外,子图之间可以通过规定优先序来减少额外信息的记录。在我们的方法中,需要记录的约束有两个,分别是子图依赖和子图优先序,子图依赖用于保证匹配不会丢失部分路径;子图优先序用于保证不会有误命中。

在一个实施例中,可以基于子图之间的依赖性为其分配tcam。子图之间的依赖性是指两张子图之间可达。这意味着两个子图处于同一条路径上,因此不能分配在同一个tcam中。在一个实施例中,还可以基于子图之间的优先顺序为其分配tcam。子图之间的优先顺序是指两张子图在分配tcam资源时存在先后关系。这是由于为了减小子图规模,即子图的键值,在划分的子图并没有保留原图的全部条件,而是选择了部分子图记录条件用于区分不同子图。因此,可以将子图之间的优先顺序设为:当两张子图可达时(即存在依赖性),则上子图优先与下子图;当两张子图不可达(即不存在依赖性),则通过比较两张子图约束关系,选择记录条件较小的子图优先分配硬件资源。这样做的目的是为了能够根据图结构选择存在约束关系的子图,进而给出一种优化的划分方案。

图9示出了一个实施例中依据子图分配tcam的示意图。如图9所示,在为子图分配tcam时,首先初始化每个tcam的规格,然后按子图优先级顺序依次分配tcam,每次分配前需要检查tcam中已有的子图与待分配的子图之间是否存在依赖性,若有则不能分配在该tcam中。例如一张条件变量图被划分为一级子图i、一级子图ii和一级子图iii,其中一级子图ii又被划分为二级子图ii.i,二级子图ii.ii和二级子图ii.iii;一级子图iii又被划分为二级子图iii.i和二级子图iii.ii。由于二级子图ii.i、二级子图ii.ii和二级子图ii.iii之间具有依赖性,此三张子图不能分配在同一个tcam中,此外,由于上图优于下图,故其优先顺序为图ii.i>图ii.ii>图ii.iii。图iii.i和图iii.ii之间不具有依赖性,但图iii.i的记录条件小于图iii.ii,因此其优先顺序为图iii.i>图iii.ii。最后输出的tcam列表中记录了每个tcam所存储的子图,其中,tcama存储有图i、图ii.i和图iii.i;tcamb中存储有图ii.ii和图iii.ii;tcamc中存储有图ii.iii和图iii.i。

基于上述实施例可以看出,本发明以效用基础,直接向划分结果看齐,把问题抽象为在条件变量图中选择子图根节点的过程。该方法面向全局资源,以迭代的方式进行划分,每次迭代只选择一个节点,每次迭代都在选择节点时考察备选节点的效用值,并选取效用值最优的节点成为新的根节点。不断迭代,最终完成图划分。该方法可以在保证划分正确的前提下大幅提升划分效果和消除划分结果的冗余。

最后所应说明的是,以上仅用以说明本发明的技术方案而非限制。尽管对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1