我使用Z3作为有界程序验证的后端求解器。我在不同的操作系统,Windows 7 X64和SuSe 10.3 X64上为Z3提供相同的公式,Z3都是3.2版本。
他们的意见是: run.z3,它包含嵌套的量词。
在没有启用任何显式选项的情况下(默认模式),Z3在Windows上运行良好,但是,它在Linux上给我“分段错误”:
../ solvers / z3 / bin / z3:第11行:27951分段错误
然后我添加了唯一的选项
(set-option:PULL_NESTED_QUANTIFIERS为真)
到公式,并重新运行它,这次它可以在Linux上运行,而在Windows上它仍然有效并且解决得更快。该选项解决了我在Linux上的问题。
Windows和Linux上的3.2版Z3是否提供不同的功能?这是真的,还有什么不同之处?提前谢谢!
答案 0 :(得分:1)
Linux和Windows版本不完全相同,但它们提供的功能基本相同。主要区别在于使用的任意精度数字包(备注:在下一个版本中,我们将使用我们自己的包,这种差异将不再存在)。我们还必须进行一些调整以应对这两个平台之间的差异。 崩溃是由于内存损坏造成的。此错误已得到修复,下一个版本将包含此修复程序。
由于以下原因,性能差异是可能的:Linux和Windows版本是使用不同的浮点单元编译的。浮点计算用于Z3中实现的一些启发式算法。因此,浮点计算的这种波动可能产生不同的搜索空间。我们使用的一些标准C ++函数(例如std::sort
)在gcc和Visual Studio中具有不同的实现。由于Visual Studio和GCC中标准C ++库的实现存在差异,我们还观察到性能的其他波动。