Metadata-Version: 2.1
Name: tlpc
Version: 0.0.20200423.1
Summary: High-level synthesis task-level parallelization
Home-page: https://github.com/Blaok/tlp
Author: Blaok Chi
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: System :: Hardware
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: haoda (>=0.0.20200418.dev1)
Requires-Dist: pyverilog (>=1.2.0)

# Task-Level Parallelization for HLS

## Feature Synopsis

+ [x] software simulation (not cycle-accurate)
+ [x] Xilinx HLS backend
+ [ ] HeteroCL frontend

## Application Synopsis

| App         | Properties       | Details                           | # Streams | # Tasks | # Steps |
| ----------- | ---------------- | --------------------------------- | --------- | ------- | ------- |
| `bandwidth` | static           | bandwidth test using `async_mmap` | 4         | 4       | 1       |
| `cannon`    | static,feedback  | Cannon's algorithm                | 20        | 7       | 1       |
| `graph`     | dynamic,feedback | connected components              | 6         | 3       | 1       |
| `jacobi`    | static           | 5-point stencil                   | 23        | 17      | 1       |
| `page-rank` | dynamic,feedback | Page Rank on HBM                  | 143       | 36      | 2       |
| `vadd`      | static           | naïve vector addition             | 3         | 4       | 1       |

## Getting Started

### Prerequisites for Building `tlpcc`

+ CMake 3.13+
+ A C++11 compiler

### Prerequisites for Using `tlpc`

+ `tlpcc`
+ Google glog library
+ Clang headers
+ Python 3 and its `requirements`
  + `pyverilog`
  + `haoda`

<details><summary>How to install CMake 3.13+ on Ubuntu 16.04+ and CentOS 7?</summary>

Ubuntu 16.04+

```bash
sudo apt install python-pip
sudo -H python -m pip install cmake
```

CentOS 7

```bash
sudo yum install python-pip
sudo python -m pip install cmake
```

</details>

<details><summary>How to install Google glog library on Ubuntu and CentOS?</summary>

Ubuntu

```bash
sudo apt install libgoogle-glog-dev
```

CentOS

```bash
sudo yum install glog-devel
```

</details>

<details><summary>How to install the latest Clang on Ubuntu?</summary>

Follow the instructions [here](https://apt.llvm.org). Note that running `tlpcc` doesn't require the latest Clang; old (e.g. Clang 3.8) headers are fine.

</details>

<details><summary>How to install Python <code>pyverilog</code> on Ubuntu?</summary>

```bash
sudo apt install iverilog python3-pip
sudo python3 -m pip install pyverilog
```

</details>

<details><summary>How to install Python <code>haoda</code>?</summary>

```bash
sudo apt install python3-pip
sudo python3 -m pip install haoda
```

</details>

### Run tests

```bash
mkdir build
cd build
cmake ..
make
make test
```

## Known Issues

+ Template functions cannot be tasks
+ Tasks cannot invoke functions with `tlp::stream` or `tlp::mmap`
+ Loops generated by convenient EoS macros must be manually pipelined


