Hvordan beregner du prosessorhastighet på flere kjerneprosessorer?
Adventen av økonomiske multikjernprosessorer i forbrukerproblemer reiser spørsmålet til mange brukere: hvordan beregner du effektivt den reelle hastigheten til et flerkjernesystem? Er et 4-kjerne 3Ghz-system virkelig 12Ghz? Les videre når vi undersøker.
Dagens Spørsmål & Svar-sesjon kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en gruppedriving av Q & A-nettsider.
Spørsmålet
SuperUser leser NReilingh var nysgjerrig på hvordan prosessorhastigheten for et multi-core system faktisk beregnes:
Er det riktig å si for eksempel at en prosessor med fire kjerner som kjører ved 3GHz, er faktisk en prosessor som kjører ved 12GHz?
Jeg kom en gang inn i et "Mac vs. PC" -argument (som for øvrig ikke er fokuset på dette emnet ... som var tilbake i middelskolen) med en bekjent som insisterte på at Mac-maskiner bare ble annonsert som 1Ghz-maskiner fordi de var to -prosessor G4s som kjører ved 500MHz.
På det tidspunktet visste jeg dette for å være hogwash av grunner som jeg synes er åpenbare for de fleste, men jeg har nettopp sett en kommentar på denne nettsiden med effekten av "6 kjerner x 0.2GHz = 1.2Ghz" og det fikk meg til å tenke igjen om Det er et reelt svar på dette.
Så dette er et mer eller mindre filosofisk / dypt teknisk spørsmål om semantikken til klokkefrekvensberegning. Jeg ser to muligheter:
- Hver kjerne gjør faktisk x beregninger per sekund, og totalt antall beregninger er x (kerner).
- 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.
Så hva er den riktige måten å indikere total klokkehastighet på, og enda viktigere er det enda mulig å bruke enkelkjernehastighetsnomenklatur på et flerkjernesystem?
Svaret
SuperUser-bidragsytere Mokubai hjelper med å rydde opp ting. Han skriver:
Hovedårsaken til at en quad-core 3GHz-prosessor aldri er like rask som en 12 GHz-kjerne, er å gjøre med hvordan oppgaven som kjører på den prosessoren, virker, det vil si en-tråd eller multi-threaded. Amdahls lov er viktig når du vurderer hvilke typer oppgaver du kjører.
Hvis du har en oppgave som er iboende lineær og må gjøres nøyaktig trinnvis for eksempel (et grovt enkelt 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
'en'
som hver kopi ville få verdien av'en'
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 vinne 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, Den samme forestillingen, som ifølge Amdahls lov.
Det viktigste som et multi-CPU-system gir deg, er responsivitet. På en enkeltkjerne maskin som fungerer 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 sprekker 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, gjør jobben raskt og effektivt.
Argumentet for "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 totalt antall beregninger er x (kerner).
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.