3 research outputs found
Simplifying the Analysis of C++ Programs
Based on our experience of working with different C++ front ends, this thesis identifies numerous problems that complicate the analysis of C++ programs along the entire spectrum of analysis applications. We utilize library, language, and tool extensions to address these problems and offer solutions to many of them. In particular, we present efficient, expressive and non-intrusive means of dealing with abstract syntax trees of a program, which together render the visitor design pattern obsolete. We further extend C++ with open multi-methods to deal with the broader expression problem. Finally, we offer two techniques, one based on refining the type system of a language and the other on abstract interpretation, both of which allow developers to statically ensure or verify various run-time properties of their programs without having to deal with the full language semantics or even the abstract syntax tree of a program. Together, the solutions presented in this thesis make ensuring properties of interest about C++ programs available to average language users
Shader optimization and specialization
In the field of real-time graphics for computer games, performance has a significant effect on the player’s enjoyment and immersion. Graphics processing units (GPUs) are
hardware accelerators that run small parallelized shader programs to speed up computationally expensive rendering calculations. This thesis examines optimizing shader
programs and explores ways in which data patterns on both the CPU and GPU can be
analyzed to automatically speed up rendering in games.
Initially, the effect of traditional compiler optimizations on shader source-code
was explored. Techniques such as loop unrolling or arithmetic reassociation provided
speed-ups on several devices, but different GPU hardware responded differently to
each set of optimizations. Analyzing execution traces from numerous popular PC
games revealed that much of the data passed from CPU-based API calls to GPU-based
shaders is either unused, or remains constant. A system was developed to capture this
constant data and fold it into the shaders’ source-code. Re-running the game’s rendering code using these specialized shader variants resulted in performance improvements
in several commercial games without impacting their visual quality