But that's a pretty big "if" there
Oh, I agree - you'd have added a lot of hardware complexity and probably more than you'd be able to fit if you wanted to keep 7 of them in the thermal envelope of the Cell.
It depends a lot on the codebase. Codebases tend to accumulate cruft. Having people refactor them because their requirements are different to yours can help, as can having a project developed without key product ship dates as the driving force. The bigger barrier is culture though. It's really hard to have a group of developers that have been working on a project for 10 years in private move to developing in public. In the list, he actually gives different numbers of fail points, more for projects that were proprietary for longer than they were open, which makes a lot more sense than the summary in the 'article'.
The one that I disagree with is 'Your source builds using something that isn't GNU Make [ +10 points of FAIL ]'. I disagree for two reasons. The first is that it implies using GNU make features, which likely means that you're conflating building and build configuration (which should gain some fail points). The projects that I most enjoy hacking on use CMake and Ninja for building by default (CMake can also emit POSIX Makefiles that GNU Make can use, but I take his point to mean that gmake is the only command you need to build, so the CMake dependency would be a problem). LLVM still more or less maintains two build systems, though the autoconf + gmake one is slowly being removed in favour of the CMake one. If I make a small change, it takes Ninja less time to rebuild it than it takes gmake to work out that it has nothing to do if I don't make any changes.
I'd also disagree with 'Your code doesn't have a changelog' - this is a GNU requirement, but one that dates back to before CVS was widely deployed. The revision control logs now fill the same requirement, though you should have something documenting large user-visible changes.
As for "web page", AJAX apps do exactly this
AJAX provides a mechanism for delivering the XML. How many popular web apps can you name that completely separate the back end and the front end and provide documentation for users to talk directly to the back end and substitute their own UI or amalgamate the data with that from other services? Of those, how many provide the data in a self-documenting form?
As I was saying: If your kids are immunocompromised, they have a lot more to worry about than measles. That is, there are many other diseases they have to worry about besides the few we can vaccinate against.
Why do you keep talking about immunocompromised people? The measles vaccine, for example, only works in about 95% of cases, the other people are not immunised. They have no other autoimmune issues and, unless exposed to the measles virus, will have no issues.
Almost everybody in "the entire population" who is vaccinated is protected by the vaccine and hence not "vulnerable". So "the entire population" doesn't become more vulnerable.
If immunity drops below about 93% for measles, then the population no longer benefits from herd immunity. This means that anyone who is not immune (including those 5% who were vaccinated but didn't receive the benefit) is at a much higher risk of being infected. It also means more infections, which increases the probability of the disease mutating, which affects everyone. People who are infected then have compromised immune systems and so are likely to suffer from other infections, which can then spread to the rest of the population.
- Register size (address and data register size on archs that have separate ones).
- Largest ALU op size
- Virtual address size
- Physical address size
- Bus data lane size
- Bus address lane size
It's very rare to find a processor where all of these are the same. Intel tried marketing the Pentium as a 64-bit chip for a while because it had 64-bit ALU ops. Most '64-bit' processors actually have something like a 48-bit virtual and 40-bit physical address space, but 64-bit registers and ALU ops (and some have 128-bit and 256-bit vector registers and ALU ops). The Pentium Pro with PAE had a 36-bit physical but 32-bit virtual address space, so you only got 4GB of address space per process, but multiple processes could use more than 4GB between them. This is the opposite way around to what you want for an OS, where you want to be able to map all of physical memory into your kernel's virtual address space and is one of the reasons that PAE kernels came with a performance hit.
Videogame programmer here. It wasn't really a compiler optimization issue. There's no compiler on the planet that can perform high-level optimizations like that.
Compiler engineer here. The vectorisation for the Cell wasn't the hard part, it was the data management. Autovectorisation and even autoparallelisation are done by some compilers (the Sun compiler suite was doing both before the Cell was introduced), and can be aided by OpenMP or similar annotations. If the Cell SPUs had been cache-coherent and had direct access to DRAM, then there's a good chance that a bit of investment in the compiler would have given a big speedup. The problem of deciding when to DMA data to and from the SPUs and where you need to add explicit synchronisation into the PPU was much, much harder. I've worked on a related problem in the context of automatic offload to GPUs and it turns out to be non-computable in most nontrivial cases (it depends heavily on accurate alias analysis).