C++ Compile Time Polymorphism for Ray Tracing

Loading...
Thumbnail Image
Date
2017
Journal Title
Journal ISSN
Volume Title
Publisher
The Eurographics Association
Abstract
Reducing the amount of conditional branching instructions in innermost loops is crucial for high performance code on contemporary hardware architectures. In the context of ray tracing algorithms, typical examples for branching in inner loops are the decisions what type of primitive a ray should be tested against for intersection, or which BRDF implementation should be evaluated at a point of intersection. Runtime polymorphism, which is often used in those cases, can lead to highly expressive but poorly performing code. Optimization strategies often involve reduced feature sets (e.g. by simply supporting only a single geometric primitive type), or an upstream sorting step followed by multiple ray tracing kernel executions, which effectively places the branching instruction outside the inner loop. In this paper we propose C++ compile time polymorphism as an alternative optimization strategy that does on its own not reduce branching, but that can be used to write highly expressive code without sacrificing optimization potential such as early binding or inlining of tiny functions. We present an implementation with modern C++ that we integrate into a ray tracing template library. We evaluate our approach on CPU and GPU architectures.
Description

        
@inproceedings{
10.2312:vmv.20171268
, booktitle = {
Vision, Modeling & Visualization
}, editor = {
Matthias Hullin and Reinhard Klein and Thomas Schultz and Angela Yao
}, title = {{
C++ Compile Time Polymorphism for Ray Tracing
}}, author = {
Zellmann, Stefan
and
Lang, Ulrich
}, year = {
2017
}, publisher = {
The Eurographics Association
}, ISBN = {
978-3-03868-049-9
}, DOI = {
10.2312/vmv.20171268
} }
Citation
Collections