An optimization process can reveal a series of different bottlenecks. You might have to go through the process a number of times to remove all of them and get performance up to the required level.
As you repeat the optimization process you are likely to find new bottlenecks. Bottlenecks can move between the geometry processor, the pixel processors, and the CPU. For more information, see Bottlenecks move between processors.