Skip to content
Snippets Groups Projects

The HPVM Compiler Infrastructure

Documentation Status pipeline status

This repository contains the source code and documentation for the HPVM Compiler Infrastructure.

HPVM is a compiler for heterogeneous parallel system. For more about what HPVM is, see our website and publications: PPoPP'18 paper, OOPSLA'19 paper, PPoPP'21 paper.

Read our online documentation for how to build, install, and use HPVM.

HPVM is currently at version 1.0.

HPVM Scheduler Backend

We provide the HPVM Backend pass DFG2LLVM_EPOCHS which converts those Dataflow Graph (DFG) nodes which represent specific tasks from the scheduler's task library (e.g FFT, Viterbi). To specify that a particular node corresponds to a scheduler task, users must specify the target hint to node be EPOCHS_TARGET.

__hpvm__hint(EPOCHS_TARGET)

If a particular node in the DFG is marked as above, the DFG2LLVM_EPOCHS backend pass would then identify which task from the scheduler's task library that node corresponds by using the user specified call to __hpvm__task. For example, to specify that a node represents a Vitterbi Task in the accelerator, the following call will be used:

__hpvm__task(VIT_TASK)

Using this information, alongside a task library configuration file (which describes the specific scheduler api to set-up and execute each task), the DFG2LLVM_EPOCHS pass generates the appropriate task specific api calls while respecting the task inter-dependency constraints (as denoted by the structure of the HPVM Dataflow Graph).

To add a new task type to this pass, users must simply add a new task type entry to __hpvm__task and create the entry for the name of the specific scheduler api calls to the task library configuration file.

Support

All questions can be directed to hpvm-dev@lists.cs.illinois.edu.