Stuur deze pagina door




Parallel rekenen

High Performance Computing is vrijwel synoniem met de term Parallel Rekenen. De tijd dat computers sneller werden omdat de klokfrequentie van de processor hoger werd is voorbij. Op dit moment worden hogere snelheden vrijwel uitsluitend bereikt door steeds meer berekeningen tegelijk (parallel) uit te voeren. Dit vergt wel een andere manier van denken voor de ontwikkelaars van programmatuur. Op deze pagina vindt u een extreem korte inleiding tot het vakgebied van parallel rekenen.

Parallelle computers

Er zijn veel verschillende soorten parallelle computers. De volgende typen kunnen worden onderscheiden:

Multicore processoren: processoren waarin zich meerdere rekenharten (cores) bevinden die onafhankelijk van elkaar berekeningen kunnen uitvoeren. De meeste moderne PC's hebben zo'n multicore processor.

Cell processoren en GPGPU's (grafische kaarten): bijzondere soorten processoren die intern gebruik maken van vaak zeer veel, relatief eenvoudige rekenkernen om een hoge performance te halen. Dit soort processoren komt voort uit de wereld van de computergames maar geniet nu ook grote interesse vanuit het vakgebied High Performance Computing (zie bijvoorbeeld dit artikel over een bachelor project bij VORtech waarin een GPGPU gebruikt is). 

Multiprocessors: computers waarin zich meerdere processoren bevinden (die elk weer meerdere cores kunnen hebben). Ook dit wordt in sommige desktop PC's toegepast.

Clusters: een groep computers (met elk mogelijk meerdere processoren) die onderling verbonden zijn door een snel netwerk en gezamenlijk aan een berekening kunnen werken.

Supercomputers: dit zijn speciaal ontworpen computers die meestal gebruik maken van veel van de bovengenoemde soorten parallelle hardware. Door de enorme schaalgrootte van deze computers kunnen ze extreem grote berekeningen aan. Zie de Top 500 van snelste computers voor een overzicht.

Gedistribueerde systemen: een netwerk van onderling verbonden computers (of clusters), vaak op verschillende fysieke locaties, die samen kunnen werken om een berekening uit te voeren.

Grid computing/cloud computing: dit is eigenlijk geen model voor parallel rekenen maar een model voor het aanbieden van rekenkracht. De gebruiker hoeft niet meer te weten waar de fysieke computer staat maar kan vanachter zijn PC een enorme rekenkracht aanspreken die door een provider geleverd wordt. 

Parallelle programmeermodellen

Grofweg vallen de manieren waarop parallelle programmatuur gemaakt kan worden uiteen in de volgende soorten:

Shared memory modellen: hierbij werken alle parallel uitgevoerde berekeningen in dezelfde namespace; ze delen de variabelen in het programma met elkaar. De parallelle berekeningen worden op detailnivo gedefinieerd, bijvoorbeeld door loops van een for-lus parallel uit te voeren, terwijl er tussen de for-lussen gewoon sequentieel (niet parallel) gerekend wordt.

Deze methode wordt gebruikt door parallelliserende compilers en door OpenMP, een annotatie-taal waarmee de programmeur kan aangeven wat er parallel berekend moet worden. Ook is het mogelijk om expliciet aparte 'threads' in een programma te definieren. Dat zijn in feite een soort mini-processen die onafhankelijk van elkaar uitgevoerd worden maar wel gebruik (kunnen) maken van dezelfde data structuren.

Shared memory modellen zijn vooral geschikt voor multicores of multiprocessors maar eigenlijk niet voor clusters.

Distributed memory modellen: hierbij worden aparte rekenprocessen (op operating systeem niveau) gedefinieerd die met elkaar in contact treden om gezamenlijk een berekening uit te voeren. MPI is de standaard voor het uitwisselen van berichten tussen dit soort parallelle processen. Dit model is eigenlijk voor alle typen hardware geschikt, maar vergt wel veel meer inspanning van de programmeur. 

Performancematen

Er zijn diverse maten om aan te geven hoe goed een programma geparallelliseerd is. De belangrijkste zijn:

Speedup/versnelling: de rekentijd op 1 processor/core gedeeld door de rekentijd op meerdere processoren/cores. Dit geeft aan hoeveel sneller de berekening wordt door het gebruik van parallel rekenen.

Efficientie: de speedup gedeeld door het aantal processoren/cores. Dit geeft aan hoe goed de beschikbare hardware gebruik wordt. Een speedup van 2 op een dual-core processor (efficientie = 1) is vreselijk goed, maar op een cluster van 64 processoren (efficientie = 1/32) is dat nauwelijks de moeite waard.

Schaalbaarheid: de mate waarin de efficientie constant blijft als er meer processoren/cores worden ingezet. De meeste berekeningen worden minder efficient naarmate er meer processoren of cores worden ingezet. In dat geval is er een maximum aan het aantal processoren/cores dat nog nuttig is.

Verder lezen

De DCCentral site geeft een goede introductie tot distributed computing.