Programmability of heterogeneous hardware is increasingly low-level, manual, and cumbersome. Currently, programmers manually partition and map application code on heterogeneous hardware that best exploit the application’s potentially diverse computational behaviors (e.g., SIMD) for optimized performance.
Automated Code Partitioning
The Popcorn Linux project is also developing compiler tools that enable automated code partitioning, mapping, and execution on heterogeneous architectures. The project is developing GCC-based feature extraction tools that characterize application programs using low-level features (e.g., floating-point instructions, loops). Performance prediction techniques are used to predict program performance using the low-level features on different hardware (e.g., x86, GPU, FPGA, Tilera), using statistical regression and machine learning techniques. Program functions are subsequently mapped onto the target hardware with optimal (predicted) performance. The necessary synchronization functions are automatically added by a set of source-to-source compiler tools, and the mapped functions are then compiled onto the target hardware.