[Coco] CoCo Supercomputer Idea
Andrew
keeper63 at cox.net
Sun Jan 10 16:01:35 EST 2016
I was just going to post about the AppleCrate project, but Steven H.
beat me to it, I guess.
Ever since I ran across that project, I knew that it could be done on
the CoCo in some manner, and have given it a bit of thought myself as a
project to play with in the future (though I don't own many CoCos myself).
The speed of the interconnect would be important if a real task on such
a clustered machine (which is what this would be - as we all know,
calling it a supercomputer would be a stretch).
So - maybe we should call it something different - I'll propose the
"CoCoCluster" (alternatively, "C-Cube", "C-Cubed", "C^3"). I'm not
expecting it to stick, and it isn't very inspired, but it is something
to work on.
As far as the interconnect is concerned, unless this machine is being
meant to really push the hardware, I vote for the "simple-is-better"
approach.
To that end, something using the bit-banger serial port, perhaps in
conjunction with the cassette port, might be best. I can't recall if
that "unused pin" on the bit-banger can be read or written from, but if
so, perhaps it could be toggled to provide a read/write state. In that
case, there could be a master machine, then a bunch of slave machines
hanging off, and that line could toggle to say "I am reading" or "I am
writing" - and, along with some logic to randomize in the event of
collisions or such, all machine would be listening for the master - and
any machine to machine comms could go to the master, or maybe there
could be multiple masters - or something.
It would be a very fast interconnect, but it would be easy to construct.
Or, maybe something like a BlackNet could be made:
http://www.romanblack.com/blacknet/blacknet.htm
That's meant for 5 volt microcontrollers, so it should fit OK with the
bit-banger serial port (IIRC - it's a 5 volt TTL serial?).
If anything faster was wanted, it would have to go thru the cartridge
slot, of course. Blue-skying an idea here: Could floppy drive
controllers be re-purposed in some manner (perhaps with some kind of
intelligent back-plane)? Alternatively, you could hang a PIC or ATMega
off that port, and use it as an intelligent buffer - and connect
everything with SPI (or even some kind of parallel interconnect).
I also do like the idea of the ESP8266 being used - or drivewire with a
PC handling routing or something.
As far as software is concerned - NitrOS9 or using machine code (like in
the 'Crate) should be OK. I don't think that would be the issue.
The issue - should this thing be built - would be the same question
faced by every cluster builder: "What do I use it for?"
It has to be something a cluster is good at; that means any problems or
tasks need to be (in effect) able to be highly parallelized in
structure. It also needs to be something that the CoCo can do, that we
know it can do, and that will provide something demonstrable (perhaps to
show its capabilities against a single CoCo). So, again, I am going to
make a couple of proposals:
1. Mandelbrot Set (or almost any fractal system)
2. Ray-tracing
There are problems with both of these, in that they are both very
floating-point intensive. Still, by breaking up the problem space into
chunks that can be easily doled out to each machine, there should be
some improvement (depending on the interconnect, of course - which could
render the whole thing slower than a single CoCo). Both tasks are
considered somewhat "standard benchmark" tasks for clusters (and other
vector machines), and they both provide an immediate graphical display
to bystanders for understanding what is happening (especially if
presented alongside another singular CoCo). We also have code available
for the CoCo that does both (well - I know that there are more than a
few Mandelbrot Set generators out there; for ray tracing, I'm not sure
what exists - but if nothing does, I do have the source code to a simple
QB4.5 version, as well as one for javascript - which might make a base
to translate from).
Or, maybe something else could be done with it; regardless, there has to
be an application for the cluster, otherwise it is almost pointless to
construct. It isn't whether it can be done (we know it can), but more of
what we will do with it, once it is constructed. Provided the software
is architected properly (to keep the communications part modularized
from the rest), the software could be set up to work whether its on one
machine or many. There just needs to be a "master controller" app (which
would dole out the work chunks, and get the results back and re-assemble
them in the "solution"), and a "worker" app (which takes its work task
as a portion of the whole problem, gets and answer, and sends the
results back to the master).
There is a bit of a chicken-and-egg problem - but as long as it is known
how the API interface to the comms is to be done (regardless of what
happens inside those routines), the rest of the app (worker or master)
can be constructed without needing to wait for the hardware (as the
comms interface is abstracted from the rest of the software). Once the
hardware is done, then any test code for the comms could probably be
used as the base to construct the remaining comms API for the master and
worker apps.
As far as language to code these app in? I'm not sure - my gut says to
use C or assembler, but a bit of me says "BASIC-09". Maybe it could be a
mix, or maybe it could be something else entirely.
--
Andrew L. Ayers
Glendale, Arizona
More information about the Coco
mailing list