Programmering

Programmering, muticore processor

17. november 2016 af hesch (Slettet)

Hej.

Jeg beskæftiger mig med "regnetunge" programmer, og dagens trend er at udvikle muticore processorer, der kan parallel-eksekvere programmer, for at få lidt tempo. Clockfrekvensen har nået sit toppunkt.

Jeg har ( via google ) fornemmet at programmer skal være udviklet til at kunne eksekveres parallelt, førend det i praksis kan ske. Denne uddelegering af dele af regneopgaven kan - formoder jeg - ske ved at :

1)  programmøren via direktiver til compileren anviser en fornuftig uddelegering, hvor i programmet "tråde"
     kan splittes op, og hvor de skal sammenflettes til gensidig briefing/dataudveksling.

2)  compileren kan selv gennemskue en uddelegering, hvor opgaven fordeles i "tasks", der har en gensidig
     ubetydelig grænseflade ( det rager ikke jer andre, hvad jeg laver ).

3)  Processoren kan selv, under program eksekvering, gennemskue en uddelegering ( tror jeg ikke på ).

Mit spørgsmål er, om nogen har erfaring med hvordan det foregår, altså hvordan man i praksis udvikler/compilerer programmer med henblik på en effektiv udnyttelse af en multicore processors 4 - 8 kerner ?


Brugbart svar (1)

Svar #1
30. januar 2017 af Runeanielsen (Slettet)

Hej Hesch, jeg ved ikke om du har fundet dit svar, men jeg kan komme med nogle af mine erfaringer her. 

Den mest benyttede metode er ved at dele ens program op i tråde, som du beskriver i 1. De fleste programmer i dag, benytter ikke flere kerner, det er noget udvikleren af systemet skal sørge for, og som du beskriver i 3, så vil det operative system ikke fordele dit programs opgaver ud på cores/tråde af sig selv.

Mange sprog i dag tillader, at man kan splitte ens program op i tråde, du vil ofte bruge en tråd per kerne og store objekt orienterede sprog, som Java og C# kommer med libraries der har indbygget objekter til håndtering af tråde. Hvert sprog har sin egen tilgang til håndtering af tråde, men der kommer ofte når problemstillinger i forbindelse med systemer med flere tråde, da de kan være svære at debugge. 

Hvis du ønsker, at snakke mere om det, eller du kunne tænke dig et kode eksempel skriver du bare tilbage. 


Svar #2
30. januar 2017 af hesch (Slettet)

Tak, jeg vender tilbage.


Svar #3
30. januar 2017 af hesch (Slettet)

#1:  Der var - for år tilbage - noget der hed "core-diagrammer", ( tror nu ikke at navnet skulle indikere "multicore-diagrammer" ). Men disse ville tilfældigvis egne sig til en anskueliggørelse af en multicore-proces.

Procesbokse i diagrammet kunne forsynes med en ' * ', hvilket betød at processen var en gentagen proces, fx inkluderet i en do . . . until.  Var boksen forsynet med en ' o ' betød det netop at processen forløb parallelt med andre processer.  Ligeledes kunne man illustrere hvilken proces et interrupt skulle antaste.

Et sådant diagram kan man naturligvis formulere skriftligt, altså lade en compiler forstå og rette ind efter.

Disse diagrammer skulle tegnes efter visse regler, der medførte at hvis man vendte tegningen 90º opstod der et hierarkisk diagram, og det var smart ( hvis altså man fulgte tegnereglerne ).

Du skriver at der er problemer med debugning af multicore-programmer: Ja, da, der er mange problemer med dem, de er noget fanden har skabt, sekventielle programmer er 1000 gange lettere at bevare kontrollen med.

Noget andet er, at for at kunne udnytte disse multi-cores skal man nogenlunde kende eksekveringstiden for hver delproces i en tråd. Ellers må enkelte tråde stå og afvente en enkelt tråds langsommelighed, og der er ingen hjælp at hente for den langsomme tråd, med mindre en overordnet, nærmest kunstig intelligent proces ( AI ) griber ind og finder hjælp. Men en sådan AI-proces bliver i sig selv mest effektiv, ved selv at være en multicore-proces: Det er "skruen uden ende" eller "der er et hul midt i spanden, kære Lisbeth" ( Dirch Passer ). Jeg roder for tiden med billedbehandling og mønstergenkendelse i billeder. Billederne varierer i størrelse ( Megapixel ), bredde/højde, farvedybde, omfanget af kanter og deres facon i billedet, osv.  Så det er jo umuligt at optimere en generel trådstruktur med henseende til variationen i data (billedet).

Men, når alt dette er sagt, må du meget gerne vedhæfte et ( kort ) programeksempel ( C# ).

Du er ny her, så bemærk hvilke formater du kan vedhæfte i. En pdf-fil vil være fin ( der kan også inkluderes tegninger mv. )

Mange tak.

PS:  Jeg har også denne tråd kørende:  https://www.studieportalen.dk/forums/thread.aspx?id=1721940


Skriv et svar til: Programmering, muticore processor

Du skal være logget ind, for at skrive et svar til dette spørgsmål. Klik her for at logge ind.
Har du ikke en bruger på Studieportalen.dk? Klik her for at oprette en bruger.