The HPVM Compiler Infrastructure
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.