https://github.com/FStarLang/FStar/wiki/Profiling-Z3-queries上的Wiki页面建议使用Z3 Axiom Profiler;但是,Z3 Axiom Profiler似乎只能在Windows上可靠地工作。
在没有Z3 Axiom Profiler的情况下,如何轻松获得最有效的量化器?
答案 0 :(得分:2)
有关乔纳森的答复:
自此提交以来:https://github.com/FStarLang/FStar/commit/c4ce03c3709b44600d66b8c2ee55a0e1aa9f75a3
只需运行即可:
z3 smt.qi.profile=true queries-Foo.smt2
因为其他特定于F *的选项现在已嵌入.smt2文件中。
答案 1 :(得分:1)
此命令行调用对我来说足够好,仅依赖z3的qi.profile功能,而将最严重的问题留在最底端。
z3 smt.qi.profile=true queries-EverCrypt.Hash.Incremental-33.smt2 |& grep quantifier_instances | sort -t : -k 2 -n
(按照Nik的回答删除,现在删除了smt2文件中嵌入的z3选项)
答案 2 :(得分:1)
我已经能够通过mono
在Linux上使用axiom profiler,但是确实需要花费很多时间( 小时)(在此过程中它似乎挂了很长时间,但是确实有效)。完成分析后,该界面就会非常有响应(尽管我建议不要使用“文件”菜单下的一些导致崩溃的选项)。
由于我基本上需要将其放置一整夜以进行非平凡的跟踪,因此我将其在服务器上旋转并通过xpra使用X转发(这使我可以断开并重新连接到服务器)。
如果问题仅在于查找触发错误的查询,并且如果fstar使用提示运行得更快,那么我也有一个有用的脚本fstar-profile-queries
,我几个月前编写了一个可能有用的脚本。它使用qprofdiff
查找有问题的查询,但是这样做的方式要好得多。