2020-10-15, 09:30
  #1
Bannlyst
Hmm en tanke här. Undrar så lite smått varför är all kod/program/os gjort för att endast köras på en kärna. Man kan se det i aktivitetshanteraren. Vore det inte superbt om det vore mer jämnt fördelat över flera "cores". Ja inser förstås att en del "tasks" är gjorda för flertrådat men men..
__________________
Senast redigerad av Sandwish77 2020-10-15 kl. 09:34.
Citera
2020-10-15, 09:59
  #2
Medlem
Det är inte ett självändamål att göra något multicore utan man har oftast en sekventiell huvudloop i varje process. Behöver man parallell processering så kodar man ofta separata processer eller fyller trådkapaciteten för varje kärna så sköter OSet det själv. Problemet är ofta att man ska utnyttja samma datakällor, och då man inte kan accessa dem samtidigt ändå, så serialiserar man (semaforer/lås) så det blir inte parallellt oavsett.
Citera
2020-10-15, 10:04
  #3
Medlem
All kod är inte gjord för att bara köras på en kärna (eller en tråd). Grafikhantering, video-rendering och sådant passar utmärkt för att köras parallellt på flera kärnor eftersom det finns ett stort antal beräkningar att göra som är oberoende av varandra.

Andra typer av kod är knepigare. Om en beräkning är beroende av resultatet av den föregående beräkningen så hjälper det inte med flera kärnor eftersom det inte finns något att räkna på ännu.

Man kommer inte snabbare från Stockholm till Göteborg mitt i natten bara för att motorvägen har flera filer. I rusningstid kan däremot flera bilar komma fram på samma tid.
Citera
2020-10-15, 19:50
  #4
Medlem
Fleamans avatar
Att köra ett program som utnyttjar ett flertal kärnor är dyrt - kärnorna måste kommunicera med varandra vilket är tidskrävande. Hur tidskrävande beror såklart på antalet kärnor som är inblandade samt hur de är sammankopplade. Dessutom måste koden skrivas med syfte att köras på flera kärnor, vilket innebär att särskilda tekniker måste användas. En genomsnittlig applikation kommer inte tjäna på att utnyttja mer än en kärna eftersom kostnaden helt enkelt blir högre än vinningen.

Den sorts program som tjänar på att köras parallellt på många kärnor innehåller typiskt tunga matematiska beräkningar, t.ex. simulation av fysiska eller biologiska modeller.

Kod för "vanliga" program kan istället parallelliseras genom multitrådning.
Citera
2020-10-15, 21:08
  #5
Medlem
Citat:
Ursprungligen postat av Fleaman
Kod för "vanliga" program kan istället parallelliseras genom multitrådning.

En stor vits med multitrådning är väl just att fördela lasten på flera kärnor. Men det är ju sant att synkronisering mellan trådar och processer kräver resurser.
Citera
2020-10-15, 21:23
  #6
Medlem
Fleamans avatar
Citat:
Ursprungligen postat av Hominem
En stor vits med multitrådning är väl just att fördela lasten på flera kärnor. Men det är ju sant att synkronisering mellan trådar och processer kräver resurser.
Jo, det stämmer till viss del. Nuförtiden finns ju det som Intel kallar för hyperthreading, vilket innebär att flera trådar kan köras på samma core.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in