Pipelining: Ganging

The pipeline consists of three plugins (A, B, C), running on four cores (two instances of B).
Plugin B is ganged (instantiated more than once) to offset the fact that it's twice as slow.

Your browser does not support the HTML5 Canvas tag!

By ganging (doubling up) plugin B, we've made the pipeline behave as though all the plugins take the same amount of processing time, even though B actually takes twice as long. This solves the problem of asymmetric loading shown in the previous example, at the cost of increased complexity. Notice that overall throughput is now the same as it was with symmetric loading. This trick gets around Amdahl's law, but it only works if the ganged plugin is a stateless filter.