It's far easier said than done to split a task into two tasks that can be done side-by-side. In a GameCube, there is a GPU and a CPU. They are two separate processors that operate somewhat independently. So, splitting the video processing and general processing into two threads isn't
too enormous of a deal, since the two tasks normally run concurrently anyway. But that's where it ends. You can't split a single processor down the middle and give half of its work load to one thread and the other half to another - it just doesn't work that way.
Think of it this way: You've been given the task of writing a report about a movie. To do the task yourself will take you a total of three hours. You decide the task could be done quicker if you had a friend's help. Sounds easy! You split up the single task into a few sub-tasks:
- Go to the video store and rent the movie (15 minutes)
- Watch the movie (2 hours)
- Write the report (40 minutes)
- Spell check the report (5 minutes)
Well, the largest sub-task there is obviously number 2, so you decide to do task 2, and let your friend do tasks 1, 3 and 4. There! Not perfectly balanced, but we should be able to shave the time needed from three hours down to two, right? Wrong.
Task 2
can't be performed until task 1 is completed. And task 3 can't be performed until task 2 is completed. And go figure - task 4 can't be performed until task 3 is completed. So, even with your friend's help you still haven't managed to perform the task any quicker. As a matter of fact, it took you even
longer because you had to communicate the essential points of the movie to your friend between tasks 2 and 3.
With a processor it is even more complicated. There are hundreds of different operations that need to be performed, and attempting to split them up and keep them coordinated is no trivial matter. Add in the fact that the emulator has no way of 'knowing' before-hand what kind of task (game/program) it will have to emulate and it's very difficult to optimize things accordingly.