Zoals ik al een paar posts geleden al zei, ben ik dus wat met distributed computing aan het prutsen hier op het werk. Dat houdt in dat je het werk dat je programma moet uitvoeren, gaat verdelen over meerdere processoren. Een klein voorbeeldje hiervan is dat je een for loop verdeeld over een aantal processoren in plaats van dat je die sequentiëel uitvoert op 1 processor. Ik gebruik het al een tijdje eigenlijk, maar op een vrij naïeve manier. Ik test voor mijn doctoraatsonderzoek statistische algoritmes op kunstmatig gegenereerde datasets. Die datasets bezitten verschillende karakteristieken die allen gevariëerd worden aan de hand van een for loop. Zo zit ik meestal met een zeven tot tien geneste for-loops en dat vraagt allemaal tijd, gigantisch veel tijd. Verdelen over meerder processoren is de boodschap dus. In eerste instantie verdeelde ik de langste for loop over aparte processoren wat al 10 keer sneller ging. Het kan echter ingenieuzer en Matlab heeft er een toolbox voor. Die code postte ik een aantal dagen geleden, maar die ging te graag. Het probleem is dat je Matlab moet opstarten op een login-processor van de processor-cluster om dan het werk naar andere processors te sturen. Op die login-processor krijg je echter maar een half uur CPU tijd en dat vind Matlab niet genoeg (Matlab is echt traag). Bummer. Alles zelf geschreven dan maar. In de binnenste for loop wordt nu telkens een bestand geschreven met daarin alle opdrachten (plus resultaten wegschrijven) die moeten uitgevoerd worden en dat bestand wordt dan in een wachtrij gestoken die het dan uitvoert als er een processor vrij is (yeah, er zit veel volk op onze cluster). Enfin zo heb ik dus 11 CPU dagen (ja, u leest het goed) op 21 uur en een half tijd afgewerkt. Iets meer dan tien keer sneller, maar dat hangt af van hoeveel processors er vrij zijn natuurlijk. Voila, bij deze weet u wat ik in de dag zo allemaal uitspook
0 Responses to “Distributed Computing”
Leave a Reply