Hur beräknar du processorhastighet på processorer med flera kärnor?
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 Question & Answer-session 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 exempelvis säga att en processor med fyra kärnor som körs vid 3GHz faktiskt är en processor som körs vid 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 var dubbla -processor G4s som körs vid 500MHz.
Vid det ögonblicket visste jag det här för att vara svamptank av skäl 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 om 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 klockhastighetberä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).
- Klockhastigheten ä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ärnor som existerar . 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 fyrhjulsdator med 3G-processor aldrig är lika snabb som en 12 GHz-kärna är att göra med 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 10
Då beror uppgiften högt på resultatet av det föregående passet och kan inte köra flera kopior av sig själv utan att korrumpera värdet av
'en'
som varje kopia skulle få värdet av'en'
vid olika tidpunkter och skriva tillbaka det annorlunda. 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 10
Alla dessa linjer är oberoende och kan delas upp i 4 separata program som den första och köra samtidigt, var och en som effektivt kan utnyttja full kraft av en av kärnorna utan något synkroniseringsproblem, det är här Amdahls lag kommer in i det.
Så om du har en enda gängad applikation som gör brute force-beräkningar skulle den enkla 12 GHz-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, jobbar snabbt och effektivt.
Argumentet om "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 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.
- Klockhastigheten ä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ärnor som existerar . Med andra ord Hz = (core1Hz + core2Hz + ...) / cores.
Jag tror att det är en felaktighet att tro att 4 x 3GHz = 12GHz, som matematiken fungerar, men du jämför apor till 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.