High-level languages for small devices: a case study
CASES '06 Proceedings of the 2006 international conference on Compilers, architecture and synthesis for embedded systems
Control flow optimization in loops using interval analysis
CASES '08 Proceedings of the 2008 international conference on Compilers, architectures and synthesis for embedded systems
Efficient dynamic voltage/frequency scaling through algorithmic loop transformation
CODES+ISSS '09 Proceedings of the 7th IEEE/ACM international conference on Hardware/software codesign and system synthesis
Finding and understanding bugs in C compilers
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Hi-index | 0.00 |
Compiler technology includes language design, parsing, analysis, optimization, resource allocation, scheduling, and code generation. Associated tools include assemblers, linkers, debuggers, profilers, 'make', IDEs, optimized libraries, and more. While much of the technology developed over the past 50 years applies directly to embedded programming, there are key differences. Some are due to the limits of the embedded system, in particular memory size and power. Some are due to specialized architectures, such as DSPs. Others arise because of the different programming community and programming style, which is partially due to the economics of the marketplace. Here we explore some of these differences at three levels: the market, the programming environment, and the compiler.The compilers and tools marketplace for high performance workstation and cluster (HPC) systems is split between programmers and groups developing applications for internal use, and ISVs developing applications for resale. The marketplace for embedded systems is almost entirely for OEM applications, and many (or most) of the actual programmers work for the compiler vendor. This affects the forces that drive compiler and tool development and improvement.The goal for an HPC compiler is faster performance; in an embedded application, speed is not the only criterion. Getting the right mix of performance and other characteristics in an embedded system is important enough that programmers are more willing to tune the application by adjusting compiler options, performing limited rewrites, and even coding essential parts in assembler. In some instances, the target system itself is variable, and can be tuned.Focusing on just the compiler, we find many of the compiler techniques for the most performance critical embedded systems bear remarkable similarity to those used 20 or 30 years ago for the highest performance supercomputers. We also look in detail at the effectiveness of whole program analysis in both HPC and embedded compilers.