Mnemosyne is a prototype CAD tool for memory optimization developed by the System-Level Design Group at Columbia University.
Welcome to Mnemosyne!
This is a tool for memory optimization at the hardware level. With Mnemosyne, designers can create and evaluate multi-bank memories for heterogeneous architectures, including but not limited to private local memories, specialized caches, and memory intellectual property (IP) blocks.
If you use the code, we would appreciate a citation to:
System-Level Optimization of Accelerator Local Memory for Heterogeneous Systems-on-Chip. Christian Pilato, Paolo Mantovani, Giuseppe Di Guglielmo, and Luca P. Carloni. IEEE Transactions on CAD of Integrated Circuits and Systems, 36:3, pages 435-448 (March 2017).
For any questions/concerns, please email Christian Pilato.
This research was supported in part by the C-FAR, one of the six centers of STARnet, in part by the DARPA PERFECT program under Contract HR0011-13-C-0003, and in part by the National Science Foundation under Grant 1219001 and Grant 1527821. This research is currently supported by the Horizon 2020 EU Research & Innovation programme under GA No 957269 (EVEREST project).
To build Mnemosyne, you will need to satisfy the following dependencies:
- libxml2-devel
- glib2-devel
- libsigc++20-devel
- glibmm24-devel
- libxml++-devel
- glpk-utils
- glpk-devel
- libboost-all-dev
Mnemosyne requires that /bin/sh
points to /bin/bash
instead of /bin/dash
, which
is a common configuration for Ubuntu systems. This problem can be solved as follows:
sudo rm -rf /bin/sh
sudo ln -s /bin/bash /bin/sh
- Clone Mnemosyne.
git clone https://github.com/chrpilat/mnemosyne
-
Install Xilinx Vivado Design Suite (optional)
-
Download and uncompress the Synopsys SAED 32nm SRAM library (optional)
Type the following commands to build and install the sources:
mkdir obj && cd obj
cmake -DCMAKE_INSTALL_PREFIX=<install_prefix> ..
make && make install
Mnemosyne can be run in two ways: batch and optimization.
In the batch mode, only one data structure / memory IP can be created. Mnemosyne will simply create a multi-port memory block based on the given parameters (e.g., width, height, number of read/write ports). In the optimization mode, multiple data structures can be concurrently optimized, searching for sharing opportunities. Hence, it is also necessary to specify the compatibility graph as input.
Mnemosyne uses the mode
command-line parameter to distinguish between
these two modes (batch
and opt
, respectively).
Additional information can be found in the Wiki pages.
Christian Pilato (Politecnico di Milano): [email protected]
Luca P. Carloni (Columbia University): [email protected]