A storage optimization tool for regular loop nests
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
doc Initialize repository with sources Mar 14, 2016
examples Initialize repository with sources Mar 14, 2016
include/smo Initialize repository with sources Mar 14, 2016
isl @ 1636465
m4 update m4/.gitignore Mar 16, 2016
pet @ 9dd119e
src update .gitignore and license in src/main.cpp Mar 16, 2016
.gitignore add smo.py and update .gitignore Mar 16, 2016
.gitmodules add isl and pet submodules Mar 14, 2016
AUTHORS Initialize repository with sources Mar 14, 2016
LICENSE LICENSE minor update Mar 14, 2016
Makefile.am Initialize repository with sources Mar 14, 2016
NEWS Initialize repository with sources Mar 14, 2016
configure.ac update configure.ac Mar 14, 2016
getversion.sh.in Initialize repository with sources Mar 14, 2016
smo.py add smo.py and update .gitignore Mar 16, 2016


# Somashekaracharya G B
# gbs@csa.iisc.ernet.in
# violinholmes@gmail.com
# Uday Bondhugula
# uday@csa.iisc.ernet.in

SMO is a storage/memory optimizer for affine loop nests based on the 
polyhedral framework.  Affine loop nests are nests where the array subscript 
expressions are affine function of loop iterators and program parameters 
(symbols that are not modified). 


SMO is available under the MIT license. Please see file LICENSE for details.


Requirements: A Linux distribution. Pluto has been tested on x86 and 
x86-64 machines running Fedora Core {4,5,7,8,9}, Ubuntu, and RedHat  
Enterprise Server 5.x. Solaris should also be fine if you have GNU 
utilities. In order to use the development version from Pluto's git 
repository, automatic build system tools including autoconf, automake, 
and libtool are needed. GMP (GNU multi precision arithmetic library) is 
needed by ISL (one of the included libraries). If it's not already on 
your system, it can be installed easily with, for eg., 
'sudo yum -y install gmp gmp-devel' on a Fedora, or 
'sudo apt-get install libgmp3-dev' on an Ubuntu. 

SMO includes all libraries that it depends on.  autoconf/automake 
system will take care of automatically building everything. Nothing else 
needs to be downloaded and installed separately.  

To use the Python wrapper for SMO, make sure that the following are 

python-dev (sudo apt-get/yum/dnf install python-dev)
islpy (via Python PIP)
python-glpk (sudo apt-get/yum/dnf install python-glpk)

If you are unable to build/install Python wrappers for glpk via Python's PIP 
due to a more recent version of glpk on your system, use the pyglpk 
available here: https://github.com/bradfordboyle/pyglpk


Stable release

$ tar zxvf smo-1.0.tar.gz
$ cd smo-1.0/
$ ./configure
$ make
$ make test

configure can be provided --with-isl-prefix=<isl install location> to 
build with another isl, otherwise the bundled isl is used.

Development version from Git

$ git clone git://github.com/bondhugula/smo.git
$ cd smo/
$ git submodule init 
$ git submodule update
$ ./autogen.sh
$ ./configure [--enable-debug] [--with-isl-prefix=<isl install location>]
$ make
$ make test

* --with-isl-prefix=<location> to compile and link with an already installed 
isl. By default, the version of isl bundled with Pluto will be used.


The examples/ directory contains conflict set specifications for various
examples. Each of these files can be provided as an input to the prototype
through the command line options


Please send all bugs reports and comments to S. Bhaskaracharya