Ein Linux-Cluster aus Udoo Quad
Nach dem erfolgreichen Nachbau eines Linux-Clusters aus 3 Raspberry Pi im Lego-Gehäuse habe ich einen Debian-Cluster aus Udoo Quad zusammengestellt. Das "Gehäuse" wurde aus Plexiglasscheiben realisiert. Die einzelnen Platinen wurden zum Schutz vor mechanischen Beanspruchungen über Schrauben und Kontermuttern auf je eine Plexiglasscheibe montiert. Distanzbolzen schaffen genügend Abstand für Luftzirkulation und den Zugang zu den Peripherie-Anschlüssen und MicroSD-Karten.
Mit den Udoo Quad sind die Parallelisierungs-Techniken
auf einer Hardware-Plattform vergleichbar.
Messungen und Ergebnisse
Zeit in s | Beschleunigung | ||
---|---|---|---|
1 CPU | 293 | - | |
OpenMP | 4 CPU | 146 | 2,0 < 4 |
OMP dynamic | 4 CPU | 73 | 4,0 = 4 |
std::thread | 4 CPU, g++4.9 | 76 | 3,85 < 4 |
OpenMPI | 12 CPU | 30 | 9,8 < 12 |
OpenCL | 16 GPU Shader | 24 | 11,6 < 16 |
Die Messungen fanden auf Udoo Quad unter Debian Wheezy 1.1 hardfloat statt.
Als Compiler diente g++ mit Option -O3
.
Für den Test der OpenCL-Variante wurde eine GPU-beschleunigte Beta-Version von Debian Jessie eingesetzt.
- Die OpenMP-Version leidet unter der festen, grobgranularen Aufteilung der zu berechnenden Bildzeilen. Das obere und das untere Viertel sind lange vor den beiden mittleren Vierteln fertig. Durch die ungleiche Dauer der vier Teile werden die 4 CPU nur zu etwa 50% ausgelastet. Mit der Option
schedule(dynamic)
wird die Rechenlast gleichmäßiger verteilt. - Durch feingranulare, zeilenweise Aufteilung ist die std::thread-Implementierung fast optimal. Der Abgleich von Threadanzahl und Prozessoranzahl muss aber bewerksteeligt werden (Rückgriff auf OpenMP?).
- OpenMPI ist gut skalierbar: weitere Prozessoren können eingebunden werden.
- OpenCL steckt noch in den Kinderschuhen. Eine Kombination mit Open MPI konnte mit den GPU-Treibern in der Debian-Beta-Version noch nicht getestet werden, verspricht aber die größtmögliche Beschleunigung für solche massiv-parallelen Aufgaben.