Sort of.  But while a lot of things happen in parallel, out of order, speculatively, etc., the 
programming model exposed by the hardware still is the C sequential model.  A whole lot of logic is 
needed to create that appearance, and in fact you can see that all the way back in the CDC 6600 
"scoreboard" and "stunt box".  Some processors occasionally relax the 
software-visible order, which tends to cause bugs, create marketing issues, or both -- Alpha comes 
to mind as an example.

Interesting to see this.

I've been reading a lot recently about the Jupiter/Dolphin project and the more I read the more I understand why it just could not be done. At the time (and to an extent even now) the only way to really improve a system's performance was to pipeline the processor, and the Pdp10 instruction set just wasn't easy to do that with.

They had a great concept: An Instruction fetch/decode system (IBOX), an execution engine (EBOX), the obligitory vector processor or FPU (HBOX) and of course the memory system (MBOX). Break the process up into steps and have the parts all work in parallel to boost performance.

Unfortunately they started to find way too many cases where an indirect instruction would be fetched that would be based on the AC, which was being changed by another instruction in the EBOX. This would blow out all the prefetched work in the pipe, forcing the IBOX to do a costly reload.

Likewise branch prediction couldn't be done well because most branches and skips depended on the value in the AC which was once again usually being modified in the EBOX down the pipe. As soon as it was modified the pipe had to be flushed and reloaded. It looks like they tried to put that logic into the IBOX to catch these issues, but that resulted in a flat processor that wasn't going to benefit from any parallelism, an endless series of bugs, and an IBOX that was pretty much running with its own EBOX.

It got worse when they realized that the Extended memory segments in the 2060 architecture totally wrecked the concept of an instruction decoder/execution box. There were just too many places where an indirect instruction to another section which was then based on the AC's would result in Ibox tossing the queue and invalidating the translation buffers. Increasing the translation buffer helped (I think that's one of the things they did on the final 2065 to make it faster) but they couldn't make that big and fast enough. I guess an indirect jump instruction based on comparing the AC to an indirect address pointing to an extended segment would be enough to make any decoder just cry.

It's sad to read, you can almost see then realizing it was doomed. The Foonly F1 was a screamer, but it was basically the KA10 instruction set and couldn't run extended memory segments like the 2060. And when they tried to do the same thing with the F4 it came out to be a little slower than a 2060. I used to think they put only one extended segment in the 2020 to cripple the box, but maybe they started running into the same problem and ran out of microcode space to try and address it.

Couple this with the fact that much of the 20 series programs were built in assembler (and why not, it was an amazing thing to program) and you just had too many programs with cool bespoke code that would totally trash a pipeline. Fixing compilers to order instructions properly could have worked, but people just wrote in assembler it wasn't going to happen and they weren't about to re-code their app to please the new scheduler God.

The VAX instruction set was a lot less beautiful, but could be pipelined easier especially with the dedicated MMU so they took the people and pipelined the hell out of the 780 resulting in the nifty 8600/8650 and later the 8800's. Dec learned their lesson when they built Alpha, and even Intel realized that their instruction set needed to be pipelined for the Pentium Pro and above processors.

Ah well. I don't think it was evil marketing or VAX monsters that killed the KC10, it was simply the fact that the amazing instruction set couldn't be pipelined to make it more efficient for hardware and the memory management system wasn't as efficient as the pdp11/Vax MMU concept.

Reply via email to