Particle file format

One of the problems plaguing the distributed version of Illumina PRT is that of resource management. Precisely, when multiple task groups are running concurrently, switching resources from one task group to another can be a great time sink. A PE’s current data set (geometry, acceleration structures, textures, etc) has to be flushed before the PE is bound to a new task group, following which, a new data set is loaded in memory and processed, before any work can be distributed to that particular PE. With scenes like Sponza or Conference having relatively large scene definition files, the bottleneck is the Wavefront (.obj) loader, which loads a textual representation of scene geometry and materials, and constructs appropriate acceleration structures. To drastically reduce task dispatch time, I have opted for storing scene data as external memory structures; scenes are loaded once, processed and converted to a format that can be used straight from disk. These structures are then memory-mapped, to improve response times even more – the latency from loading the whole blobs in memory is drastically reduced. The first few frames of rendering induce page faults until scene locality is established, but this overhead is virtually unnoticeable when compared to frame times from the vanilla renderer.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s