An example of a Raspberry Pi supercomputer cluster
For this project, we will be building a multiprocessor supercomputer based on the Raspberry Pi 3. We will use the Single Program Multiple Data architecture to perform multiphysics simulations of various problems of interest, such as colliding galaxies, continuous Fast Fourier Transforms of acquired radio spectrum, and image processing of astronomical photos. During other times, the cluster will be running BOINC processes. Specifically, it will be running SETI@Home and Einstein@Home.
Supercomputing architecures come in multiple forms. A good discussion of these can be found here.
Our programming languages of choice are Fortran and Python. Fortran has a number of mechanisms for facilitating parallel computing, namely Message Passing Interface (MPI) and Coarrays. Information on MPI in Fortran can be found here:
Information on Fortran Coarrays can be found here:
While there are a number of parallel computing enabled Fortran compilers available, the author's preference is to use all open-source hardware and software. A Fortran compiler that fits this criteria is the GNU Fortran compiler with either the OpenCoarrays or OpenMPI extensions and libraries, which can be found here:
Our development environment of choice is Eclipse IDE, with the Parallel Tools Platform. The current version of the Eclipse IDE is called NEON, and can be downloaded from here:
Supercomputer clusters of Raspberry Pi's have been built by many people as can be seen from a Google search. Many have built these from the Versions Zero, 1, and 2 of the Raspberry Pi. With the advent of the Raspberry Pi 3, it has been noted by many that it's CPU can reach much higher temperatures than it's predecessors. It has also been noted that the CPU contains a speed governor that reduces the clock rate once the core temperature reaches 85 Celcius.
We obviously wish to avoid temperature induced throttling of the CPU in order to maximize supercomputing performance. Additionally, we wish to avoid large quantities of small fans on each of the individual Raspberry Pi's. Several have suggested a water cooled system. In our estimation, this will contain a cold fluid supply rail, a hot fluid return rail, radiator, reservoir / pump combination, and all of the associated plumbing. A fan of appropriate air flow rate will supply cooling air to the radiator.
In addition to designing and building an appropriate water-cooled heatsink for the supercomputer cluster, we will write software that takes advantage of the supercomputer cluster's parallel execution capabilities. Our programming language of choice for this application is Fortran, with the OpenMPI and OpenCoarrays extensions. We will start with simple programs within the Eclipse IDE + Photran + Parallel Tools Platform to visualize and understand the exact sequence of events that take place during parallel execution. We will then move on to more complex programs, and eventually write Python code that makes use of parallel execution libraries.
Watercooled Heatsink Analysis, Design and Thermal Modeling
Watercooled Heatsink Analysis and Design
In what follows, we will analyze the thermal characteristics of the Raspberry Pi 3 and design an appropriate water cooling system for the supercomputer cluster. We will try to calculate the thermal impedance of the Raspberry Pi 3's CPU chip, since vendor supplied datasheets are not available. We use data gathered from various sources on the Internet. We will then use these calculations to estimate the required parameters of our water cooling system.
Finite Element Modeling of the Watercooled Heatsink
After performing calculations to obtain the performance of the watercooled heatsink, and getting an estimate for the required flow rate and radiator characteristics, we will now perform Finite Element Modeling of the design using Salome Meca + Code Aster FEM software.
Fortran Programming for Multiprocessor Supercomputers
Fortran Programming with OpenMPI
In this section, we will write multiprocessor execution Fortran code using the OpenMPI library.
Fortran Programming with Coarrays
In this section, we will write multiprocessor execution Fortran code using Fortran's coarray features.