kars said:
Sorry, I already have worked on the Cell. You must not see it as a plattform with 8 processors. The SPUs are no full processors but more like special dedicated coprocessors. While the SPUs can interact with each other, to work as a pipeline for example I don't think that this kind of approach is really advisable in environments, where reaction time is critical, like in games. SPUs are no typical cores of a multi-core processor, instead they have their own needs and capabilities. I would normally agree with you that for performance reasons you would like independend cores, that interact with each other, although debugging would get VERY hard, but at least in my understanding this was never the world of the Cell. Things like autobalancing that happen in multicores all the time, are not easily available. The Cell was designed with special applications in mind (low cost cluster computing, one chip multimedia workflow), but never for general purpose applications. If they don't work primarily on their local memory they get quite inefficient. So you are much more fixed for small processing intensive tasks, while a direct interaction with multiple other SPUs becomes difficult, it gets much easier if they use the PPE as a kind of "man in the middle". I aggree, this does not sound very effcient, but I think this is the best approach on a Cell. In my opinion the Cell is not a processor, that you should put into a gaming console. |
Most of this post supports my point. You're right that things like automatic load balancing don't "just happen" because the SPEs can only work on their local store -- all the more reason to think carefully about how your application uses memory in the design phase, and how it will give work to the SPEs.
I'm not saying it's going to be easy! My point is that you can make it less difficult by thinking about the platform before you start writing code. I'm not saying you should just code the whole thing, using all the SPEs, press run and hope for the best; that's foolish. I would take the modular approach, write and test portions of the code at a time until it all comes together. Obviously there will be room for tweaking further down the development pipeline, but it helps to have an idea of what you can achieve before your engine is close to being finished.