Skip to content
A polyhedral compiler for expressing fast and portable data parallel algorithms
Branch: master
Clone or download
Latest commit 17a5dce Mar 21, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
3rdParty Making tutorial_01 1 dimensional Jul 12, 2018
benchmarks update benchmarks Mar 20, 2019
include/tiramisu cublas_gemm, cuda_ast fixes Mar 20, 2019
src Fix exploding debug tabs Mar 21, 2019
tests cublas_gemm, cuda_ast fixes Mar 20, 2019
tutorials Add dimension names ti input constructor Jan 22, 2019
utils Update documentation scripts Nov 28, 2018
.gitignore Add ISL config to gitignore Jun 25, 2018
.gitmodules
.travis.yml
ARTIFACT_EVALUATION.md Update ARTIFACT_EVALUATION.md Nov 14, 2018
CMakeLists.txt cublas_gemm, cuda_ast fixes Mar 20, 2019
CONTRIBUTORS Update CONTRIBUTORS Nov 2, 2018
INSTALL.md Update INSTALL.md Nov 14, 2018
LICENSE Initial commit May 9, 2016
README.distributed.md Update distributed README with info on running on local machine Sep 20, 2018
README.md Update README.md Nov 14, 2018
configure.cmake Update configure.cmake Nov 3, 2018

README.md

MIT licensed Build Status

Overview

Tiramisu is a compiler for expressing fast and portable data parallel computations. It provides a simple C++ API for expressing algorithms (Tiramisu expressions) and how these algorithms should be optimized by the compiler. Tiramisu can be used in areas such as linear and tensor algebra, deep learning, image processing, stencil computations and machine learning.

The Tiramisu compiler is based on the polyhedral model thus it can express a large set of loop optimizations and data layout transformations. Currently it targets (1) multicore X86 CPUs, (2) Nvidia GPUs, (3) Xilinx FPGAs (Vivado HLS) and (4) distributed machines (using MPI). It is designed to enable easy integration of code generators for new architectures.

Example

The following is an example of a Tiramisu program specified using the C++ API.

// C++ code with a Tiramisu expression.
#include "tiramisu/tiramisu.h"
using namespace tiramisu;

void generate_code()
{
    // Specify the name of the function that you want to create.
    tiramisu::init("foo");

    // Declare two iterator variables (i and j) such that 0<=i<100 and 0<=j<100.
    var i("i", 0, 100), j("j", 0, 100);

    // Declare a Tiramisu expression (algorithm) that is equivalent to the following C code
    // for (i=0; i<100; i++)
    //   for (j=0; j<100; j++)
    //     C(i,j) = 0;
    computation C({i,j}, 0);
    
    // Specify optimizations
    C.parallelize(i);
    C.vectorize(j, 4);
    
    buffer b_C("b_C", {100, 100}, p_int32, a_output);
    C.store_in(&b_C);

    // Generate code
    C.codegen({&b_C}, "generated_code.o");
}

Building Tiramisu from Sources

This section provides a short description of how to build Tiramisu. A more detailed description is provided in INSTALL. The installation instructions below have been tested on Linux Ubuntu (14.04 and 18.04) and MacOS (10.12) but should work on other Linux and MacOS versions.

Prerequisites

Required
  1. CMake: version 3.5 or greater.

  2. Autoconf and libtool.

Optional
  1. OpenMPI and OpenSSh: if you want to generate and run distributed code (MPI).
  2. CUDA Toolkit: if you want to generate and run CUDA code.

Building

  1. Get Tiramisu

     git clone https://github.com/Tiramisu-Compiler/tiramisu.git
     cd tiramisu
    
  2. Get and install Tiramisu submodules (ISL, LLVM and Halide). This step may take between few minutes to few hours (downloading and compiling LLVM is time consuming).

     ./utils/scripts/install_submodules.sh <TIRAMISU_ROOT_DIR>
    
  3. Optional: configure the tiramisu build by editing configure.cmake. Needed only if you want to generate MPI or GPU code, or if you want to run the BLAS benchmarks. A description of what each variable is and how it should be set is provided in comments in configure.cmake.

    • To use the GPU backend, set USE_GPU to TRUE. If the CUDA library is not found automatically while building Tiramisu, the user will be prompt to provide the path to the CUDA library.
    • To use the distributed backend, set USE_MPI to TRUE. If the MPI library is not found automatically, set the following variables: MPI_INCLUDE_DIR, MPI_LIB_DIR, and MPI_LIB_FLAGS.
  4. Build the main Tiramisu library

     mkdir build
     cd build
     cmake ..
     make -j tiramisu
    

Tiramisu on a Virtual Machine

Users can use the Tiramisu virtual machine disk image. The image is created using virtual box (5.2.12) and has Tiramisu already pre-compiled and ready for use. It was compiled using the same instructions in this README file.

Once you download the image, unzip it and use virtual box to open the file 'TiramisuVM.vbox'.

Once the virtual machine has started, open a terminal, then go to the Tiramisu directory

cd /home/b/tiramisu/

If asked for a username/password

Username:b
Password:b

Getting Started

Run Tests

To run all the tests, assuming you are in the build/ directory

make test

or

ctest

To run only one test (test_01 for example)

ctest -R 01

This will compile and run the code generator and then the wrapper.

To view the output of a test pass the --verbose option to ctest.

You can’t perform that action at this time.