programmering og flerkjerneprosessorer

Kategori overført fra Linux1

programmering og flerkjerneprosessorer

Innleggav dajomu » man 08.01.2007 20:34

Nå som det blir mer og mer vanlig med flerkjernede prosessorer, blir programmeringen desto vanskeligere?
Kan en lage kode som automatisk gjenkjenner 2, 4, 8, ++ kjerner, eller må en kode spesielt med hensyn på hvor mange kjerner som er tilgjenglig?

Brukerens avatar
medlem i 224 måneder
 

Innleggav Leno » tir 09.01.2007 22:25

Hvis dette blir veldig vanskelig å utnytte tror jeg at kompilatorerne/kjernen/o_O /++ tilpasses for å gjøre slike ting enklere.

Brukerens avatar
medlem i 209 måneder
 

Innleggav ak » tir 09.01.2007 22:34

Det er et godt spørsmål, jeg har såvidt begynt å sette meg inn i det.

På SMP (flere prosessorer) maskiner er det viktig å kunne "forke", dvs starte en kopi av programmet som så kan flyttes over på en CPU. Ulempen med dette er at alt som den første kopien hadde i minne må kopieres. Fordelen er at de kan jobbe helt adskilt, bortsett fra et felles minneområde hvor de utveksler informasjon.

Alternativet til forking er threads. Da starter man en ny tråd, men den jobber på samme minneområde som den gamle. Dvs. at man slipper å kopierer alt som lå i minne, og de har lettere tilgang til den samme informasjonen. Ulempen er at disse vanskelig kan kjøres på to forskjellige CPUer, fordi det ødelegger for caching. I en moderne maskin så er det sjelden av CPUen spør minne, mellom 95% og 98% av alle forespørsler skal kunne besvares av cachen på CPUen. (Her er forskjellen mellom Celeron og "ordentlige" prosessorer, den har lite cache). Hvis to forskjellige CPUer behandler de samme dataene må cachene synkroniseres hele tiden, i verstefall kan man få langt dårligere ytelse enn om man bare hadde hatt en CPU.

I de nyeste CPU designene så deler to og to kjerner den samme cachen. Dvs at to stk godt kan jobbe om trådene til det samme programmet, men man bør helst ikke involvere en CPU som bruker annen cache. Dette minner litt om noe som kalles NUMA.

Kort fortalt så krever flere kjerner tilpasninger, men ikke mer enn SMP maskiner har gjort i mange år. Veldig mange programmer komme ikke til å utnytte dette, og noen problemer kan rett og slett ikke formuleres på en måte som tillater parallel beregning (f.eks. beregning av fibonaccis rekke).

Administrator
Brukerens avatar
medlem i 236 måneder
 

Innleggav Prognatus » ons 10.01.2007 13:12

Skriving av programmer for flere kjerner krever mer av programmereren, ja. Programtråder er svaret. Og mange tråder. Vi har lenge vært i stand til å starte tråder for én jobb, f.eks. en utskrift, og la brukeren jobbe videre i programmet mens denne tråden går. Men i fremtiden gjelder det å dele opp jobbene videre i småtråder. F.eks. en rendringsjobb for en Mpeg2-film. En rendringsjobb fordelt på fire prosessorer vil ta 25% av tiden sammenlignet med en tilsvarende jobb på én prosessor.

Flyttet til "Programmering"

Brukerens avatar
medlem i 213 måneder
 

Innleggav moma » lør 13.01.2007 10:12

Jeg kom akkurat over 2 ferske artikler som handler om parallel programmering.

DEL 1: http://www.informit.com/articles/articl ... 79545&rl=1

DEL 2: http://www.informit.com/articles/articl ... 86609&rl=1

Erfaren
Brukerens avatar
medlem i 235 måneder
 


Returner til Utvikling i Linux



Hvem er i Forumene

Registrerte brukere: Google [Bot]