Skip to content

martinjonas/q3b-artifact

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 

Repository files navigation

Artifact for Q3B: An Efficient BDD-based SMT Solver for Quantified Bit-Vectors

Content

This virtual machine contains all the necessary packages and files for reproducing results from the paper. Namely, it has installed

  • BenchExec for running the experiments,
  • R for summarizing the results,
  • TeX Live for generating the tables from the results,
  • all the packages that were necessary to build the solvers (ANTLR, Java, CMake, newer gcc).

The artifact itself is located in the directory artifact. Its subdirectory solvers contains binaries and source codes for all four evaluated solvers Boolector, CVC4, Q3B, and Z3. The binaries for CVC4 and Z3 were downloaded from the official repositories, solvers Boolector and Q3B were built from the source codes.

Finally, the subdirectory benchmarks contains all quantified bit-vector benchmarks from SMT-LIB.

If the reader is interested in details, the file PREPARATION.org contains all the scripts that were used to produce this virtual machine from the clean Ubuntu 16.04 image. The image you see is the result of cloning the repository https://github.com/martinjonas/q3b-artifact.git and running bash /preparation/PREPARATION.sh from the directory artifact and then sudo Rscript preparation/PREPARATION.R, which are both generated from the mentioned file artifact/preparation/PREPARATION.org. This org-mode file contains also results of some of the commands we have obtained during preparation of the artifact: for example versions of the used tools and results of tests of Q3B.

Running the experiments

For running the experiments, you need to set-up the virtual machine with at least 3 physical or virtual processors. The machine should also have at least 8 GiB of RAM. The experiments can be also executed with less RAM (see later), but this will probably fail to produce exactly the same results as in the paper.

To run the experiments with the timeout 20 minutes of CPU time, as in the paper, go to the directory artifact and run the scripts ./runExperiments.sh. After it finishes, you should see the folder experiments/results with CSV files for Boolector, CVC4, Q3B, and Z3. If you run the script ./runExperiments.sh again, the folder gets deleted and all the experiments are executed again.

Beware that the script ./runExperiments.sh with the default timeout needs about a week of CPU time to finish. The script tries to use all the available CPU cores and will run more experiments in parallel, if you have more available cores and RAM. Therefore, adding cores to the virtual machine will speed up the computation significantly: in our experimental setup, all the experiments took about five days on a 6-core machine and 24 GiB of RAM.

If you want to run a simpler version of the experiments, the script ./runExperiments.sh takes an optional parameter for custom timeout. Therefore ./runExperiments.sh 5 will run the experiments with timeout of 5 seconds. This took about two hours on our machine. The timeout can be any positive number, so you can for example get results more similar to the ones in the paper by running ./runExperiments.sh 60 or more.

If you want to run the experiments with smaller amount or RAM, you can pass the desired amount to ./runExperiments.sh as the third argument. For example ./runExperiments.sh 5 2 runs the experiments with CPU timeout of 5 seconds and with 2 GiB of RAM.

Processing the results

After you have all the experimental data, regardless of the timeout, you can again go to the directory artifact and run the script ./processResults.sh to process the resulting data. The script should output several tables with results, generate LaTeX files with those tables in results/tables, and generate PDFs with plots in results/figures. However, most importantly, after the script finishes, you should see a file results/results.pdf, which contains nicely type-set tables and plots. Table 1 and 4 in this file correspond to the tables from the paper and should have exactly the same formatting. Actually, the tables in the paper are result of merely including LaTeX files results/tables/solved.tex and results/tables/cross.tex in the TeX source of the paper. The same two files are also included in the PDF produced by the script.

Again, if the reader is interested in details of processing the results, the scripts used in ./processResults.sh are generated from the literate-programming file results/PROCESSRESULTS.org, which contains all the used commands, describes their purpose and contains all the results of these commands that were produced during our experiments.

Logs

Precomputed results from our experiments can be found in the directory artifact/logs. In particular, the directory contains the directory artifact/logs/results, which is a copy of the directory artifact/experiments/results generated by artifact/runExperiments.sh. The directory also contains directories artifact/logs/tables, artifact/logs/figures, and file artifact/log/results.pdf, which are the respective copies of results of artifact/processResults.sh. Therefore, if you copy the directory artifact/logs/results to the directory artifact/experiments, you should obtain exactly the same results.pdf file after running artifact/processResults.sh.

Q3B

Usage

The binary of Q3B is located at artifact/solvers/Q3B/Q3B/build/q3b.

To run Q3B with an input file input.smt2, run artifact/solvers/Q3B/Q3B/build/q3b input.smt2. To get all the available options, run artifact/solvers/Q3B/Q3B/build/q3b --help.

Source code

The source code of Q3B is located at artifact/solvers/Q3B/Q3B/. This directory contains the following directories

  • app, which contains main.cpp, which reads the input from the user and runs the solver itself,
  • cmake, which contains CMake modules,
  • lib, which contains all the components described in the paper,
  • parser, which contains grammar for ANTLR parser of SMT-LIB,
  • tests, which contains regression and functional tests.

Q3B can be built from the source codes by creating a new directory build, if it does not already exist, and then calling

cd build
cmake .. -DANTLR_EXECUTABLE=/usr/share/java/antlr-4.7.2-complete.jar
make
make test

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages