本发明属于计算机技术领域,具体涉及一种sat求解器,尤其涉及一种基于流水线执行策略的硬件sat求解器。
背景技术:
sat问题中(satisifiabilityproblem,布尔可满足性问题),给定一组有限变元集合x={x1,x2,…,xn},xn可以被赋值为真(1)或假(0),文字li是变元xi或其否定
sat问题被史蒂文·库克(stevencook)于1971年证明为np完全问题,这意味着可以在多项式时间内非常快速地求解,并且在多项式时间内,np类的所有其他问题都可归结为sat问题。求解sat问题最直接、粗暴的办法是枚举法,即尝试输入变元的所有可能赋值,然而,这种算法的求解时间会随着变元数量的增加呈指数增长。
在过去的几十年里,解决sat问题的算法,也称为sat求解器,取得了巨大的进步。十多年前认为无法求解的问题,现在可以用先进的sat求解器在几秒钟内得以解决。现代sat求解器可以集成更为先进的求解技术,通过这些技术开发的软件求解器甚至能够解决多大数百万个变元的难的sat问题。
当sat求解器试图解决一个问题时,它会对变元进行完全或部分赋初值(分别用α和β表示)。对公式
现有的硬件sat求解器大部分都是按顺序执行的,多个步骤执行时,前一步骤完成后往往需要多个时钟周期来等待处理下一个步骤,这就产生的延迟,带来了大量的时钟开销,系统的吞吐率较低。
技术实现要素:
本发明要解决的技术问题是针对背景技术中所涉及到的缺陷,提供一种基于流水线执行策略的硬件sat求解器,在硬件sat求解器求解sat问题过程中采用流水线策略,提高了硬件系统的工作时钟频率和吞吐率,增强了求解器的处理能力。
为解决上述技术问题,本发明采用以下技术方案:
一种基于流水线执行策略的硬件sat求解器,包括预处理模块、输出模块和子句搜索及变元翻转模块。
预处理模块,用于产生cnf公式变元的初始赋值、提取当前赋值下的不可满足子句以及所述cnf公式的子句和变元信息。
输出模块,用于输出所述cnf公式是否是可满足的。
子句搜索及变元翻转模块,用于按照预设的最大指定次数内以第一线程、第二线程、第三线程和第四线程按流水线执行策略同步循环执行搜索不可满足子句并按照一定概率对子句变元进行翻转并存储变元翻转后不可满足的子句,并将求解结果发送给输出模块。
进一步地,硬件sat求解器还包括:地址映射表、子句映射表、变元映射表和fifo树。地址映射表用于记录子句数据存储在片上存储器中的地址;子句映射表用于存储子句数据;变元映射表用于存储初始赋值的子句以及变元翻转后的子句;fifo树,用于存储变元翻转后不可满足的子句。
进一步地,子句搜索及变元翻转模块按照预设的最大指定次数内以第一线程、第二线程、第三线程和第四线程按流水线执行策略同步循环执行搜索不可满足子句并按照一定概率对子句变元进行翻转并存储变元翻转后不可满足的子句,具体包括:
一个循环周期为十二个时钟周期;
第一线程在第一个时钟周期内,执行选择所述fifo树中第一不可满足子句并根据所述第一不可满足子句的第一变元读地址映射表。
第一线程在第二个时钟周期内,执行根据所述第一不可满足子句的第一变元读子句映射表,并执行根据所述第一不可满足子句的第二变元读地址映射表。
第一线程在第三个时钟周期内,执行根据所述第一不可满足子句的第一变元读变元映射表,并执行根据所述第一不可满足子句的第二变元读子句映射表,并执行根据所述第一不可满足子句的第三变元读地址映射表。
第一线程在第四个时钟周期内,执行评估根据所述第一不可满足子句的第一变元读变元映射表获得的子句并暂存评估为不可满足的第二不可满足子句,并执行根据所述第一不可满足子句的第二变元读变元映射表,并执行根据所述第一不可满足子句的第三变元读子句映射表。
第一线程在第五个时钟周期内,执行计算所述第二不可满足子句的第一变元的break-value值并排序,并执行根据所述第一不可满足子句的第二变元读变元映射表获得的子句并暂存评估为不可满足的第三不可满足子句,并执行根据所述第一不可满足子句的所述第三变元读变元映射表。
第一线程在第六个时钟周期内,执行计算所述第二不可满足子句的第二变元的break-value值并排序,并执行计算所述第三不可满足子句的第一变元的break-value值并排序,并执行根据所述第一不可满足子句的第三变元读变元映射表获得的子句并暂存评估为不可满足的第四不可满足子句。
第一线程在第七个时钟周期内,执行计算所述第二不可满足子句的第三变元的break-value值并排序,并执行计算所述第三不可满足子句的第二变元的break-value值并排序,并执行计算所述第四不可满足子句的第一变元的break-value值并排序,并执行根据概率选择变元进行翻转并选择翻转后的不可满足子句。
第一线程在第八个时钟周期内,执行计算所述第三不可满足子句的第三变元的break-value值并排序,并执行计算所述第四不可满足子句的第二变元的break-value值并排序,并执行根据概率选择变元进行翻转并选择翻转后的不可满足子句。
第一线程在第九个时钟周期内,执行计算所述第四不可满足子句的第三变元的break-value值并排序,并执行根据概率选择变元进行翻转并选择翻转后的不可满足子句。
第一线程在第十个时钟周期内,执行根据概率选择变元进行翻转并选择翻转后的不可满足子句,并收集变元翻转后不可满足的子句并存储到fifo树。
第一线程在第十一个时钟周期内,执行根据概率选择变元进行翻转并选择翻转后的不可满足子句,并收集变元翻转后不可满足的子句并存储到fifo树。
第一线程在第十二个时钟周期内,执行根据概率选择变元进行翻转并选择翻转后的不可满足子句,并收集变元翻转后不可满足的子句并存储到fifo树。
进一步地,第二线程、第三线程和第四线程的执行内容与第一线程的执行内容相同。
进一步地,第二线程的启动时间比第一线程的启动时间滞后三个时钟周期;第三线程的启动时间比第二线程的启动时间滞后三个时钟周期;第四线程的启动时间比第三线程的启动时间滞后三个时钟周期。
进一步地,将变元翻转后不可满足的子句存储到fifo树,占用12个时钟周期。
本发明有益效果如下:本发明提供了一种基于流水线执行策略的硬件sat求解器,在硬件sat求解器求解sat问题过程中采用流水线策略,实现了流水线并行求解,提高了硬件系统的工作时钟频率和吞吐率,增强了求解器的处理能力。
附图说明
图1是本发明的基于流水线执行策略的硬件sat求解器的一实施例的结构图;
图2是本发明的基于流水线执行策略的硬件sat求解器的一实施例的流水线并行执行流程示意图。
具体实施方式
以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
在一个可选实施方式中,本发明提供了一种基于流水线执行策略的硬件sat求解器的结构,如图1所示,包括预处理模块1、子句搜索及变元翻转模块5和输出模块7。
其中,预处理模块1,用于产生cnf公式变元的初始赋值、提取当前赋值下的不可满足子句以及所述公式的子句和变元信息;输出模块7,用于输出所述cnf公式是否是可满足的。
子句搜索及变元翻转模块5,用于按照预设的最大指定次数内以第一线程、第二线程、第三线程和第四线程按流水线执行策略同步循环执行搜索不可满足子句并按照一定概率对子句变元进行翻转并存储变元翻转后不可满足的子句,并将求解结果发送给输出模块7。
在一个可选的实施方式中,基于流水线执行策略的硬件sat求解器还包括地址映射表2、子句映射表3、变元映射表4、fifo树6。
其中,地址映射表2,用于将预处理模块1发送的子句数据存储在片上存储器中的地址;子句映射表3,用于在地址映射表2中记录的片上存储器中的地址上存储子句数据;变元映射表4,用于存储初始赋值的子句以及变元翻转后的子句;fifo树6,用于存储变元翻转后不可满足的子句。
本实施例中,硬件sat求解器采用流水线并行执行的方式进行sat问题的求解,流程如图2所示。
子句搜索及变元翻转模块5按照预设的最大指定次数内以第一线程、第二线程、第三线程和第四线程按流水线执行策略同步循环执行搜索不可满足子句并按照一定概率对子句变元进行翻转并存储变元翻转后不可满足的子句,具体包括:
一个循环周期为十二个时钟周期。
以第一线程的执行内容为例进行说明各线程在一个循环周期,即十二个时钟周期内是如何按照流水线策略并行执行的。
第一线程在第一个时钟周期内,执行选择fifo树中第一不可满足子句并根据第一不可满足子句的第一变元读地址映射表。
接着,第一线程在第二个时钟周期内,执行根据所述第一不可满足子句的第一变元读子句映射表,并执行根据所述第一不可满足子句的第二变元读地址映射表。
第一线程在第三个时钟周期内,执行根据所述第一不可满足子句的第一变元读变元映射表,并执行根据所述第一不可满足子句的第二变元读子句映射表,并执行根据所述第一不可满足子句的第三变元读地址映射表。
第一线程在第四个时钟周期内,执行评估根据所述第一不可满足子句的第一变元读变元映射表获得的子句并暂存评估为不可满足的第二不可满足子句,并执行根据所述第一不可满足子句的第二变元读变元映射表,并执行根据所述第一不可满足子句的第三变元读子句映射表。
第一线程在第五个时钟周期内,执行计算所述第二不可满足子句的第一变元的break-value值并排序,并执行根据所述第一不可满足子句的第二变元读变元映射表获得的子句并暂存评估为不可满足的第三不可满足子句,并执行根据所述第一不可满足子句的所述第三变元读变元映射表。
第一线程在第六个时钟周期内,执行计算所述第二不可满足子句的第二变元的break-value值并排序,并执行计算所述第三不可满足子句的第一变元的break-value值并排序,并执行根据所述第一不可满足子句的第三变元读变元映射表获得的子句并暂存评估为不可满足的第四不可满足子句。
第一线程在第七个时钟周期内,执行计算所述第二不可满足子句的第三变元的break-value值并排序,并执行计算所述第三不可满足子句的第二变元的break-value值并排序,并执行计算所述第四不可满足子句的第一变元的break-value值并排序,并执行根据概率选择变元进行翻转并选择翻转后的不可满足子句。
第一线程在第八个时钟周期内,执行计算所述第三不可满足子句的第三变元的break-value值并排序,并执行计算所述第四不可满足子句的第二变元的break-value值并排序,并执行根据概率选择变元进行翻转并选择翻转后的不可满足子句。
第一线程在第九个时钟周期内,执行计算所述第四不可满足子句的第三变元的break-value值并排序,并执行根据概率选择变元进行翻转并选择翻转后的不可满足子句。
第一线程在第十个时钟周期内,执行根据概率选择变元进行翻转并选择翻转后的不可满足子句,并收集变元翻转后不可满足的子句并存储到fifo树。
第一线程在第十一个时钟周期内,执行根据概率选择变元进行翻转并选择翻转后的不可满足子句,并收集变元翻转后不可满足的子句并存储到fifo树。
第一线程在第十二个时钟周期内,执行根据概率选择变元进行翻转并选择翻转后的不可满足子句,并收集变元翻转后不可满足的子句并存储到fifo树。
每个循环周期内,第二线程、第三线程和第四线程的执行内容与所述第一线程的执行内容相同。
其中,第二线程的启动时间比第一线程的启动时间滞后三个时钟周期;第三线程的启动时间比第二线程的启动时间滞后三个时钟周期;第四线程的启动时间比第三线程的启动时间滞后三个时钟周期。
四个独立的线程同时在流水线中执行,在不同的线程中,将变元翻转后不可满足的子句存储到fifo树,占用12个时钟周期。虽然可能出现变元翻转后的不可满足的子句在12个时钟周期内不能完全收集并存储到fifo树中,但是根据各线程流水线并行执行的内容可知,将变元翻转后不可满足的子句存储到fifo树这一操作由于是连贯的,因此在除第一个循环周期外的所有的时钟周期内都是活动的,故避免了不可满足子句数据的丢失。
本发明的实施例提供了一种基于流水线执行策略的硬件sat求解器,在硬件sat求解器求解sat问题过程中采用流水线策略,实现了流水线并行求解,提高了硬件系统的工作时钟频率和吞吐率,增强了求解器的处理能力。
尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进,这些改进也应视为本发明的保护范围。