Parallel programming
PC verhoogt de:
- Snelheid waarmee een programma een bepaald aantal taken uitvoert
- Aantal taken dat een programma uitvoert in een bepaalde tijd
- Schaal van problemen die een programma aan kan
Flynn’s taxonomy
Single instruction, single data (SISD)
Er is één instructie en één data.
Dit is erg simple en computers van vroeger werkte zo. SIDS
Voorbeeld:
1 iemand snijdt 1 wortel.
Instructie: snijden
Data: wortel
Single instruction, multiple data (SIMD)
Er is één instructive en meer data. SIMD
Voorbeeld:
2 mensen snijden, 1 een wortel en de ander selderie.
Instructie: snijden
Data: wortel en selderie
Multiple instruction, single data (MISD)
Er zijn meerdere instructies en maar 1 data.
Deze versie is erg ingewikkeld en wordt daarom ook niet
vaak gebruikt.
Voorbeeld:
1 iemand snijdt en 1 iemand schilt tegelijk een wortel.
Instructie: snijden en schillen
Data: wortel
MISD
Multiple instruction, multiple data (MIMD)
Er zijn meerdere instructies en meer data. MIMD
Deze wordt het meeste gebruikt.
Voorbeeld:
1 iemand schilt een wortel en de ander snijdt een selderie.
,Instructies: schillen en snijden
Data: wortel en selderie
Single program, multiple data (SPMD)
Er is één programma, maar dat betekend
niet date r ook maar één instructie is. Een SPMD
programma kan meerdere instructies
bevatten.
Voorbeeld:
Er zijn twee mensen die hetzelfde recept
volgen. Persoon 1 schilt een wortel en persoon 2 snijdt een selderij.
Program: recept
Data: wortel en selderij
Instructie: snijden en schillen
Multiple program, multiple data
(MPMD) MPMD
Er zijn meerdere programma’s en elk
programma kan meerder instructies hebben.
Voorbeeld:
Er zijn twee mensen bezig met een verschillend
recept. Persoon 1 schilt een wortel en persoon
2 snijdt een selderij. Beide personen zijn dus
bezig met een ander recept.
Program: recepten
Data: wortel en selderij
Instructie: snijden en schillen
,Memory(geheugen)
Shared memory(gedeeld geheugen)
Alle processoren hebben toegang tot hetzelfde geheugen.
Als een processor iets veranderd in het geheugen, dan kunnen alle andere processoren die
verandering zien.
Voorbeeld:
Persoon A snijd de aardappel doormidden, persoon B ziet dat de aardappel nu doormidden is.
Processor: persoon A en persoon B
Geheugen onderdeel: aardappel
Uniform memory access (UMA)
Alle processors hebben dezelfde toegang tot het UMA
geheugen. Dit houdt ook in dat ze even snel toegang
kunnen krijgen.
Er zijn verschillende UMA architecturen en de meest
gebruikelijke is SMP.
Symmetric multiprocessing system (SMP)
Heeft twee of meer identieke processoren
gekoppeld aan een enkel gedeeld geheugen.
Een mogelijk probleem bij SMP is cache. Als twee SMP
processoren iets in hun cache hebben opgeslagen en
dit gebruiken terwijl de waarde in het geheugen
misschien al veranderd is, wordt dan dus de oude
waarde veranderd en terug gezet. Een oplossing
hiervoor is Cache coherency.
Dit zorgt ervoor dat de cache veranderd wordt als de
waarde in het geheugen veranderd wordt.
Dit is te vinden op wikipedia.
In de moderne multi core wordt dit door de processor hardware gedaan.
Non-uniform memory access (NUMA)
NUMA
Distributed memory(verdeeld
geheugen) Distributed
Elke processor heeft zijn eigen geheugen.
, Het nadeel hiervan is dat als er iets veranderd in het geheugen dat dit op een manier tegen de
andere processoren verteld moet worden.
Het voordeel is dat dit erg schaalbaar is, shared memory is minder schaalbaar. Het is makkelijk om
meer processoren met geheugen toe te voegen en hierdoor is er ook gelijk meer geheugen
beschikbaar.
Process
Een process bevat de code, data en de status informatie. Elk process is onafhankelijk en heeft zijn
eigen adresruimte(adress space) in het geheugen.
Een process kan weer bestaan uit verschillende threads.
Er zijn wel mogelijkheden om te communiceren en data te delen tussen processen, maar dit kost wel
wat moeite. Er is een inter-process communication nodig.
Het gebruiken van meerdere processen gebeurt eigenlijk alleen als erg over meerdere computers
wordt gewerkt. De voorkeur gaat naar het gebruiken van threads i.p.v. meerdere processen.
Inter-process communication (IPC)
Er zijn verschillende mogelijkheden om dit voor elkaar te krijgen:
- Sockets and pipes
- Shared memory
- Remote procedure calls
Java
Een Java applicatie die gerund wordt kan gezien worden als een process.
Thread
Een thread is onderdeel van een process, een thread is dus eigenlijk een mini process. Een thread is
een onafhankelijk pad van executies.
Threads in een process delen het adress en de data.
Voorbeeld:
Henk en Lisa koken samen in de keuken, maar doen beide hun eigen taak. Henk, Lisa en Kees gaan
een salade maken. Henk pakt de groenten, Lisa snijdt ze en Kees maakt de dressing. Als Kees klaar is
met het maken van de dressing wordt hij afgesloten en gaan de andere verder.
Process: salade maken
Threads(actief): Henk, Lisa en Kees
Threads(niet actief): Kees als die klaar is met dressing maken
Shared adress: de keuken
Shared data: ingredienten
Concurrency (structure)
De mogelijkheid om een programma op te splitsen in
delen en onafhankelijk van elkaar runnen.
De volgorde van de taken maakt niet uit.
Concurrently houdt in dat meerdere processen
overlappen in tijd, zoals in de afbeelding te zien is.
Concurrency dealt met meerdere dingen tegelijk, maar loopt niet letterlijk tegelijk.