Fremkomsten av økonomiske prosessorer med flere kjerner, som reiser forbruker, reiser spørsmålet for mange brukere: hvordan beregner du effektivt den virkelige hastigheten til et flerkjernesystem? Er et 4-kjerners 3Ghz-system virkelig 12Ghz? Les videre når vi undersøker.
Dagens spørsmål og svar-økt kommer til oss med tillatelse fra SuperUser - en underavdeling av Stack Exchange, en grupperingsgruppering av spørsmål og svar-nettsteder.
Spørsmålet
SuperUser-leser NReilingh var nysgjerrig på hvordan prosessorhastigheten for et flerkjernesystem faktisk beregnes:
Er det riktig å si for eksempel at en prosessor med fire kjerner hver som kjører på 3GHz faktisk er en prosessor som kjører på 12 GHz?
Jeg kom en gang inn i et "Mac vs. PC" -argument (som forresten IKKE er fokus for dette emnet ... som var tilbake på ungdomsskolen) med en bekjent som insisterte på at Mac-maskiner bare ble annonsert som 1 GHz-maskiner fordi de var doble -prosessor G4s som hver kjører på 500 MHz.
På det tidspunktet visste jeg at dette var hogwash av grunner som jeg tror er tydelig for folk flest, men jeg så nettopp en kommentar på dette nettstedet til effekten av "6 kjerner x 0,2 GHz = 1,2 GHz" og det fikk meg til å tenke igjen det er et reelt svar på dette.
Så dette er et mer eller mindre filosofisk / dypt teknisk spørsmål om semantikken til klokkehastighetsberegning. Jeg ser to muligheter:
- Hver kjerne gjør faktisk x beregninger per sekund, og dermed er totalt antall beregninger x (kjerner).
- Klokkehastighet er snarere en telling av antall sykluser prosessoren går gjennom i løpet av et sekund, så så lenge alle kjerner kjører med samme hastighet, forblir hastigheten til hver klokkesyklus den samme uansett hvor mange kjerner som eksisterer . Med andre ord, Hz = (core1Hz + core2Hz + ...) / kjerner.
Så hva er den riktige måten å betegne den totale klokkehastigheten, og enda viktigere, er det til og med mulig å bruke enkjerners hastighetsnomenklatur på et flerkjernesystem?
Svaret
SuperUser-bidragsytere Mokubai hjelper med å rydde opp i ting. Han skriver:
Hovedårsaken til at en firekjerners 3GHz-prosessor aldri er så rask som en 12 GHz enkeltkjerne, er å gjøre med hvordan oppgaven som kjører på den prosessoren fungerer, dvs. enkelttrådet eller flertrådet. Amdahls lov er viktig når du vurderer hvilke typer oppgaver du kjører.
Hvis du har en oppgave som iboende er lineær og må gjøres nøyaktig trinnvis, for eksempel (et grovt enkelt program)
10: a = a + 120: Hver 10.Da avhenger oppgaven sterkt av resultatet av forrige pass, og kan ikke kjøre flere kopier av seg selv uten å ødelegge verdien av
'en'som hvert eksemplar ville få verdien av'en'til forskjellige tider og skrive det tilbake annerledes. Dette begrenser oppgaven til en enkelt tråd, og dermed kan oppgaven bare kjøre på en enkelt kjerne til enhver tid, hvis den skulle kjøres på flere kjerner, ville synkroniseringskorrupsjonen skje. Dette begrenser den til 1/2 av CPU-effekten til et dual core system, eller 1/4 i et quad core system.Ta nå en oppgave som:
10: a = a + 120: b = b + 130: c = c + 140: d = d + 150: Hver 10.Alle disse linjene er uavhengige og kan deles i fire separate programmer som den første og kjøres samtidig, hver i stand til å utnytte den fulle kraften til en av kjernene effektivt uten synkroniseringsproblemer, det er her Amdahls lov kommer inn i det.
Så hvis du har en enkelt gjenget applikasjon som gjør brute force-beregninger, vil den ene 12 GHz-prosessoren vinne hendene, hvis du på en eller annen måte kan gjøre oppgaven delt i separate deler og flertrådet, kan de 4 kjernene komme nær, men ikke helt rekkevidde, samme forestilling, som i henhold til Amdahls lov.
Det viktigste som et multi-CPU-system gir deg, er respons. På en enkeltkjernemaskin som jobber hardt, kan systemet virke tregt, ettersom det meste av tiden kan brukes av en oppgave, og de andre oppgavene bare kjører i korte brister mellom den større oppgaven, noe som resulterer i et system som virker tregt 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 jobbene sine raskt og effektivt.
Argumentet "6 kjerner x 0,2 GHz = 1,2 GHz" er søppel i alle situasjoner, bortsett fra der oppgavene er helt parallelle og uavhengige. Det er et stort antall oppgaver som er svært parallelle, men de krever fortsatt en eller annen form for synkronisering. Håndbrekk er en videokonverterer som er veldig flink til å bruke alle tilgjengelige CPUer, men det krever en kjerneprosess for å holde de andre trådene 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 arbeidsmengden er egnet parallell, på et lineært program er alt du har en kjerne.
- Klokkehastighet er snarere en telling av antall sykluser prosessoren går gjennom i løpet av et sekund, så så lenge alle kjerner kjører med samme hastighet, forblir hastigheten til hver klokkesyklus den samme uansett hvor mange kjerner som eksisterer . Med andre ord, Hz = (core1Hz + core2Hz + ...) / kjerner.
Jeg tror det er en feilslutning å tenke at 4 x 3GHz = 12 GHz, gitt at matematikken fungerer, men du sammenligner epler med appelsiner, og summene er bare ikke riktige, GHz kan ikke bare legges sammen for enhver situasjon. Jeg vil endre det til 4 x 3GHz = 4 x 3GHz.
Har du noe å legge til forklaringen? Hør av i kommentarene. Vil du lese flere svar fra andre teknologikyndige Stack Exchange-brukere? Sjekk ut hele diskusjonstråden her .