掌桥专利:专业的专利平台
掌桥专利
首页

用于解决约束满足问题的基于CAM的随机局部搜索加速器

文献发布时间:2024-04-18 19:58:53


用于解决约束满足问题的基于CAM的随机局部搜索加速器

背景技术

布尔可满足性问题(即,命题可满足性问题,缩写为Satisfiability、SAT或B-SAT)是确定是否存在满足给定布尔公式的解释的问题。例如,SAT问题试图确定给定布尔公式的变量是否可以始终用值真或假替换,使得公式计算结果为真。如果是这种情况,则该公式称为可满足。另一方面,如果不存在这样的赋值,则公式所表示的函数对于所有可能的变量赋值都为假,并且公式不可满足。例如,公式“a AND NOT b”是可满足的,因为值a=真并且b=假将使得公式“a AND NOT b”=真。与之相反,“a AND NOT a”是不可满足的。SAT是第一个被证明属于NP完全的问题。NP复杂度类中的所有问题(其包括广泛的自然决策和优化问题)最多像SAT一样难求解。

用于SAT问题的布尔表达式的一个或多个子句可以被编程为内容可寻址存储器(“CAM”)的行的相应单元。CAM是一种计算存储器,其中存储的数据不是通过其位置而是通过其内容来访问。将字或“标签”输入CAM。CAM在其内容中搜索标签,并且当找到所述标签时,CAM返回已找到的内容所驻留的位置的地址。CAM功能强大、效率高且速度快。然而,CAM也相对较大,耗能巨大,并且相对昂贵。这些缺陷限制了它们的适用性,使它们只能选择其功率、效率和速度是足够高效的应用,基于非易失性存储器技术的CAM已经被用于如模式匹配、人工智能和机器学习等多种应用中的存内计算。

附图说明

参照以下附图根据一个或多个不同的实施例详细地描述本公开。附图仅被提供用于说明性目的,并且仅描绘典型实施例或示例实施例。

图1示出了包括K-SAT验证块和K-SAT优化器的K-SAT求解器的示例。

图2示出了可以用作k-SAT验证电路的示例三态内容可寻址存储器(TCAM)。

图3A至图3B图示了映射到TCAM上的3-SAT否定DNF布尔表达式的示例。

图4示出了可以用于确定每个变量违反约束的次数的示例忆阻器实施的点积引擎。

图5A至图5B示出了根据一个实施例的K-SAT验证和求解技术的示例架构。

图6是根据一个实施例的解决K-SAT问题的方法。

图7示出了根据一个实施例的K-SAT验证和求解技术的示例架构。

图8示出了根据一个实施例的K-SAT验证和求解技术的示例架构。

图9是可以用于实施本发明的示例实施例的各种特征的示例计算部件。

附图并非是穷举的,并且不将本公开限制于所公开的精确形式。

具体实施方式

布尔可满足性问题(即,命题可满足性问题,缩写为Satisfiability、SAT或B-SAT)是确定是否存在满足给定布尔公式的解释的问题。例如,SAT问题试图确定给定布尔公式的变量是否可以始终用值真或假替换,使得公式计算结果为真。如果是这种情况,则该公式称为可满足。另一方面,如果不存在这样的赋值,则公式所表示的函数对于所有可能的变量赋值都为假,并且公式不可满足。例如,公式“a AND NOT b”是可满足的,因为值a=真并且b=假将使得公式“a AND NOT b”=真。与之相反,“a AND NOT a”是不可满足的。SAT是第一个被证明属于NP完全的问题。NP复杂度类中的所有问题(其包括广泛的自然决策和优化问题)最多像SAT一样难求解。

k-SAT问题由变量数量V、文字数量k和子句数量C表征。文字是变量或变量的否定。子句由k个文字组成。合取范式或CNF(特别是每子句具有k=3个文字)通常被认为是SAT公式的规范表示。在CNF形成中,子句是文字(或单个文字)的析取(逻辑OR运算)。公式是子句(或单个子句)的合取(逻辑AND运算)。公式也可以由析取范式(DNF)表示,其中子句是文字的合取并且公式是子句的析取。

CAM可以以允许CAM在断电或者电源以其他方式被移除的情况下仍保留其内容的技术来实施。因此,CAM中存储的数据可以保持并且可以充当“非易失性存储器”。这些技术包括例如阻变存储器(即,忆阻器)、相变存储器、磁阻存储器、铁电存储器和其他电阻式随机存取存储器设备或这些技术的组合。

CAM可以分类为“二态”或“三态”。二态CAM(“BCAM”)对含有二进制位零和一的输入模式进行操作。三态CAM(“TCAM”)对不仅含有二进制位零和一而且含有“X”值的输入模式进行操作(并且存储数据)。“X”有时被称为“无关(don’t care)”或“通配符”。在对TCAM中的输入模式的搜索中,“X”将对零位或一位返回匹配。因此,对输入模式“10X1”的搜索将对“1001”和“1011”都返回匹配。值得注意的是,BCAM和TCAMS都使用二进制值零和一并且对其进行操作。CAM是数字化的,因为数据作为存储器(例如,SRAM、忆阻器等)中的二进制值存储在CAM中并且输入模式由零和一表示。CAM中的每个存储器单元一次处理一个值(0/1或0/1/X),这限制了存储器密度和功率效率。

