DiVinE CUDA
CUDA Accelerated LTL Model Checker
DiVinE CUDA is an extensible open source tool for formal verification of concurrent systems. DiVinE CUDA is a standalone verification tool that supplements DiVinE verification tool chain with CUDA accelerated LTL model checking ability.
DiVinE CUDA builds upon MAP algorithm reformulated in terms of repeated matrix-vector product. The tool first generate state space of the model under inspection, stores it in a form of a matrix, and then employs CUDA architecture to solve the accepting cycle detection problem on the graph represented with the matrix.
Download and install instruction
Prerequisites:
- Linux-based workstation equipped with GPU supporting CUDA .
- Recent GNU C++ compiler with support of POSIX Threads.
- Properly installed DiVinE Cluster package [DiVinE download page]
- DiVinE CUDA package [divine-cuda.tar.gz]
- CUDA driver [http://www.nvidia.com/object/cuda_get.html]
- CUDA Toolkit version 2.0 [http://www.nvidia.com/object/cuda_get.html]
- CUDA SDK 2.0 [http://www.nvidia.com/object/cuda_get.html]
Install instructions:
- Unzip DiVinE CUDA package in the project directory of CUDA SDK 2.0 and enter the newly created directory.
tar xvzf divine-cuda.tar.gz cd divine-cuda
- Now compile the package:
make
- If succesfully compiled the binary file divine-cuda is created in bin/linux/realse directory of CUDA SDK 2.0.
Using the tool
- Before using the tool, make sure your PATH environment
variable contains path DiVinE binaries.
export PATH=:path_to_divine
- Write your model in a DVE language and store it in a file with extension .dve. For details on DVE language see our DVE language guide.
- Express the properties you want to verify and store
them in a file with extension .ltl.
Rules for writing .ltl files are as follows.- Only lines starting with # are processed, the rest is ignored.
- Atomic propositions are specified using the standard keyword #define, e.g.:
#define hungry (hungry==1)
- Individual properties are specified using keyword #property , e.g.:
#property GF(hungry)
- More LTL properties can be specified in a single file.
- Syntax of an LTL formula is given by the following rule. All temporal operators follow the standard semantics.
f ::= !f | Xf | Ff | Gf | fUf | fVf | f&&f | f||f | f->f | a | true | false
- Important! Combine your model file with the ltl
file using divine.combine script to
produce models with LTL specification. DiVinE
CUDA tool will not work on models that contain
no LTL specification or property process.
This will produce as many files as there are properties in specification.ltl. Newly created files will be nameddivine.combine model.dve specification.ltl
model.prop1.dve model.prop2.dve model.prop3.dve ...
-
Important! Precompile your model with LTL specification using
divine.precompile to produce compiled representation of the model (file with .dveC extension). DiVinE
CUDA tool will not work on non-compiled DVE models.
$ divine.precompile model.prop1.dve
- Run the algorithm to verify the model.
The tool outputs whether the there was an accepting cycle found (LTL formula is not satisfied)$ divine-cuda model.prop1.dveC
or whether there were no accepting cycles in the graph (LTL formula is satisfied).$ divine-cuda elevator2.prop2.dveC Computing with MaxToMin numbering Start generating Size: 3314381, blockdim.x: 6474, threaddim.x: 512. Inner iterations: 42 (last took 913.658020 ms). Outer iterations 1 (last took 21.247986 ms). CUDA time: 0 minutes 0 seconds (982.206970 ms) Generating not finnished: Ap Size: 3521190, Aj Size: 33751128, m Size: 3569181, All States: 6814344, Used States: 3521187, All Edges: 77262797 Used Edges: 33751128 Reachability time: 0 minutes 35 seconds (35847.054688 ms) ============================ Accepting cycle found ============================
$ divine-cuda elevator2.prop1.dveC Computing with MaxToMin numbering Start generating Generating finnished: Ap Size: 1722347, Aj Size: 20483544, m Size: 1722346, All States: 5015528, Used States: 1722344, All Edges: 63110616 Used Edges: 20483544 Reachability time: 0 minutes 26 seconds (26855.355469 ms) Size: 1722347, blockdim.x: 3364, threaddim.x: 512. Inner iterations: 539 (last took 17.462891 ms). Outer iterations 14 (last took 17.244141 ms). CUDA time: 0 minutes 9 seconds (9093.107422 ms). ============================== Accepting cycle NOT found ==============================