web page header logo


Double Buffering

In the section on memory management we computed how much memory was needed to "compose" the image. However this computation did not take into account "double buffering." What is double buffering?

Basically it is dividing the memory into two separate blocks (or buffers) so that the RIP can be using one block while another process uses the other block.

Why?

To maximize throughput.

Recall that for images of this size (180GBytes of pixels) we have to subdivide our image into many smaller stripes that will fit into RAM.

Before we can start on a second stripe something has to be done with the data from the previous stripe. Typically that might involve compressing the bitmap and writing it to disk or possibly transferring the bitmap to the memory of the image writer controller. In any event, this doesn't take zero time.

So while the bitmap is getting compressed and written to disk, the RIP has to wait, idle. With today's modern multi-core CPUs it makes sense to keep the RIP running continuously.

By creating two blocks, we can have the RIP filling one block while the compressor reads from the other block.

the rip fills one buffer while the compressor reads from the other

This effectively doubles the number of stripes we need to process; however the RIP does not really lose any speed since a smaller stripe will rasterize faster; the amount of time the RIP idles is much less since the compressor is running essentially in parallel.