The last two months I have been working on the design and implementation of a heterogeneous execution engine for LLVM. I started this project as an intern at the Qualcomm Innovation Center and I believe it can be useful to different people and use cases. I am planning to share more details and a set of patches in the next
days. However, I would first like to see if there is an interest for this.
The project is about providing compiler and runtime support for the automatic and transparent offloading of loop or function workloads to accelerators.
It is composed of the following:
a) Compiler and Transformation Passes for extracting loops or functions for offloading.
b) A runtime library that handles scheduling, data sharing and coherency between the
host and accelerator sides.
c) A modular codebase and design. Adaptors specialize the code transformations for the target accelerators. Runtime plugins manage the interaction with the different accelerator environments.
So far, this work so far supports the Qualcomm DSP accelerator but I am planning to extend it to support OpenCL accelerators. I have also developed a debug port where I can test the passes and the runtime without requiring an accelerator.
The project is still in early R&D stage and I am looking forward for feedback and to gauge the interest level. I am willing to continue working on this as an open source project and bring it to the right shape so it can be merged with the LLVM tree.
P.S. I intent to join the llvm social in Bay Area tonight and I will be more than happy to talk about it.