This thesis combines programmer knowledge and feedback to improve modeling
and optimization of software. The research is motivated by two observations.
First, there is a great need for automatic analysis of software for embedded
systems - to expose and model parallelism inherent in programs. Second, some
program properties are beyond reach of such analysis for theoretical and practical
reasons - but can be described by programmers.
Three aspects are explored. The first is annotation of the source code. Two
annotations are introduced. These allow more accurate modeling of parallelism
and communication in embedded programs. Runtime checks are developed to
ensure that annotations correctly describe observable program behavior. The
performance impact of runtime checking is evaluated on several benchmark kernels
and is negligible in all cases.
The second aspect is compilation feedback. Annotations are not effective unless
programmers are told how and when they are benecial. A prototype compilation
feedback system was developed in collaboration with IBM Haifa Research
Labs. It reports issues that prevent further analysis to the programmer. Performance
evaluation shows that three programs performes signicantly faster -
up to 12.5x - after modication directed by the compilation feedback system.
The last aspect is renement of compilation feedback. Out of numerous issues
reported, few are important to solve. Different compilers and compilation
are used to estimate whether an issue can be resolved or not. On average,
43% of the issues reported can be categorized as potentially resolvable (27%) or