I decided I wanted to do an interesting project over the holiday break, and I figured building a small 16 CPU 'board' that interfaces with the Arduino development environment would be kinda fun. Arduino now supports the 32 bit ARM based SAMD processors, and they are super cheap. I ordered up some SAMD21G18s, which are 48 pin devices that support 6 serial ports. I did a quick board design in Diptrace, sent the boards off to JLCPCB, and was happily surprised that they worked!
4 serial ports are used per main CPU to do interconnects, plus a 5th serial port going to a supervisor CPU that also handles the USB interface, flashing, reseting, and some other interface work. The interconnect on each board is a matrix with connectors on the outer edge. Using a stack of 4 boards you get 16 CPUs with 4 interconnects each in a 4D hypercube arrangement. That is a great interconnect arrangement because each CPU is connected to all other nodes that have a single bit change difference in CPUID (0-15). If you add more boards you can convert to a 2D Torus arrangement. There is also a ring bus for the supervisor nodes.
I put together a simple message passes library as well as a simple barrier synchronization capability.
This isn't a high powered supercomputer, given that it is just 8 or 16 ARM cores at 48MHz, but it is a fun platform for experimenting with processor interconnects. Since the board to board interconnects are on connectors you can do other arrangements.
I also made a very short quick video about it -
https://www.youtube.com/watch?v=YOk8v4Uu1nk&feature=youtu.beIt's not the most sophisticated project, but still something fun to build. Happy to share sourcecode/schematics/etc on github if anyone is interested.
Jeff