System Adjusters

Submitted by epreisz on Sun, 02/11/2007 - 08:21.

System adjusters are not as familiar to the majority of developers. System adjusters are extremely useful in determining bottlenecks in pipelined architectures, and of course, we all know that GPUs are pipelined architectures. A system adjuster, decreases or increases the speed in which a resource or stage is running. When we adjust the speed of a resource in a pipelined architecture, we can determine if that resource is the biggest bottleneck in our pipeline.

Let me explain this with a simple example. When running a video game, I adjust the CPU speed and see no difference in frame rate. That means the biggest bottleneck is not the CPU. Subsequent optimizations on the CPU may result in zero gains in performance. Your application’s limitation is the GPU or bus. And unless you are sending information from the GPU to the bus at high rates, your bottleneck is likely the GPU.

The next step would be to use system adjusters to determine what bottleneck on the GPU is the slowest. Let’s say that adjusting the size of the frame-buffer from 32 to 16 bit increased your framerate. We can now assume that we are frame-buffer bandwidth limited. If it didn’t change framerate, then we would need to move on to the next stage in the pipeline. We will cover that process in greater detail later.