From a purely practical standpoint, maintaining code quality when dev teams get big gets harder and harder. Start adding external contractors into that mix and I'm going to claim it goes from difficult to impossible.
Oh well this is a given, no arguements there...
I doubt half the programmers on my team have ever written a significant amount of assembler, most have them don't understand what a compilers optimiser can and can't do never mind understanding a machine architecture in enough detail to make the "right" decision.
Then you're lucky... Outside the couple that may have taken some 68k assembly in school and/or played around on a 6502, I think I'm the *only* one... (There's folks around here who think my 867MHz G4 PowerBook is smoking fast just because it's "RISC")... -___-
The whole in order/OOO thing I actually don't care to much about, outside of manual prefetches your at the mercy of the compiler to solve the problem for you anyway.
Absolutely, I think it's being blown waaaaaaaaay outa proportion... I mean if you've had to do any performance oriented work on anything outside of x86 recently, an Alpha, or Power4/5/970 then this whole notion of lack of OOOe is pretty moot in my book...
So code ugly, code fast? Well that would explain a lot about your love for SoA
Since when is SoA "ugly"? I think you've been in VU/VFPU/VS land a little toooo long..
Just like SoA is basically forcing the definition of new atomic unit - 4x4 Matrix where we used to have 4x1Vector... Obvious question arises whether it's worth coming up with replacements for algorithms that can't be described in that manner or do we just put up with inefficiencies in those situations.
This is assuming all you're going to be handling is vertices... What happens when you want to toss audio samples into the SIMD engine? How about simple batch compares? Or using sorting and logical instructions to mow through decision trees? From the hardware engineering standpoint it *does* get you away from shoe-horning your architecture into a specific data type, and makes implementing a more orthogonal instruction set easier.
It's really not all that bad, especially if you have a decent language interface (think PIM code) and can really be abstracted away with a good solid template library (e.g. MacSTL)
Sure no of one with minimum execution speed overhead and a really tiny interpreter
Well, I'm rather fond of Small...
Oh it was a game, shipped last year on PC, sold a lot of units Wink
I will agree I think that particular project was out of hand, a lot of it was a function of distributing the code in such a way that the 60+ engineers could work on it without stepping on each others toes.
FWIW almost all of the code volume was in gameplay code.
Are you *SURE* you didn't manage to sneak a copy of XP in there somewhere?