Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en community-drive-gruppering av Q & A-nettsteder.
Spørsmålet
SuperUser leser NReilingh var nysgjerrig på hvordan prosessorhastigheten for et multikjernesystem faktisk beregnes:
Is it correct to say, for example, that a processor with four cores each running at 3GHz is in fact a processor running at 12GHz?
I once got into a “Mac vs. PC” argument (which by the way is NOT the focus of this topic… that was back in middle school) with an acquaintance who insisted that Macs were only being advertised as 1Ghz machines because they were dual-processor G4s each running at 500MHz.
At the time I knew this to be hogwash for reasons I think are apparent to most people, but I just saw a comment on this website to the effect of “6 cores x 0.2GHz = 1.2Ghz” and that got me thinking again about whether there’s a real answer to this.
So, this is a more-or-less philosophical/deep technical question about the semantics of clock speed calculation. I see two possibilities:
- Each core is in fact doing x calculations per second, thus the total number of calculations is x(cores).
- Clock speed is rather a count of the number of cycles the processor goes through in the space of a second, so as long as all cores are running at the same speed, the speed of each clock cycle stays the same no matter how many cores exist. In other words, Hz = (core1Hz+core2Hz+…)/cores.
Så hva er den riktige måten å betegne den totale klokkens hastighet på, og enda viktigere er det enda mulig å bruke enkelkjernehastighetsnomenklatur på et flerkjernesystem?
Svaret
SuperUser bidragsytere Mokubai hjelper til med å rydde opp ting. Han skriver:
The main reason why a quad-core 3GHz processor is never as fast as a 12GHz single core is to do with how the task running on that processor works, i.e. single-threaded or multi-threaded. Amdahl’s Law is important when considering the types of tasks you are running.
If you have a task that is inherently linear and has to be done precisely step-by-step such as (a grossly simple program)
10: a = a + 1
20: goto 10
Da avhenger oppgaven høyt på resultatet av forrige pass og kan ikke kjøre flere kopier av seg selv uten å ødelegge verdien av
'a'
som hver kopi ville få verdien av
'a'
på forskjellige tidspunkter og skrive det på en annen måte. Dette begrenser oppgaven til en enkelt tråd, og dermed kan oppgaven bare en gang kjøres på en enkelt kjerne til enhver tid, hvis den skulle kjøre på flere kjerner, så ville synkroniseringskorrupsjonen skje. Dette begrenser det til 1/2 av cpu-kraften i et dual-core system, eller 1/4 i et quad-kjernesystem.
Ta nå en oppgave som:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
Alle disse linjene er uavhengige og kan deles inn i 4 separate programmer som den første og løpe samtidig, hver som er i stand til å effektivt utnytte den fulde kraften til en av kjernene uten noe synkroniseringsproblem, er dette her Amdahls lov kommer inn i den.
Så hvis du har en enkelt gjenget applikasjon som gjør brute force-beregninger, vil den enkle 12 GHz-prosessoren vende hendene ned, hvis du på en eller annen måte kan gjøre oppgaven delt inn i separate deler og multi-threaded, så kunne de 4 kjernene komme nær, men ikke helt, samme ytelse, som ifølge Amdahls lov.
Det viktigste som et multi-CPU-system gir deg, er responsivitet. På en enkeltkjerne maskin som virker hardt, kan systemet virke sløvt, da det meste av tiden kan brukes av en oppgave, og de andre oppgavene bare kjører i korte utbrudd mellom den større oppgaven, noe som resulterer i et system som virker trist eller dømmende. På et flerkjernesystem får den tunge oppgaven en kjerne, og alle de andre oppgavene spiller på de andre kjernene, og gjør jobben raskt og effektivt.
Argumentet med "6 kjerner x 0.2GHz = 1.2Ghz" er søppel i alle situasjoner unntatt der oppgaver er perfekt parallelle og uavhengige. Det er et stort antall oppgaver som er svært parallelle, men de krever fortsatt en form for synkronisering. Håndbrems er en video transkoder som er veldig bra på å bruke alle CPUer tilgjengelig, men det krever en kjerneprosess for å holde de andre tråder fylt med data og samle inn dataene de er ferdig med.
Hver kjerne gjør faktisk x beregninger per sekund, og dermed er totalt antall beregninger x (kjerner).
Hver kjerne er i stand til å gjøre x beregninger per sekund, forutsatt at arbeidsbelastningen er egnet parallelt, på et lineært program alt du har er 1 kjerne.
Klokkehastigheten er ganske mye et antall av antall sykluser prosessoren går gjennom i løpet av et sekund, så lenge alle kjerner kjører i samme hastighet, forblir hastigheten til hver klokke-syklus den samme uansett hvor mange kjerner eksisterer. Med andre ord, Hz = (core1Hz + core2Hz + …) / cores.
Jeg tror det er en feil å tro at 4 x 3GHz = 12GHz, gitt matematikkene, men sammenligner epler med appelsiner, og summene er ikke riktige. GHz kan ikke bare legges sammen for hver situasjon. Jeg ville bytte den til 4 x 3GHz = 4 x 3GHz.
Har du noe å legge til forklaringen? Lyde av i kommentarene. Vil du lese flere svar fra andre tech-savvy Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her.