图1是根据一个实施例的K-SAT验证和求解技术的示例架构。示例架构100包括K-SAT验证块110(即,K-SAT验证电路)和K-SAT优化器115。如图1所示,将输入102施加到K-SAT验证块110。输入102包括公式(例如,CNF表达式或DNF表达式)106和解释(例如,猜想),公式包括多个子句,子句包括k个文字。解释包括一组变量,可以将该组变量施加到K-SAT问题以测试/检查变量是否满足子句。在一个实施例中,如果变量不满足每个子句,则可以对违反子句的数量进行计数。来自K-SAT验证块110的输出103可以包括以下各项中的任一项:布尔值111(例如,表示真或假的值);整数112;以及布尔表达式的布尔向量113。布尔值111可以用于表示是否满足所有子句。整数112可以用于表示解释的违反子句的数量。输出还可以包括表示存储违反子句的TCAM行的索引的布尔向量113。如图1所示,将K-SAT验证块110的输出发送到K-SAT优化器115并由该优化器接收。K-SAT优化器115使用输出来生成更新的(即,新的)解释116,该更新的解释可以作为输入102施加到K-SAT验证块110以比先前输入满足更多子句。

图2示出了可以用作k-SAT验证块110的示例三态内容可寻址存储器(TCAM)200。TCAM 200与k-SAT公式106被一致地编程,使得TCAM 200可以用于针对框(即,TCAM单元210)内的k-SAT公式106测试解释107。TCAM 200是一种内容可寻址存储器(CAM)。

具体地,在如随机存取存储器(RAM)等典型的非CAM计算机存储器中,存储器中存储的内容或数据通过存储器地址进行查找。相比之下,在CAM内,存储器是内容可寻址的。为了搜索CAM,提供了内容而非存储器地址。CAM可以是二态CAM,其可以仅匹配二进制值,如逻辑零和逻辑一。相比之下,TCAM可以基于以下三个输入匹配并且存储值:逻辑零、逻辑一和“无关”状态。

TCAM 200包括输入列线组202A、202B、...、202L,这些输入列线组共同被称为输入列线组202。列线组202的数量等于总的一组变量x

TCAM 200包括行线对204A、204B、...、204S,这些行线对被统称为行线对204。行线对204的数量等于构成图1中的公式106的k-SAT子句的数量S。行线对204分别对应于构成公式106的k-SAT子句。

每个输入列线组202包括搜索线206A或SL,以及反向搜索线206B或

如果存储在行上的每个TCAM单元中的所有值等于作为到SL/和SL否定的输入的给定值,则TCAM对给定行ML返回匹配(真值)。因此,TCAM在每个TCAM单元存储的值的XNOR与其对应输入之间进行逐位AND操作。

每个TCAM单元210可以由忆阻器实施,在这种情况下,TCAM 200是忆阻器实施的TCAM。例如,每个TCAM单元210可以由一个或两个忆阻器实施。这种使用四个晶体管的两个忆阻器实施的TCAM单元的示例描述于L.Huang等人,“ReRAM-based 4T2Rnon-volatileTCAM with a 7x NVM-stress reduction,and 4x improvement in speed word length-capacity for normally-off instant-on filter-based search engines used in big-data processing”,VLSI Symposium,2014年6月,第99-100页。使用三个晶体管的一个忆阻器实施的TCAM的示例描述于M.Chang等人,“A 3T1R non-volatile TCAM using MLC ReRAMwith sub-1ns search time”,2015IEEE International Solid-State CircuitsConference,2015,第1-3页。

TCAM单元210被编程为与公式106中k-SAT子句的变量赋值相对应。如图2所示,输入列(即,输入列线组202)对应于总数V个变量。每个TCAM单元210布置在对应输入列线组202与对应输出行线对204之间。

例如,列线组202B可以对应于总的一组V个变量x

在一个实施例中,TCAM单元包括四个晶体管和两个忆阻器(4T2M)TCAM单元,第一晶体管T1连接到第一数据线SL,并且第二晶体管T2连接到第二数据线SL。第一忆阻器连接到第一晶体管T1,并且第二忆阻器M2连接到第二晶体管T2。第一忆阻器M1和第二忆阻器M2串联连接以形成电阻分压器,将电阻分压器的输出电压(即,公共节点G上的电压)施加到匹配线晶体管T4的栅极,以控制是否切换匹配线晶体管T4以下拉匹配线ML上的电压。第三晶体管T3与第一晶体管T1和/或第二晶体管T2协同工作用于对忆阻器M1、M2进行编程。进一步,利用根据本文所公开的技术的TS忆阻器,可以用三个晶体管实现相同的操作,从而减小单元的大小并降低功耗。

尽管关于基于忆阻器的示例CAMS进行了讨论,但本文所公开的技术不仅局限于基于忆阻器的示例CAM,还直接适用于用传统互补金属氧化物半导体(CMOS)技术实现的基于传统静态随机存取存储器(SRAM)的CAM。传统基于SRAM的CAM单元包括包含存储装置(storage)和存储器电路的共计十六个晶体管。亚阈值泄漏的问题存在于大量晶体管存在并且与公共匹配线相关联的任何情况下。在此环境中亚阈值泄漏的影响将可以被有效存储和搜索的数据字的可能大小限制为仅8位或16位。

假设每个CAM/TCAM行在CAM/TCAM中的每个存储的值的XNOR与其对应输入之间进行逐位AND操作,可以将否定DNF公式化中的k-SAT问题映射到CAM/TCAM上。因此,CAM/TCAM可以用于通过输入解释验证满足哪些子句。

映射包括将布尔表达式编程到CAM中。具体地,DNF布尔表达式的每个子句可以根据映射顺序映射(例如,编程)到多个CAM单元中。因此,CAM的内在AND性质可以用于帮助求解器解决K-SAT问题。例如,因为否定DNF布尔表达式包括由OR连接的多个子句,每个子句(包括由AND分离的多个文字)可以以行映射到CAM,可以分离成多个行而不干扰DNF布尔表达式。一旦DNF表达式映射成行,行内每个变量就可以布置成列,使得可以通过每个列将猜想施加到每个变量。

