| | 10 | |
| | 11 | == What is CIVL? == |
| | 12 | |
| | 13 | CIVL stands for ''Concurrency Intermediate Verification Language''. The CIVL platform encompasses: |
| | 14 | |
| | 15 | 1. the programming language CIVL-C, a dialect of C with additional primitives supporting concurrency, specification, and modeling; |
| | 16 | 1. verification and analysis tools, including a symbolic execution-based model checker for checking various properties of, or finding defects in, CIVL-C programs; and |
| | 17 | 1. tools that translate from many commonly used languages/APIs to CIVL-C. |
| | 18 | |
| | 19 | The CIVL-C language is primarily intended to be an intermediate representation for verification. A C program using MPI, CUDA, OpenMP, Pthreads, or another API (or even some combination of APIs), will be automatically translated into CIVL-C and then verified. The advantages of such a framework are clear: the developer of a new verification technique could implement it for CIVL-C and then immediately see its impact across a broad range of concurrent programs. Likewise, when a new concurrency API is introduced, one only needs to implement a translator from it to CIVL-C in order to reap the benefits of all the verification tools in the platform. Programmers would have a valuable verification and debugging tool, while API designers could use CIVL as a "sandbox" to investigate possible API modifications, additions, and interactions. |
| | 20 | |
| | 21 | This manual covers all aspects of the CIVL framework, and is organized in parts as follows: |
| | 22 | |
| | 23 | 1. this introduction, including "quick start" instructions for downloading and installing CIVL and several examples; |
| | 24 | 1. a complete description of the CIVL-C language; |
| | 25 | 1. a formal semantics for the language; and |
| | 26 | 1. a description of the tools in the framework. |
| | 27 | |
| | 28 | == Installation and Quick Start == |
| | 29 | |
| | 30 | == Examples == |
| | 31 | |
| | 32 | == Verifying Programs == |
| | 33 | |
| | 34 | === Verifying C Programs === |
| | 35 | |
| | 36 | === Verifying C/MPI Programs === |
| | 37 | |
| | 38 | === Verifying C/OpenMP Programs === |
| | 39 | |
| | 40 | === Verifying CUDA-C Programs === |
| | 41 | |
| | 42 | === Verifying C/Pthreads Programs === |
| | 43 | |
| | 44 | === Verifying Fortran Programs === |
| | 45 | |
| | 46 | (under development) |
| | 47 | |