
https://archive.org/details/connectionmachin00hill
Describes the motivations for and design of a massively parallel computer with many (millions? 64k?) of very simple processing nodes that serve as both memory and CPU. Shows how you can have "active data structures" where each item of data is in a different CPU (or clusters of nearby CPUs) and literally migrates between CPUs as computation proceeds. I think it gives an example of the parallel bitonic sort algorithm being executed in this way. A relatively thin book and relatively easy to read for a programmer.
You can also read Hillis's thesis:
https://dspace.mit.edu/bitstream/handle/1721.1/14719/1852428...
This paper by Guy Steele and Danny Hillis is also a good introduction to the Lisp language they were developing (but from what I can tell never got off the ground) for the CM.
http://diyhpl.us/~bryan/papers2/paperbot/25aa007a093cd69bbf0...
In particular the language has two new operators, alpha and beta, that today we might consider flexible analogs to map (compute) and reduce (communicate). It's really fascinating how they made an algebraically closed language around this concept.
This lecture by Hillis is also fascinating:
https://www.youtube.com/watch?v=Ua-swPZTeX4
Near the end he talks about how this room-sized machine had a syncronous clock, and how there were bits stored in the wires in transit because all the wire lengths were carefully cut multiples of the clock period.
Here's a great video describing the architecture of the CM-5
Note how similar the programming concepts are to CUDA (at an abstract level). Hillis also in the 80s published his MIT thesis as a book: The Connection Machine
https://www.amazon.com/Connection-Machine-Press-Artificial-I...
An incredibly well written and fascinating read, just as relevant today for programming a GPU as it was for programming the ancient beast of a CM-2. It's about algorithms, graphs, map/reduce, and other techniques of parallelism pioneered at Thinking Machines.
For example, Guy Blelloch worked at TM, and pioneered prefix scans on these machines, now common techniques used on GPUs.
https://www.youtube.com/watch?v=_5sM-4ODXaA
http://uenics.evansville.edu/~mr56/ece757/DataParallelAlgori...
There's also been a lot of hum lately on HN about APL, much of Hillis' *Lisp ideas come from parallelizing array processing primitives ("zectors" and "zappings"), ideas that originating in APL as he acknowledged in the paper describing the language:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108...
What's old is new... again.
Years ago I attempted to take a stab at implementing this language on CUDA I called hillisp [3] but at the time Dynamic Parallelism didn't exist yet and my available hardware was pretty weak, but it was fun to learn more about CUDA which was relatively early technology at the time.
[1] https://www.youtube.com/watch?v=Ua-swPZTeX4
[2] https://www.amazon.com/Connection-Machine-Press-Artificial-I...
https://www.amazon.com/Handbook-Artificial-Intelligence-Avro...
https://mitpress.mit.edu/books/parallel-distributed-processi...
https://www.amazon.com/Neural-Massively-Parallel-Computers-B...
https://www.amazon.com/Connection-Machine-Press-Artificial-I...
https://www.amazon.com/Legged-Robots-Balance-Artificial-Inte...
https://www.amazon.com/Machines-That-Walk-Adaptive-Suspensio...
...and more.