proj-oot-ootBrainThoughts

Could have an array of small nodes, each of which is either a:

Each one could have about 8k of RAM (or maybe 16k). Memory banks expose their RAM ('shared local memory'), CPUs and routers have 'private local memory'.

Could lay out in a 3-colored hexagonal array like this: https://en.wikipedia.org/wiki/List_of_convex_uniform_tilings#/media/File:Uniform_tiling_333-t012.png . ASCII art:

x x x x x x o o o o o

Note that each node has 3 neighbors of each other kind of node, and also that each pair of nodes of different types shares 2 neighboring nodes of the other/third type (so a CPU that wants to send a packet through the router could write the packet into a memory bank that they share, and then notify the router).

If each one had 16k of RAM, then each CPU node sees 3*16 + 16 = 64k of RAM, so 16-bit addressing can be used. However, somewhat similar arrangements in 3D have about twice as many neighbors, so maybe each one should just have 8k of RAM, or maybe they should still have 16k but each memory bank should only expose 8k of that 16k.

We probably want the memory banks to not only accept 'get' and 'set' commands, but also to arbitrate between the six nodes that can simultaineously access them by implementing atomic/synchronizing operations, eg RMW and CAS. We might even want the memory banks to implement memory allocation, so that when a CPU wants to allocate some memory it asks the memory bank to find it.

We probably want the routers to not only accept packets and pass them on, but also to buffer incoming/outgoing packets into 'mailboxes', to dynamically adapt to traffic conditions, and to have route discovery and exterior gateway protocols.

My reasoning behind these choices is recorded in ootBrainNotes1.

---