On 2/17/25 06:17, Paul Koning wrote: > Also multiple functional units, seriously interleaved memory, and a bucket > full of other tricks. The way loads and stores are requested by the > programmer naturally makes them background operations, and the "stunt box" > handles that background process.
Even on the lower 6000 (6400/6500), the architecture made a large difference. Three-address architecture (c=a+b vs. a=a+b) and the lack of condition codes enabled more code "movement". That is, you could, for example, compute a value at the top of a loop and have the branch on condition at the bottom. Hand optimization for the 6600 was a big thing for standard product development (cf. Jack Neuhaus' code optimization classes) and it gave one a chance to be "clever". Rick James and Richard Frank came up with a lot of "interesting" code, such as doing 10-digit display code addition/subtraction as a parallel operation. I was pretty good at hand optimization, but for complex loops, I'd write the code in FORTRAN so that FTN and look at the generated code and work from there. On the subject of exchange jumps, I should point out that for a very long time, use of the feature was restricted to the PPUs--i.e. the CEJ/MEJ switch on the deadstart panel was "off"--OS user requests were exclusively through the RA+1 mechanism. One of most ingenious coding tricks to me was the problem of saving and restoring all registers without resorting to an exchange jump. We used that one as a test for applicants. All in all, I'd consider the CDC 6600 to be the crowning glory of Seymour Cray's career. --Chuck
