Att allt inte kan flertrådas stämmer ju helt klart och jag kan nog hålla med om att det råder en allmän övertro på att allt kan delas upp på flera trådar. Vi behöver nya och bättre komprimeringsalgoritmer, nya och bättre dyn. prog. algoritmer och nya smartare och snabbare programmeringsspråk.
Men det som kanske skulle kunna göra störst skillnad är att kassera de nuvarande instruktionsuppsättningarna och tänka igenom en ny standard. Men det skulle å andra sidan bli helt omöjligt dyrt.
Skrivet av Frisell:
Alltid hetsiga känslor här på SweC. Utan att hata nån tycker jag Herr Torvalds har fel. Just NU må han ha en poäng, men det där kommer vara lika med 640k ram-citatet om några år. Klart det går att utnyttja fler kärnor om programmet är skrivet så...
I hela tråden har folk försökt förklara varför allt inte går att parallellisera.
Skrivet av nackskägg:
Skitsnack!
Kodar man från början med många trådar i åtanke så går det att utnyttja hur många trådar som helst. Problemet uppstår när man försöker skapa nåt som ska funka även med bara en eller två trådar.
Nej. Det går inte att köra allt flertrådat och det är inte enkelt. Sen blir det ingen egentlig skillnad för en processor att köra ett flertrådat program på en kärna jämfört med att köra samma program skrivet för en tråd, läs lite om time-sharing och hur det funkar på en CPU. Finns säkert en wikipedia-artikel.
Matris eller vektormultiplikation är klassikern när det gäller att illustrera vad som kan brytas ner i flera trådar. Naivaste ansatsen är att låta en tråd beräkna ett element i resultatmatrisen. Så multiplicerar vi en n*m-matris med en m*o-matris kan vi då bryta ner problemet i n*o stycken trådar där varje tråd multiplicerar och adderar en rad och en kolumn. Förutsatt n*o-kärnor tar det bara m^2 tid, tiden för att beräkna ett element, istället för n*o*m^2 tid på en tråd.
Någonting som inte går att dela upp i flera trådar är något som kräver mycket synkronisering. Du kan till exempel inte flertråda själva lösandet av en rubikskub, du vill av någon anledning skriva ut hur kuben ser ut efter varje vridning - i det här scenariot har du fått en lösning vridning för vridning. Vid lösning av en rubiks kub vrider du som regel aldrig mer än ett lager samtidigt. För att skriva ut varje utseende måste du ha beräknat varje steg före, det finns inga genvägar. Det finns alltså saker som inte går att dela upp i fler trådar och saker som kan delas upp. Du kan dock förmodligen beräkna den snabbaste lösningen flertrådat.
Det finns däremot andra intressanta lösningar på problemet som dynamisk programmering där man lagrar beräkningar som man kan tänkas behöva igen för att på så vis bara läsa från minne istället för att utföra en tidskrävande beräkning igen. Nackdelen är såklart att det inte är lika minneseffektivt. Men mer minne är enklare att skaffa än algoritmer som kan köras på flera trådar.