Data Reuse in Real-Time Rendering Systems

As the programmability of specialized graphics hardware has increased so too has the complexity and variety of user-specified programs (shaders) they are designed to execute. Modern interactive rendering systems incorporate hundreds to thousands of individual shaders in a single scene, each one containing hundreds to thousands of individual instructions. At the same time, rendering systems are unique in that the application developer may be willing to tolerate slightly incorrect results in exchange for significant performance gains. For example, the fact that a few hundred pixels (out of millions) deviate from their ideal values by ~5% might be perfectly acceptable if the program runs twice as fast.
This research focuses on developing general and automated tools for reducing the costs associated with executing pixel shaders at some controllable loss in visual detail. Specifically, we are investigating mechanisms for caching and reusing intermediate values generated inside a shader over consecutive frames. The key research challenges are overcoming the constraints imposed by the underlying hardware and providing tools that help a developer automate the task of allocating this new resource. Our efforts so far have focused on demonstrating that cache-based shader optimization provides significant performance improvements for many real-world applications. Future work will investigate new programming language constructs, hardware-level support, and statistical models of code execution that will enable more sophisticated optimizations and support on-line allocation. This research was recently acknowledged and is partially funded by an NVIDIA Professor Partnership Award.

Recent Publications