15Aug
Tillkomsten av ekonomiska multikärnprocessorer av konsumentkvalitet ger upphov till frågan för många användare: hur kan du effektivt beräkna den verkliga hastigheten hos ett flerkärnigt system?Är ett 4-kärnigt 3Ghz-system verkligen 12Ghz? Läs vidare när vi undersöker.
Dagens fråga &Svarssession kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-drive-gruppering av Q & A-webbplatser.
Frågan
SuperUser-läsaren NReilingh var nyfiken på hur processorns hastighet för ett flerkärnigt system faktiskt beräknas:
Är det korrekt att säga att en processor med fyra kärnor som körs vid 3GHz faktiskt är en processor som körsvid 12GHz?
Jag kom en gång i ett "Mac vs. PC" -argument( som förresten är INTE fokus för detta ämne. .. som var tillbaka i mellanskolan) med en bekant som insisterade på att Macar bara annonserades som 1Ghz-maskiner eftersom de vardual-processor G4s som körs vid 500MHz.
Vid det ögonblicket visste jag att det här var en svamp av orsaker som jag tycker är uppenbart för de flesta, men jag såg bara en kommentar på den här webbplatsen med effekten av "6 kärnor x 0.2GHz = 1.2Ghz" och det fick mig att tänka igen omom det finns ett riktigt svar på detta.
Så det här är en mer eller mindre filosofisk / djup teknisk fråga om semantiken för klockhastighetsberäkning. Jag ser två möjligheter:
- Varje kärna gör faktiskt x beräkningar per sekund, så det totala antalet beräkningar är x( kärnor).
- Klockhastighet är snarare ett räkning av antalet cykler processorn går igenom inom en sekund, så länge som alla kärnor går i samma hastighet, fortsätter hastigheten för varje klockcykel densamma oavsett hur många kärnorexistera. Med andra ord Hz =( core1Hz + core2Hz +. ..) / cores.
Så vad är det lämpliga sättet att beteckna den totala klockhastigheten och ännu viktigare är det även möjligt att använda enkelkärnans hastighetsnomenklatur på ett system med flera kärnor?
Svaret
SuperUser-bidragsgivare Mokubai hjälper till med att rensa upp saker. Han skriver:
Den främsta anledningen till att en fyrhjulig 3GHz-processor aldrig är lika snabb som en 12GHz-kärna, handlar om hur uppgiften som körs på den där processorn fungerar, dvs enkelgängad eller multi-threaded. Amdahls lag är viktigt när du överväger vilka typer av uppgifter du kör.
Om du har en uppgift som är iboende linjär och måste göras exakt steg för steg som( ett grovt enkelt program)
10: a = a + 1 20: goto 10Sedan beror uppgiften högt på resultatetav det föregående passet och kan inte köra flera kopior av sig själv utan att korrumpera värdet av 'a' eftersom varje kopia skulle få värdet av 'a' vid olika tidpunkter och skriva tillbaka det på ett annat sätt. Detta begränsar uppgiften till en enda tråd och sålunda kan uppgiften bara en gång köra på en enda kärna vid en given tidpunkt, om det skulle köras på flera kärnor då synkroniseringskorruptionen skulle hända. Detta begränsar det till 1/2 av cpu-effekten i ett dubbelkärnsystem, eller 1/4 i ett fyrhjulsystem.
Ta nu en uppgift som:
10: a = a + 1 20: b = b + 1 30: c = c + 1 40: d = d + 1 50: goto 10Alla dessa linjer är oberoende och kandelas upp i 4 separata program som första och springa samtidigt, var och en som effektivt kan utnyttja den fulla kraften i en av kärnorna utan något synkroniseringsproblem, är det här Amdahls lag kommer in i det.
Så om du har en enda gängad applikation som gör brutna kraftberäkningar skulle den enkla 12GHz-processorn vinna händerna, om du på något sätt kan göra uppgiften uppdelad i separata delar och med flera trådar så kan de 4 kärnorna komma nära, men inte riktigt, samma prestation, enligt Amdahls lag.
Det viktigaste som ett multi-CPU-system ger dig är lyhördhet. På en enstaka maskin som arbetar hårt kan systemet verka trögt eftersom det mesta av tiden kan användas av en uppgift och de andra uppgifterna endast löper i korta sprickor mellan den större uppgiften, vilket resulterar i ett system som verkar trögt eller dömande. På ett system med flera kärnor får den tunga uppgiften en kärna och alla andra uppgifter spelar på de andra kärnorna och gör jobbet snabbt och effektivt.
Argumentet med "6 kärnor x 0.2GHz = 1.2Ghz" är skräp i alla situationer utom där uppgifterna är helt parallella och oberoende. Det finns ett stort antal uppgifter som är mycket parallella, men de kräver fortfarande någon form av synkronisering. Handbroms är en video trancoder som är mycket bra på att använda alla CPU: er tillgängliga men det kräver en kärnprocess för att hålla de andra trådarna fyllda med data och samla in de data som de är färdiga med.
- Varje kärna gör faktiskt x beräkningar per sekund, så det totala antalet beräkningar är x( kärnor).
Varje kärna kan göra x-beräkningar per sekund, förutsatt att arbetsbelastningen är lämplig parallell, på ett linjärt program är allt 1 kärna.
- Klockhastighet är ganska en räkning av antalet cykler processorn går igenom inom en sekund, så länge som alla kärnor går i samma hastighet, fortsätter hastigheten för varje klockcykel densamma oavsett hur många kärnorexistera. Med andra ord Hz =( core1Hz + core2Hz +. ..) / cores.
Jag tycker att det är en missuppfattning att tänka att 4 x 3GHz = 12GHz, som matematiken fungerar, men du jämför äpplen med apelsiner och summan bara inte är rätt. GHz kan inte helt enkelt läggas till för varje situation. Jag skulle ändra den till 4 x 3GHz = 4 x 3GHz.
Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.