如图3A至图3B所示,TCAM包括多个列307和行305。否定DNF布尔表达式的每个子句可以根据映射顺序映射到多个CAM单元306的行305上。在一个实施例中,映射顺序包括将包括多个文字的第一子句编程到第一行305A上,并且将包括多个文字的第二子句编程到第二行305B上。多个文字中的每个文字还包括分配给每个非否定文字(例如,z)的第一值,以及分配给每个否定文字(例如,

如图3A所示,将示例性2-SAT问题映射到TCAM。此处,2-SAT问题包括两个文字(即,k=2)、三个变量(即,V=3)和两个子句(即,C=2)。在此示例中,TCAM包括包含两行和三列的单元阵列。每个子句映射到TCAM的行。例如,第一子句映射到第一行305A,并且第二子句映射到第二行305B。此外,TCAM的每列包括变量(例如,1、0或X)。每个子句具有在V个变量之间选择的k个文字。在此示例中,每个子句包括两个文字。非否定文字被编程为对应TCAM单元中的1,并且否定文字被编程为对应TCAM单元中的0。不存在于子句中的变量被编程为对应TCAM单元中的‘X’(无关)。

例如,如图3A所示,表达式:

如图3A进一步所示,每行包括匹配线(ML)。例如,第一行305A中的单元311至313包括第一ML,并且第二行305B中的单元314至316包括第二ML。

求解器将解释的每个变量(即,输入)并联施加到每列,以确定满足哪个子句。满足的子句对应于等于0的ML输出。例如,如图3A所示,如果将解释[1 1 0]作为输入施加,则ML1将返回ML高值(例如,高阶位值1)。此处,ML1将返回ML高值,因为解释的每个变量(即,输入值)与分别存储在单元311、312和313内的值相匹配。另外,ML2将返回ML低值(例如,低阶位值0),因为解释[1 1 0]与存储在单元314、315和316内的值不匹配。因此,不满足第一子句,而满足第二子句。另外,在另一个示例中,如果将解释[0 0 0]作为输入施加,则ML1和ML2将返回ML低值(例如,低阶位值0),因为解释与存储在单元311、312、313、314、315和316内的值不匹配。因为ML(ML1和ML2)都返回低值,所以两个子句都满足。

以下示出了用于图3A的布尔表达式的完整真值表(即,真值表1)。当

真值表1

在替代性实施例中,每个ML的模拟值都通过模拟加法器传递。模拟加法器组合每个ML的模拟值(即,非二进制信号)以计算总和值。返回模拟值的总和作为输出(例如,输出103),该输出可以由K-SAT优化器115用来解决K-SAT问题。

图3B是映射到CAM的三个子句的示例。如先前提及的,每个子句都映射到行,并且每个子句内的每个文字都映射到列。例如,如果将解释[0 1 1]施加在用第一子句

例如,如图3B所示,如果将解释[0 0 1]作为输入施加,则ML1将返回ML低值(例如,低阶位值0),因为解释[0 0 1]与存储在单元311、312和313内的值不匹配。此处,ML2和ML3将都返回ML高值,因为解释的每个变量(即,输入值)与分别存储在单元314、315、316、317、318和319内的值相匹配。因此,在该示例中,满足第一子句,而不满足第二子句和第三子句。以下示出了用于图3B的布尔表达式的完整真值表(即,真值表2)。

真值表2

图4示出了可以用于确定每个变量违反的子句数量的示例忆阻器实施的点积引擎400。点积引擎400具有数量为M的行402A、402B、...、402N,这些行被统称为行402。点积引擎400具有数量N列404A、404B、...、404N,这些列被统称为列404。在行402和列404的每个交叉点406处,点积引擎400包括忆阻器408。每个交叉点406处的忆阻器408更一般地被称为忆阻器元件,每个交叉点406处可能有多于一个忆阻器来存储数据值。

将模拟输入电压iv

列y内的忆阻器408构成向量{G

图5A示出了根据一个实施例的K-SAT验证和求解技术的示例架构500。示例架构500包括三态内容可寻址存储器(TCAM)505、随机多匹配解析器(SMMR)510、计数器525、静态随机存取存储器(SRAM)515和选择块520。如图5所示,TCAM 505、SMMR 510、计数器525、SRAM515和选择块520都分别通过多个总线彼此电耦接,以创建反馈环路。

TCAM 505包括包含TCAM单元构成的列和行的TCAM阵列。用于K-SAT问题的以析取范式(DNF)编写的布尔表达式的一个或多个子句可以编程到TCAM阵列。对用于K-SAT问题的以析取范式(DNF)编写的布尔表达式的每个子句进行编程包括将包括0、1或X的位值编程到每个TCAM阵列内的每个单元,其中,X表示无关值。每个子句的每个出现的变量都映射到行中的相应TCAM单元,并且每个未出现的变量都被编程为无关值。具体地,每个子句中的每个文字的每个否定都分配位值0,每个子句中的每个文字的每个非否定都分配位值1,并且每个子句中的每个缺失变量都分配位值X。TCAM阵列中TCAM单元构成的每行都包括匹配线(ML)。

在一个实施例中,TCAM 505被配置成从选择块520接收输入102。输入102包括作为输入沿列到TCAM阵列的解释107(例如,猜想),该解释包括期望用于求解布尔表达式的一个或多个二进制值。解释107包括期望用于求解二进制表达式的一个或多个二进制变量。此处,TCAM 505使用解释107来测试/检查输入变量是否满足映射子句。将解释107作为输入沿TCAM阵列的列施加,以确定是否满足一个或多个子句。满足的子句对应于等于0的ML输出503。违反的子句(即,不满足的子句)对应于等于1的ML输出503。可以将一个或多个二进制变量施加到K-SAT问题,以测试/检查变量是否满足至少一个子句。例如,在一个实施例中,解释107可以包括作为输入沿TCAM阵列的列被施加以确定是否满足一个或多个子句的猜想。如先前提及的,布尔可满足性问题(即,命题可满足性问题,缩写为Satisfiability、SAT或B-SAT)是确定是否存在满足给定布尔公式的解释的问题。在一个实施例中,选择块520将解释107施加到每一列以确定满足哪个子句。

如先前提及的,TCAM中TCAM单元构成的每行都连接到相应的匹配线(ML)。在一个实施例中,如果解释与存储在行中的值匹配,则该行的ML将返回与真条件相关联的值(例如,ML返回TRUE或高位值1)。如果解释与存储在每行中的值不匹配,则该行的ML将返回与假条件相关联的值(例如,ML返回FALSE或低位值0)。例如,如果存储在行上的每个TCAM单元中的所有值都等于作为对SL/和SL否定的解释(即,输入)的给定值,则TCAM将在给定行的ML上返回匹配(真值)。因此,TCAM在每个TCAM单元存储的值的XNOR与其对应输入之间进行逐位AND操作。

SMMR 510被配置成从TCAM 505接收输出503。此处,SMMR 510使用来自TCAM的输出503随机选择一个或多个违反子句。例如,在一个实施例中,SMMR 510可以随机选择一个违反子句索引。违反子句索引由布尔向量113中的布尔值TRUE表示,该索引对应于TCAM的输出503。满足的(即,非违反)子句索引由布尔向量113中的布尔值FALSE表示,其对应于TCAM的输出503。在一个实施例中,SMMR 510使用输出503随机选择高匹配线(ML)之一。这条随机选择的高ML作为向量通过总线发送到SRAM 515。具体地,一旦SMMR 510随机选择了这条高匹配线,就会在所选匹配线(SML)上返回独热向量。独热向量具有与ML相同但仅包括一个为高的元素的维度。例如,如果输入ML 1、7和8为高,则SMMR将在高ML之一之间随机选择,并返回SML值1作为输出504。所有其他ML将在SML中作为0返回(即,如果1、7和8为高,并且SMMR随机选择ML 7,则SML将对ML7返回值1,并且对ML 1和8返回值0,作为输出504)。因此,SML将仅有一个高值。如以下进一步解释的,每个SML都通信地耦接到SRAM 515的每个字线(WL)。

SRAM 515被配置成从SMMR 510接收输出504。因为每个SML都通信地连接到SRAM515的每个字线(WL),所以SRAM 515可以使用输出504将违反子句之一返回(例如,发送)到选择块520。具体地,SRAM 515存储与TCAM 505上存储的子句相同的子句。如果子句中存在变量,则SRAM分配值1,并且如果子句中不存在变量,则分配值0。例如,对于具有10个变量的3-SAT问题,如果子句包括X

选择块520被配置成从SRAM 515接收输出505。此处,选择块520包括被配置成使用输出505来决定从所选子句改变(即,翻转)哪个变量的电路。在一个实施例中,选择块使用WalkSAT算法来确定要改变哪个变量。在一个实施例中,改变(即,翻转)变量包括创建倒数值,并将变量的倒数值施加到每个子句,以确定违反子句的数量。

WalkSAT算法是局部搜索算法,其将解释施加到设备(例如,TCAM),并改变解释的一个变量以查看输出是否被改变(例如,子句是满足的还是不满足的)。然后,WalkSAT搜索算法基于输出改变解释的一个或多个变量。例如,选择块520可以将WalkSAT搜索算法施加到随机子句,以计算在翻转变量时每个变量违反了多少个子句。每个变量违反的子句数量被称为中断计数。中断计数可以用于表示通过翻转该特定变量而违反了多少个子句。每个变量都存在基于改变(即翻转)结果的中断计数。此处,中断计数包括整数560(例如,数字)作为来自计数器525的输出。整数560包括违反子句的数量。因此,对特别更新的解释116的中断计数包括整数560作为来自计数器525的输出。

在一个实施例中,选择块520基于中断计数改变(即,翻转)变量。具体地,WalkSAT算法包括用随机解释开始、计算未满足的子句以及挑选随机子句。例如,如果变量的中断计数等于零,则翻转该变量。否则,选择块520在翻转具有最小中断计数的变量或翻转随机变量(例如,从0至1的随机值(RND))之间随机选择。如果RND小于超参数(P),则翻转随机变量。否则,翻转具有最小中断计数的变量。例如,如果对3-SAT问题进行编码,则SRAM的输出是具有除了特定子句中的三个值之外的所有为0的向量。选择块520将检查对应于翻转第一变量并查询TCAM 505的三个变量的中断计数,以确定违反(即,不匹配)子句的数量(例如,ML中有多少个0)。然后,选择块520将翻转变量并重复过程。重复该过程以确定哪些变量导致更接近解以及哪些变量导致更远离解。因此,一旦选择块520决定翻转哪个变量,其就生成包括已翻转变量的更新的解释116。然后将更新的解释作为输入102施加到TCAM 505以满足公式的一个或多个子句。

图5B示出了根据一个实施例的K-SAT验证和求解技术的示例架构500。图5B包括CNF

在一个示例中,将解释[0,0,1]作为输入102施加到TCAM。由于第一行的值与解释的值匹配,因此ML1返回值1(例如,[0,0,1]与[0,X,1]匹配,因为X值可以是1或0)。另外,由于第二行的值与解释的值匹配,因此ML2返回值1(例如,[0,0,1]与[X,0,1]匹配,因为X值可以是1或0)。由于ML1和ML2匹配,因此来自TCAM的输出503是向量ML[1,1,0]。一旦一个或多个ML匹配,SMMR 510就会随机选择匹配的ML之一(例如,ML1),并返回对应于随机选择的ML的SML作为独热向量。将独热向量作为输出504发送到选择块520。为了区分随机选择的和非选择的ML,SMMR510将所选匹配线(SML)设定为值1。此处,将SML1设定为1。存储在SRAM 515行中的电耦接到SML1的值作为所选子句返回(例如,第一行值[1,0,1])。然后通过WalkSAT算法使用所选子句以解决K-SAT问题。

图6是根据一个实施例的解决K-SAT问题的方法600。方法600包括将K-SAT问题的呈否定析取范式(DNF)的布尔表达式的每个子句映射到CAM,施加解释,为每个违反子句返回二进制值,随机选择(即,随机地选择)一个或多个违反子句,从SRAM中取得所选违反子句,以及如果违反了至少一个子句,则根据WalkSAT算法改变解释内的一个或多个变量。

在活动602处,方法600包括将K-SAT问题的以否定DNF编写的布尔表达式的每个子句映射到CAM。在一个实施例中,布尔表达式可以被映射到四个晶体管、两个忆阻器的三态CAM(即,4T2M TCAM)。在另一个实施例中,布尔表达式可以被映射到两个晶体管、两个忆阻器的三态CAM(即,2T2M TCAM)。在又另一个实施例中,布尔表达式可以被映射到三个晶体管、一个忆阻器的三态CAM(即,3T1M TCAM)。在又另一个实施例中,布尔表达式可以被映射到六个晶体管、两个忆阻器的模拟CAM(即,6T2M aCAM)。在又另一个实施例中,布尔表达式可以被映射到2个铁电FET的多位CAM(2FeFET mCAM)。在又另一个实施例中,布尔表达式可以被映射到三个终端的aCAM和16个晶体管的TCAM(即,SRAM)。

此处布尔表达式的每个子句被映射到CAM的行。每个子句内的每个文字都映射到其自身相应列。每个文字如果根据文字是否定、非否定还是不存在于子句中的缺失文字进一步分配了位值(二进制0、1或X)。此处,否定文字分配了位值0,非否定文字分配了位值1,并且缺失文字分配了位值‘X’(无关)。此外,每行都电耦接到匹配线(ML)。

在活动604处,方法600包括将解释107作为输入施加到K-SAT验证块110。此处,K-求解器电路101将解释的每个变量(即,输入)并行施加到每列以确定满足哪个子句。满足的子句对应于等于0的ML输出。解释包括一组变量,可以将该组变量施加到K-SAT问题以测试/检查变量是否满足所有子句。如先前提及的,布尔可满足性问题(即,命题可满足性问题,缩写为Satisfiability、SAT或B-SAT)是确定是否存在满足给定布尔公式的解释的问题。因此,CAM/TCAM用于通过输入解释验证满足哪些子句。

在活动606处,方法600包括为每个违反子句返回二进制值。如先前提及的,CAM中单元构成的每行都连接到相应的匹配线(ML)。在一个实施例中,如果解释与存储在每行中的值匹配,则耦接到该行的ML将返回与真条件相关联的值(例如,ML返回TRUE或高位值1)。如果解释与存储在每行中的值不匹配,则耦接到该行的ML将返回与假条件相关联的值(例如,ML返回FALSE或低位值0)。例如,如果存储在行上的每个TCAM单元中的所有值都等于作为对SL/和SL否定的解释(即,输入)的给定值,则TCAM将在给定行的ML上返回匹配(真值)。因此,TCAM在每个TCAM单元存储的值的XNOR与其对应输入之间进行逐位AND操作。

在一个实施例中,如果变量不满足所有子句,则可以对违反子句的数量进行计数。来自K-SAT验证块110的输出103可以包括以下各项中的任一项:布尔值111(例如,表示真或假的值);整数112;以及布尔向量(例如,每个条目表示真或假的向量)113。布尔值111可以用于表示是否满足子句。整数112可以用于表示违反子句的总数。布尔向量113可以用于表示违反子句的索引,其中向量条目之一中的真值意指对应的TCAM行正在存储违反的子句。如图1所示,将TCAM 505的输出发送到SMMR 510并由其接收。

在活动608处,方法600包括确定是否满足或违反子句。在一个实施例中,K-SAT优化器115使用来自K-SAT验证块110的输出103来确定是满足还是违反子句。如果违反子句,则方法包括继续进行到步骤610以更新解释内的一个或多个变量。违反的子句对应于等于1的ML输出。满足的子句对应于等于0的ML输出。如果满足子句(即不违反),则方法结束。

在活动610处,方法600包括随机选择一个或多个违反子句。SMMR 510被配置成从TCAM 505接收输出103。SMMR 510使用来自TCAM的输出103随机选择一个或多个违反子句。在一个实施例中,SMMR 510使用输出103来随机选择高匹配线(ML)之一,以作为向量通过总线发送到SRAM 515。具体地,一旦SMMR 510随机选择了一条高匹配线,就会在所选匹配线(SML)上返回独热向量。独热向量是与ML相同但仅包括一个高值的向量。因此,SML将仅有一个高值。每个SML都电耦接到SRAM 515的每个字线(WL),以将每个SML通信地耦接到每个WL。

在活动612处,方法600包括从SRAM取得所选子句。SRAM 515被配置成从SMMR510接收输出504。因为每个SML都通信地耦接到SRAM 515的每个字线(WL),所以SRAM 515可以使用输出504将违反子句之一返回(例如,发送)到选择块520。具体地,SRAM 515存储与TCAM505上存储的子句相同的子句。如果子句中存在变量,则SRAM分配值1,并且如果子句中不存在变量,则分配值0。由于SML只有一个有效高值,因此该高值将连接到SRAM 515的WL。因此,可以使用SRAM来确定由SMMR随机选择的子句的变量。因此,输出505包括所选子句(例如,一个违反子句)。将输出505发送到选择块520。在一个实施例中,SRAM 515将输出505自身作为违反子句返回(即,发送)。

在活动614处,方法600包括根据WalkSAT算法改变(即,翻转)解释中的一个或多个变量。此处,选择块520被配置成从SRAM 515接收输出505和从计数器525接收整数560。选择块520包括被配置成使用输出505来决定从所选子句改变哪个变量的电路。在一个实施例中,选择块使用WalkSAT算法来确定要改变哪个变量。

WalkSAT搜索算法基于输出505改变解释的一个或多个变量。在一个实施例中,改变一个或多个变量包括创建倒数值,并将变量的倒数值施加到每个子句,以确定违反子句的数量。例如,选择块520可以将WalkSAT搜索算法施加到随机子句,以计算在翻转变量时每个变量违反了多少个子句。如先前提及的,每个变量都存在基于翻转结果的中断计数。因此,中断计数可以用于表示通过翻转特定变量而违反了多少个子句。

在一个实施例中,选择块520基于中断计数翻转变量。具体地,WalkSAT算法从随机解释开始、计算未满足的子句以及挑选随机子句。例如,如果变量的中断计数等于零,则翻转该变量。否则,选择块520在翻转具有最小中断计数的变量或翻转随机变量(例如,从0至1的随机值(RND))之间随机选择。如果RND小于超参数(P),则翻转随机变量。否则,翻转具有最小中断计数的变量。重复该过程以确定哪些变量导致更接近解以及哪些变量导致更远离解。因此,一旦选择块520决定翻转哪个变量,其就生成包括已翻转变量的更新的(即,新的)解释116。然后将更新的解释作为输入102施加到TCAM 505以满足公式的一个或多个子句。

图7示出了根据一个实施例的K-SAT验证和求解技术的示例架构700。示例架构700包括三态内容可寻址存储器(TCAM)505、点积引擎(DPE)710和选择块520。如图7所示,TCAM505、DPE 710和选择块520都分别通过多个总线彼此电耦接,以创建反馈环路。

TCAM 505包括包含行和列的单元阵列。K-SAT问题的以否定DNF编写的布尔表达式的每个子句可以映射到TCAM的行,使得TCAM的每列都包括变量。在一个实施例中,非否定文字在对应的TCAM单元中被编程为1,并且否定文字在对应的TCAM单元中被编程为0。子句中不存在的所有变量在对应的TCAM单元中被编程为‘X’(无关)。每行都电耦接到匹配线(ML)。

在一个实施例中,TCAM 505被配置成从选择块520接收输入102。输入102包括解释107(例如,猜想)。解释包括一组变量,可以将该组变量施加到K-SAT问题以测试/检查变量是否满足所有子句。此处,TCAM 505使用解释107来测试/检查输入变量是否满足映射子句。具体地,选择块520将解释的每个变量(即,输入)并行施加到每列以确定满足哪个子句。不满足的子句对应于ML高值(例如,高阶位值),因为否定DNF被映射,解释中的所有变量都是匹配的。满足的子句对应于ML低值(例如,低阶位值),因为解释中的最后一个变量不匹配。输出703可以包括表示存储了违反子句的TCAM行的索引的布尔向量113。

DPE 710被配置成从TCAM 505接收输出703。DPE 710使用来自TCAM的输出703。在一个实施例中,DPE 710包括图4的DPE 400,其可以用于确定每个变量违反的子句的数量。此处,DPE 710包括可以被编程的电阻器或忆阻器阵列。DPE 710接收输入向量(例如,来自TCAM的ML输出)。DPE 710矩阵可以用于向选择块520返回包括表示每个具体变量违反的子句数量的向量的输出705。例如,如果ML是具有3个元素的向量,则每个元素将物理地连接一行。因此,如图4所示,ML的每个向量元素将连接到行402A、402B、402C。DPE 710中的每行根据矩阵乘法相乘以形成可以返回(即,发送)到选择块520的输出705。如先前提及的,如果违反子句,则每个ML将返回高值(例如,高位值1),并且如果不违反子句,则将返回低值(例如,低位值0)。类似于SRAM515,如果子句中存在变量,则DPE分配值1,并且如果子句中不存在变量,则分配值0。例如,对于具有10个变量的3-SAT问题,如果子句包括X

图8示出了根据一个实施例的K-SAT验证和求解技术的示例架构800。示例架构800包括包含三态内容可寻址存储器(TCAM)505、点积引擎(DPE)710、编码块805、感测块820和选择块520的早停电路801。TCAM 505、DPE 710和选择块520都分别通过多个总线彼此电耦接,以创建反馈环路。

在此实施例中,早停电路801被配置成确定何时停止K-SAT问题解决操作(即,何时完成决定从所选子句中翻转哪个变量的迭代)。如图7可见,使用DPE 710的行进行矩阵多向量乘法。然而,在此实施例中,每行都用额外列中另外的1进行编程。因此,可以获得表示违反子句的总数的整数835而无需新的电路块。例如,通过向DPE 710仅添加一个附加列,可以获得表示违反子句的总数的整数835,从而取代了图5的计数器525的需求。通过对存储器单元施加感测操作,感测块可以确定K-SAT问题求解操作何时应完成。此处,编码块805在每行中编码另外的1作为标记,以指示求解过程的结束。计算每行中DPE 710的另外的(例如,额外的)列不会改变DPE 710的其他列的操作。因此,可以在不改变矩阵多向量乘法的情况下确定违反子句的数量。当整数835等于0时,K-SAT问题被解决,并且电路可以停止。在一个实施例中,感测块820感测0整数835值。例如,如果整数835是0值,则感测块820将确定K-SAT问题已解决并停止电路。在一个实施例中,停止电路包括终止反馈环路的过程。

图9描绘了可以在其中实施本文描述的各种实施例的示例计算机系统900的框图。例如,在一个实施例中,k求解器可以被实施为计算机系统900。计算机系统900包括总线902或用于传送信息的其他通信机制、与总线902耦接以处理信息的一个或多个硬件处理器904。(多个)硬件处理器904可以是例如一个或多个通用微处理器。

计算机系统900还包括耦接到总线902以用于存储要由处理器904执行的信息和指令的主存储器906,如随机存取存储器(RAM)、缓存和/或其他动态存储设备。主存储器906还可以用于存储在执行要由处理器904执行的指令期间的临时变量或其他中间信息。当存储在处理器904可访问的存储介质中时,这种指令使计算机系统900成为被自定义为进行指令中指定的操作的专用机器。

计算机系统900另外包括硬件加速器908。硬件加速器908可以被配置为执行存储在主存储器906、只读存储器(ROM)912和/或存储设备914中的指令(即,编程代码或软件代码),以将在数据结构中体现的一组逻辑规则编码到CAM中。在示例实施方式中,示例性硬件加速器908可以包括多个集成电路,这些集成电路进而可以包括专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他超大规模集成电路(VLSI)。示例性硬件加速器908的集成电路可以被专门优化为以加速的方式进行计算机处理操作的离散子集,或执行计算机可执行指令的离散子集。

CAM可以包括使用包括例如阻变存储器(即忆阻器)、相变存储器、磁阻存储器、铁电存储器、一些其他电阻式随机存取存储器设备(Re-RAM)或这些技术的组合的技术构建的非易失性存储器。更一般地,CAM可以使用允许CAM在断电或以其他方式被移除的情况下保留其内容的技术来实施。因此,CAM中的数据“持久存在”,并且CAM可以充当所谓的“非易失性存储器”。

计算机系统900还包括只读存储器(ROM)912或耦接到总线902的用于存储处理器904的静态信息和指令的其他静态存储设备。如磁盘、光盘或USB拇指驱动器(闪存驱动器)等存储设备914被提供并耦接到总线902,以用于存储信息和指令。

计算机系统900可以经由总线902耦接到如液晶显示器(LCD)(或触摸屏)等显示器916上,以用于向计算机用户显示信息。包括字母数字键和其他键的输入设备918耦接到总线902,以用于将信息和命令选择传送到处理器904。另一种类型的用户输入设备是如鼠标、轨迹球或光标方向键等光标控制件920,以用于将方向信息和命令选择传送到处理器904并用于控制在显示器916上的光标移动。在一些实施例中,与光标控制件相同的方向信息和命令选择可以通过在没有光标的情况下接收触摸屏上的触摸来实施。

计算系统900可以包括用于实施GUI的用户界面模块,该GUI可以作为由(多个)计算设备执行的可执行软件代码被存储在大容量存储设备中。通过举例的方式,此模块和其他模块可以包括部件(如软件部件、面向对象的软件部件、类部件和任务部件)、进程、函数、属性、过程、子例程、程序代码段、驱动器、固件、微代码、电路、数据、数据库、数据结构、表格、阵列和变量。

通常,如本文所使用的词语“部件”、“引擎”、“系统”、“数据库”、“数据存储”等可以是指在硬件或固件中实施的逻辑,或者是指以例如Java、C或C++等编程语言编写的、可能具有入口点和出口点的软件指令集。软件部件可以被编译并链接到可执行程序,被安装在动态链接库中,或者可以用例如BASIC、Perl、或Python等解释性编程语言编写。应当理解的是,软件部件可以从其他部件或从其本身调用,和/或可以响应于检测到的事件或中断而被调用。被配置用于在计算设备上执行的软件部件可以被提供在计算机可读介质上,如光盘、数字视频盘、闪存驱动器、磁盘、或任何其他有形介质,或者可以被提供作为数字下载(并且可以原始地以需要在执行之前安装、解压缩或解密的压缩格式或可安装格式来存储)。这样的软件代码可以部分或全部地存储在执行计算设备的存储器设备上,以用于由计算设备执行。软件指令可以嵌入在如EPROM等固件中。将进一步理解的是,硬件部件可以包括如门和触发器等连接逻辑单元,和/或可以包括如可编程门阵列或处理器等可编程单元。

计算机系统900可以使用自定义硬接线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑装置来实施本文所描述的技术,该固件和/或程序逻辑装置与计算机系统相结合使计算机系统900成为或编程为专用机器。根据一个实施例,本文的技术由计算机系统900响应于(多个)处理器904执行主存储器906中含有的一个或多个指令的一个或多个序列而进行。这种指令可以从另一个存储介质(如存储设备914)读取到主存储器906中。主存储器906中含有的指令序列的执行使(多个)处理器904进行本文所描述的过程步骤。在替代性实施例中,可以使用硬接线电路来代替软件指令或者与软件指令相结合。

如本文所用的术语“非暂态介质”以及类似术语(诸如机器可读存储介质)是指存储使机器以特定方式操作的数据和/或指令的任何介质。这种非暂态介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备914。易失性介质包括动态存储器,诸如主存储器906。非暂态介质的常见形式例如包括软盘、软磁盘、硬盘、固态驱动器、磁带或者任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔图案的任何物理介质、RAM、PROM和EPROM、闪速EPROM、NVRAM、任何其他存储器芯片或者盒、以及这些介质的联网版本。

非暂态介质不同于传输介质但可以与传输介质结合使用。传输介质参与非暂态介质之间的信息传递。例如,传输介质包括同轴电缆、铜线和光纤,包括包含总线902的导线。传输介质还可以采用声波或光波的形式,如在无线电波和红外数据通信期间生成的声波或光波。

计算机系统900还包括耦接到总线902的通信接口922。通信接口922提供耦接到一个或多个网络链路的双向数据通信,该一个或多个网络链路连接到一个或多个本地网络。例如,通信接口922可以是综合业务数字网(ISDN)卡、电缆调制解调器、卫星调制解调器或调制解调器,以向对应类型的电话线提供数据通信连接。作为另一个示例,通信接口922可以是局域网(LAN)卡,以提供到兼容LAN(或与WAN通信的WAN部件)的数据通信连接。还可以实施无线链路。在任何这种实施方式中,通信接口922发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。

网络链路通常通过一个或多个网络向其他数据设备提供数据通信。例如,网络链路可以提供通过本地网络到主计算机或到由因特网服务提供商(ISP)操作的数据设备的连接。ISP进而通过现在通常称为“因特网”的全球包数据通信网络来提供数据通信服务。本地网络和因特网两者都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及网络链路上和通过通信接口922的信号(其将数字数据携带到计算机系统900和从该计算机系统携带数字数据)是传输介质的示例形式。

计算机系统900可以通过(多个)网络、网络链路和通信接口922发送消息和接收数据,包括程序代码。在因特网示例中,服务器可以通过因特网、ISP、本地网络和通信接口922来传输应用程序的请求代码。所接收的代码可以在被接收到时由处理器904执行和/或存储在存储设备914、或其他非易失性存储器中以供稍后执行。

在前面章节中所描述的每个过程、方法和算法均可以在由包括计算机硬件的一个或多个计算机系统或计算机处理器所执行的代码部件中实施并由这些代码部件全部或部分地进行自动化。该一个或多个计算机系统或计算机处理器还可以操作以支持“云计算”环境中相关操作的进行、或者操作作为“软件即服务”(SaaS)。这些过程和算法可以在专用电路中部分地或全部地实施。上文所描述的各种特征和过程可以彼此独立地使用,或者可以以各种方式进行组合。不同的组合和子组合旨在落入本公开的范围内,并且在一些实施方式中可以省略某些方法框或过程框。本文描述的方法和过程也不限于任何特定的顺序,并且与这些方法和过程相关的框或状态可以以适当的其他顺序进行、或者可以并行进行、或者以某种其他方式进行。可以向所公开的示例实施例中添加框或状态或从中移除框或状态。可以将某些操作或过程的进行分发到多个计算机系统或计算机处理器之中,使其不是仅驻留在单个机器内,而是跨多个机器部署。

如本文所使用的,电路可以利用任何形式的硬件、软件或其组合来实施。例如,可以实施一个或多个处理器、控制器、ASIC、PLA、PAL、CPLD、FPGA、逻辑部件、软件例程或其他机制以构成电路。在实施方式中,本文描述的各种电路可以被实施为分立电路,或者所描述的功能和特征可以在一个或多个电路之中部分地或全部地共享。即使可以分别地描述或主张各种特征或功能元件作为单独的电路,这些特征和功能也可以在一个或多个公共电路之间共享,并且这种描述不应要求或暗示需要单独的电路来实施这样的特征或功能。在使用软件来全部或部分地实施电路的情况下,这样的软件可以被实施以与能够执行关于该软件所描述的功能的计算系统或处理系统(如计算机系统900)一起操作。

如本文所使用的,术语“或”可以以包括性或者排他性的意义来解释。此外,不应将对单数形式的资源、操作或结构的描述理解为排除复数。除非另有明确陈述,或者在如所使用的上下文内另有理解,否则条件语言(除其他外,如“可以(can)”、“可能(could)”、“也许(might)”或“会(may)”一般地旨在传达某些实施例包括而其他实施例不包括某些特征、要素和/或步骤。

除非另外明确说明,否则本文档中使用的术语和短语及其变体应被解释为开放式的而不是限制性的。形容词(如“常规(conventional)”、“传统(traditional)”、“正常(normal)”、“标准(standard)”、“已知(known)”和类似含义的术语)不应被解释为将所描述的项限制为给定时间段或在给定时间可用的项,而是应该被理解为涵盖可能现在或将来的任何时候都可用或已知的常规、传统、正常或标准技术。在一些情况下,宽泛词语和短语(如“一个或多个”、“至少”、“但不限于”或其他相似的短语)的存在不应被理解为意指在此类宽泛短语可能不存在的情况下意图或要求更窄的情况。

技术分类

06120116514464