- Frédéric Loulergue, Université d'Orléans, France
- Olivia Proust, Université d'Orléans, France
For the verification part:
- Why3 version 1.7.1
- Alt Ergo 2.5.2
- CVC4 version 1.8
For the compilation part:
WhyBSML is a formalization of the core module of the BSML library, an OCaml library for scalable parallel computing and a set of verified libraries implemented with this core module.
In the root directory:
make configgenerates a WhyBSML proof strategy that is then available in WhyIDEmake idelaunches Why3 IDEmake docgenerates the documentation inhtmlit also generates the HTML summary of the verification session inwhy3session.htmlmake benchreplays the verification session (works only if Alt-Ergo V2.5.2 and CVC4 1.8 are installed and Why3 configured to use them)make compilegenerates the OCaml code from the WhyML development and compiles all the dependenciesmake cleanupperforms all of the following:make clean_configremoves the configured strategymake clean_sessionremoves the session directorymake clean_docremoves the generated documentationmake clean_extractionremoves the generated OCaml source code and compile code
In application/mps, mps.byte and mps.native are executable as they are. They compute the maximum prefix sum of a distributed list of integers. They take as argument the size of the randomly generated (distributed) list. If ran directly they run using only one processor. To use several processors, mpirun with option -np is necessary. For example, mpirun -np 400 application/mps.native 1_000_000 runs the (native code version of the) application on a list of one million numbers and will use 400 processors to do so (it is very likely that in this case the machine is a cluster of PCs or another kind of distributed memory machine).
In application/average, average.byte and average.native are respectively the executable byte-code and native code versions of a program that computes the average of a distributed list of integers. Their usage is the same as the MPS applications.
In application/count, count.byte and count.native are respectively the executable byte-code and native code versions of a program that counts the number of diagonal 50x50 matrices of a distributed list of matrices. Their usage is the same as the MPS applications.
README.md: this fileLICENSE: the license filebsml.mlw: the formalization of BSML coresequential.mlw: a library of sequential functions (mostly on lists)stdlib.mlw: a verified BSML standard libraryskeletons.mlw: verified map and reduce skeletons for parallel programmingaverage.mlw: verified parallel implementation for the computation of the average of a distributed list of integerscount.mlw: verified parallel implementation of a function counting the number of elements of a distributed list verifying a given predicatemps.mlw: verified sequential and parallel implementations for the maximum prefix sum problemdrivers: Why3 drivers used to extract OCaml code from the.mlwfilesbsml: a parallel implementation of the BSML code module on top of MPIwrapper: the BSML core implementation uses OCaml'sinttype whilebsml.mlwuses WhyML'sinttype which is extracted to the typeZ.t. This wrapper manages the conversions between these two typesextraction: placeholder for the OCaml code extracted from our WhyML development (contains also aMakefile)application/mps: an executable application that calls the parallel maximum parallel prefix sum function on a randomly generated distributed listapplication/average: an executable application that calls the parallel average function on a randomly generated distributed listapplication/count: an executable application that calls the parallel count function on a randomly generated distributed listocamlmake: Ocaml-makefile by Markus Mottl, used for compilation