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