我已经使用探查器 gprof (statshere http://www.ccs.neu.edu/~jaideep/example2.stats包括调用图)并试图将所花费的时间分为两类:
I) SAT 求解部分(包括[纯]布尔传播和[纯]布尔冲突子句检测、回跳、任何其他命题操作)
II)理论求解部分(包括理论一致性检验、理论冲突子句生成和理论传播)。
执行第 3280-3346 行smt_context.cpp http://z3.codeplex.com/SourceControl/latest#src/smt/smt_context.cpp within bounded_search()
构成顶层DPLL(X)环路?
我相信总结 SAT 求解器函数的时间会更容易(因为它们更少)
然后剩下的时间就可以视为理论求解者的时间了。我想弄清楚哪些函数应该被视为属于上面的 I 类?他们是吗smt::context::decide()
, smt::context::bcp()
within smt::context::propagate()
?还有其他人吗?smt::context: resolve_conflict()
似乎与理论求解器的调用混合在一起?
这是正确的吗smt::context::propagate()
似乎主要是理论传播(第二类),除了它bcp()
功能?还,smt::context::final_check()
看来纯粹是II类的。
任何提示都非常感激。谢谢。
你是对的,bcp()
and decide()
是“SAT求解器”的一部分。
功能final_check()
只是理论推理。它执行 Z3“声称”过于“昂贵”的程序。这resolve_conflict()
过程是混合的:它执行引理学习和回溯。为了生成新的引理,Z3 使用布尔解析(位于“SAT 部分”)。在某些情况下,最昂贵的部分resolve_conflict
正在回溯理论求解器的状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)