Revisiting The Vertex Cache: Understanding and Optimizing Vertex Processing on the modern GPU

Bernhard Kerbl, Michael Kenzel, Elena Ivanchenko, Dieter Schmalstieg, and Markus Steinberger:
Proceedings of the ACM on Computer Graphics and Interaction Techniques (HPG'18), 2018


Abstract

In this paper, we question the premise that graphics hardware uses a post-transform cache to avoid redundant vertex shader invocations. A large body of existing work on optimizing indexed triangle sets for rendering speed is based upon this widely-accepted assumption. We conclusively show that this assumption does not hold up on modern graphics hardware. We design and conduct experiments that demonstrate the behavior of current hardware of all major vendors to be inconsistent with the presence of a common post-transform cache. Our results strongly suggest that modern hardware rather relies on a batch-based approach, most likely for reasons of scalability. A more thorough investigation based on these initial experiments allows us to partially uncover the actual strategies implemented on graphics processors today. We reevaluate existing mesh optimization algorithms in light of these new findings and present a new mesh optimization algorithm designed from the ground up to target architectures that rely on batch-based vertex reuse. In an extensive evaluation, we measure and compare the real-world performance of various optimization algorithms on modern hardware. Our results show that some established algorithms still perform well. However, if the batching strategy of the target architecture is known, our approach can significantly outperform these previous state-of-the-art methods.

Resources


[pdf 2MB]

bibtex

@article{Kerbl:2018:SR,
author = {Kerbl, Bernhard and Kenzel, Michael and Ivanchenko, Elena and Schmalstieg, Dieter and Steinberger, Markus},
title = {Revisiting The Vertex Cache: Understanding and Optimizing Vertex Processing on the modern GPU},
journal = {Proc. ACM Comput. Graph. Interact. Tech.},
issue_date = {August 2018},
volume = {1},
number = {2},
month = aug,
year = {2018},
articleno = {29},
numpages = {16},
doi = {10.1145/3233302},
publisher = {ACM},
address = {New York, NY, USA},
}