15Aug
Tilkomsten af økonomiske multi-core processorer af forbrugerkvalitet rejser spørgsmålet for mange brugere: Hvordan beregner du effektivt den reelle hastighed af et multikernesystem? Er et 4-core 3Ghz system virkelig 12Ghz? Læs videre som vi undersøger.
Dagens Spørgsmål &Svar session kommer til os høflighed af SuperUser-en underafdeling af Stack Exchange, en community-drive gruppering af Q & A websteder.
Spørgsmål
SuperUser læser NReilingh var nysgerrig, hvordan processorhastigheden for et multikernesystem faktisk beregnes:
Er det korrekt at sige, at en processor med fire kerner hver kører ved 3GHz faktisk er en processor, der kørerved 12GHz?
Jeg kom en gang ind i et "Mac vs. PC" argument( som forresten IKKE er fokus for dette emne. .. det var tilbage i mellemskolen) med en bekendt, der insisterede på, at Mac'er kun blev annonceret som 1GHz maskiner, fordi de vardual-processor G4'er der kører ved 500MHz.
På det tidspunkt vidste jeg, at dette var svinekød af grunde, som jeg synes, er tydeligt for de fleste mennesker, men jeg har lige set en kommentar på denne hjemmeside til effekten af "6 kerner x 0.2GHz = 1.2Ghz" og det fik mig til at tænke igen omom der er et reelt svar på dette.
Så dette er et mere eller mindre filosofisk / dybt teknisk spørgsmål om semantikken af clock hastighed beregning. Jeg ser to muligheder:
- Hver kerne gør faktisk x beregninger pr. Sekund, og det totale antal beregninger er x( kerner).
- Urens hastighed er snarere et antal af cyklusser, processoren går igennem i løbet af et sekund, så længe alle kerner kører med samme hastighed, forbliver hastigheden af hver urcyklus den samme uanset hvor mange kernereksisterer. Med andre ord, Hz =( core1Hz + core2Hz +. ..) / kerner.
Så hvad er den rigtige måde at betegne den samlede clock-hastighed på, og endnu vigtigere er det endda muligt at bruge single-core-hastighedsnomenklatur på et multikernesystem?
Svaret
SuperUser-bidragsydere Mokubai hjælper med at rydde op. Han skriver:
Hovedårsagen til, at en quad-core 3GHz-processor aldrig er så hurtig som en 12GHz-enkeltkerne, er at gøre med, hvordan opgaven kører på den pågældende processor, dvs. en-tråd eller multi-threaded. Amdahls lov er vigtig, når man overvejer de typer opgaver, du kører.
Hvis du har en opgave, der er iboende lineær og skal gøres præcist trin for trin som( et groft simpelt program)
10: a = a + 1 20: goto 10Derefter afhænger opgaven højt på resultatetaf det foregående pass og kan ikke køre flere kopier af sig selv uden at ødelægge værdien af 'a', da hver kopi ville få værdien af 'a' på forskellige tidspunkter og skrive den tilbage forskelligt. Dette begrænser opgaven til en enkelt tråd og dermed kan opgaven kun køre på en enkelt kerne på et givent tidspunkt, hvis det skulle køre på flere kerner, så ville synkroniseringskorruptionen ske. Dette begrænser det til 1/2 af cpu-effekten i et dual-core system, eller 1/4 i et quad-kernesystem.
Tag nu en opgave som:
10: a = a + 1 20: b = b + 1 30: c = c + 1 40: d = d + 1 50: goto 10Alle disse linjer er uafhængige og kunneopdeles i 4 separate programmer som den første og løber på samme tid, hver enkelt i stand til effektivt at udnytte den fulde kraft af en af kernerne uden noget synkroniseringsproblem, er det her, hvor Amdahls lov kommer ind i den.
Så hvis du har en enkelt gevind applikation med brute force beregninger, vil den enkle 12GHz processor vinde hænderne ned, hvis du på en eller anden måde kan gøre opgaven opdelt i separate dele og multi-threaded så de 4 kerner kunne komme tæt på, men ikke helt nå, den samme præstation, som ifølge Amdahls lov.
Det vigtigste, som et multi-CPU-system giver dig, er lydhørhed. På en enkeltmaskine, der arbejder hårdt, kan systemet virke trægt, da det meste af tiden kunne bruges af en opgave, og de andre opgaver kun kører i korte udbrud mellem den større opgave, hvilket resulterer i et system, der virker trægt eller dømmende. På et multikernesystem får den store opgave en kerne, og alle de andre opgaver spiller på de andre kerner, der gør deres job hurtigt og effektivt.
Argumentet om "6 kerner x 0.2GHz = 1.2Ghz" er skidt i enhver situation undtagen hvor opgaverne er perfekt parallelle og uafhængige. Der er et stort antal opgaver, der er meget parallelle, men de kræver stadig en form for synkronisering. Håndbremse er en video trancoder, der er meget god til at bruge alle de tilgængelige CPU'er, men det kræver en kerneproces for at holde de andre tråde fyldt med data og indsamle de data, de er færdige med.
- Hver kerne gør faktisk x beregninger pr. Sekund, og det totale antal beregninger er x( kerner).
Hver kerne er i stand til at lave x beregninger pr. Sekund, forudsat at arbejdsbyrden er egnet parallelt. På et lineært program er alt 1 kernen.
- Urens hastighed er snarere et antal af cyklusser, processoren går igennem i løbet af et sekund, så længe alle kerner kører med samme hastighed, forbliver hastigheden af hver urcyklus den samme uanset hvor mange kernereksisterer. Med andre ord, Hz =( core1Hz + core2Hz +. ..) / kerner.
Jeg synes, det er en fejl at tro, at 4 x 3GHz = 12GHz, der ydes matematikværkerne, men du sammenligner æbler med appelsiner og summen bare ikke er rigtige, GHz kan ikke simpelthen tilføjes sammen til enhver situation. Jeg ville ændre det til 4 x 3GHz = 4 x 3GHz.
Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Tjek den fulde diskussionstråd her.