Today’s computing systems are heterogeneous, with diverse microarchitectures. It is common to design systems comprising multi-core CPUs, Graphic Processing Units (GPUs) and Field Programmable Gate Arrays (FPGAs). Each of these devices have proven to be advantageous for accelerating diverset complex computational problems. However, each of these devices have a distinctly different microarchitectures and programming platforms. In this context, enabling seamless application execution in a such a heterogeneous system is a major challenge. In this project, programmability of CPU/GPU/FPGA systems is simplified though the use of soft CPUs or GPU overlays. The application-mapping phase will explore the design space to find a match between application characteristics and the target microarchitecture.