MikeB said:
@ HappySqurriel
A videogame is an implicitly syncronized problem being that there is a clear process flow which has to be completed in order, and if you split up a process that makes up the larger process flow each of these sub-processes has to be broken up (roughly) equally in order to prevent waste.
The reason why the Amiga was so powerful for its time and later the Neo Geo as a console, was due to their far more asynchronous approach.
For example on the Amiga the sound processing was done seperately, on a PC you would hear sound stuttering when the CPU got overloaded. On an Amiga the audio stayed rock solid, Amiga emulators on a PC using a single core are still experiencing sound stuttering.
Or for example the Amiga mouse pointer is always responsive, even on a 7 Mhz machine and user input by clicking a button always results into instant feedback from the system no matter how much the workload on the CPU, etc, etc. On a PC you under high loads you will notice mouse freezing and much delayed feedback while clicking a button.
Games engines perform lots of different tasks which can be handled highly asynchronously, decompression, audio processing, decoding, etc, etc. You can predict how the performance of the SPEs will be (and add other tasks) and you have to make sure you're not overloading a single SPE with tasks, for this performance tools are available. Usually you keep some headroom throughout the game, only peaking in the most demanding (for example action packed) scenes.
The Xenon is less of a asyncrhonous design, there are lots of bottlenecks to take into account. For example its shared L2 cache can only feed one core at any given time, shared main memory which can only be accessed by GPU or CPU at any given time, etc. This means you will far more have to deal with synchronization due to bottlenecks.
|
You're comparing Amigas to oranges ...
The PC, PS3, PS2, XBox 360, XBox, Wii and Gamecube have already been designed to take advantage of the parallel processes that exist in games (this is not asynchronous! you can't process the graphics or sound before you process the game events); they have CPUs, GPUs, and Sound Processors which allow them to render and output sound for the current frame while processing the next frame on the CPU.
When you are handling AI, updating the scenegraph, calculating physics and animation there is a distinct process flow. You can break up each of the sub processes into threads but balancing is a major issue which becomes much larger with the more ways you try to break it up. Consider what happens if you're processing something which can only be broken up 4 distinct ways and the processing of one of the objects takes up 40% of the total processing power, leaving the other 3 averaging 20% each; in this section the best performance you can from 6spe cell processor over this section 35% over the 7 cores. This is quite a common problem in very syncronized processes like a modern game ...