A GPU task generator for rendering

Alexandru-Lucian Petrescu, Florica Moldoveanu, Victor Asavei, Alin Dragos Bogdan Moldoveanu, Oana-Maria Ferche · 2014

We present an original GPU task generator that can be attached to the rasterization based rendering process, in order to provide a dynamic parallelism. Compared to other existing GPU task generators or schedulers our method creates new tasks using the GPU graphics pipeline task scheduler. These are generated in the geometry shader, by means of rasterizing new geometry that produces additional fragments. The parallel processing of these fragments represents the new threads, which are used as general purpose threads. Thus, our solution is extremely lightweight and it can run in parallel with the rasterization based rendering process. By using our generator, work-heavy rendering threads can distribute their load to a sufficiently large group of workers without any CPU interference. By doing this we are effectively reducing the complexity on a per-rendering thread basis and therefore we are able to obtain a performance increase of 1 or even 2 orders of magnitude in critical cases. Tasks such as tracing rays, dynamic geometry generation, expensive BSSRDFs evaluation or ray marching are handled in a unified manner, making it easy to integrate our generator into game engines. In contrast with other GPU task generators and schedulers our method does not occupy all hardware threads nor does it need specialized hardware, only requiring Shader Model 5. Since rarely are dynamic rendering tasks complicated enough to generate dynamic child tasks on their own, our generator can be configured to run as just a simple non recursive task dispatcher.

Read the paper · More papers on PaperTik