https://hal.archives-ouvertes.fr/hal-03445804
README
Sofware title: A C-library for Register Pressure Reduction in Data Dependence Graphs.
To build SIRAlib-1.5 on a linux system, just type "./build.sh". It
will automatically build all the libraries of the archive and put the
result in the "build.linux" subdirectory. The build process is logged
in the file "log.build". Please check this file in case of error.
You may also clean all the generated files by typing "./build.sh clean".
This will clean all source directories and delete the "build.linux"
folder as well as the log file.
To build furnished examples in each individual component please see
instructions below.
The package includes the following components:
* SCEDA is a Small Collection of Efficient Data structures and
Algorithms. SCEDA library provides implementation of lists, sets,
maps, trees, heaps, graphs as well as related algorithms.
* GDD is a Graph Data Dependency library. It depends on SCEDA. It
provides specific data structures and algorithms to manipulate data
dependency graphs.
* RS is a Register Saturation library. It depends on GDD and SCEDA.
It implements two polynomial heuristics to compute the register
saturation of acyclic data dependency graphs, as well as an optimal
exponential algorithm. The algorithms and their experimental
efficiency are reported in the following research document:
Sebastien Briais and Sid Touati. Experimental Study of
Register Saturation in Basic Blocks and Super-blocks: Optimality and
heuristics. Research report number HAL-INRIA-00431103.
University of Versailles Saint-Quentin en Yvelines, France. October 2009.
* SIRA is a Schedule Independant Register Allocation library. It
depends on GDD and SCEDA. It provides one heuristic to reduce register
saturation of acyclic data dependency graphs and two heuristics to
reduce register pressure of innermost loops.
Please see INSTALL/README files in the corresponding subdirectory to
learn more about each component.
--
During the build process, the build script will ask you several questions:
* GDD includes, for testing purposes, a very basic XML parser to read
architecture and data dependency graphs. It is enabled by default but
you can disable this feature if you wish. Note however that in this
case, most of the examples will fail to compile.
* SIRA offers three distinct implementations of SiraLina:
- a standalone version, which is based on a min cost flow algorithm.
- a version that uses lp_solve: it requires lp_solve >= 5.5
- a version that uses glpk: it requires glpk >= 4.30
For efficiency reasons, we advise to use the glpk based version. But
please note that in this case, the resulting binary will be GPL
tainted.
If you chose to use the lp_solve library, the script will also ask you
the installation path of lp_solve.
Finally note that some functionalities might be unavailable depending
on the chosen implementation. For instance, negative circuit
elimination heuristic requires either lp_solve or glpk.
* If doxygen is installed on your computer, the build script will
offer you the choice to build the documentation of each component. If
you do so, the HTML documentation will be generated in each
corresponding subdirectory.
Once the package successfully installed, build the furnished examples
as follows:
* To build SCEDA examples, type
cd SCEDA
make examples LIBHOME=`pwd`/../build.linux
cd ..
* To build GDD examples, type
cd GDD
make examples LIBHOME=`pwd`/../build.linux
cd ..
* To build RS examples, type
cd RS
make examples LIBHOME=`pwd`/../build.linux
cd ..
* To build SIRA examples, type
cd SIRA
make examples LIBHOME=`pwd`/../build.linux METHOD=<flow|glpk|lpsolve> [LP_SOLVE=/path/to/lpsolve55]
cd ..
where METHOD is set to the chosen method during SIRA build
and LP_SOLVE is set to lpsolve installation path if chosen method was lpsolve
For more details, please refer to the individual README files in each
component subdirectory.
--
Sebastien Briais and Sid Touati
Copyright University of Versailles Saint-Quentin en Yvelines, November 2009