15Aug

Hvordan beregner du prosessorhastighet på flere kjerneprosessorer?

Tilkomsten av økonomiske multikjerneprosessorer fra forbrukerproblemer reiser spørsmålet til mange brukere: hvordan beregner du effektivt den reelle hastigheten til et flerkjernesystem? Er et 4-kjernes 3Ghz-system virkelig 12Ghz? Les videre når vi undersøker.

Dagens Spørsmål &Svar-økt kommer til oss med høflighet av SuperUser-en underavdeling av Stack Exchange, en fellesskapsdrift gruppering av Q & A-nettsteder.

Spørsmålet

SuperUser-leseren NReilingh var nysgjerrig på hvordan prosessorhastigheten for et multikjernesystem faktisk beregnes:

Er det riktig å si at en prosessor med fire kjerner som kjører på 3GHz faktisk er en prosessor som kjørerpå 12GHz?

Jeg kom en gang 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 vardual-processor G4s som kjører på 500MHz.

På det tidspunktet visste jeg at dette var hogwash av grunner som jeg synes er tydelig for de fleste, men jeg har nettopp sett en kommentar på denne nettsiden med effekten av "6 kerner x 0.2GHz = 1.2Ghz" og det fikk meg til å tenke igjen omom 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:

  1. Hver kjerne gjør faktisk x beregninger per sekund, og totalt antall beregninger er x( kjerner).
  2. Klockhastighet er ganske mye 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 kjernereksistere. Med andre ord, Hz =( core1Hz + core2Hz +. ..) / cores.

Så hva er den riktige måten å betegne total klokkehastighet på, og enda viktigere er det enda mulig å bruke enkelkjernehastighetsnomenklatur på et flerkjernesystem?

Svaret

SuperUser-bidragsyterne Mokubai hjelper til med å rydde opp ting. Han skriver:

Hovedårsaken til at en quad-core 3GHz-prosessor aldri er så rask som en 12GHz-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

Deretter avhenger oppgaven høyt på resultatetav forrige pass og kan ikke kjøre flere kopier av seg selv uten å ødelegge verdien av 'a' da hver kopi ville få verdien av 'a' på forskjellige tidspunkter og skrive den tilbake 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 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 kunnedeles inn i 4 separate programmer som den første og løp samtidig, hver som er i stand til å effektivt utnytte den fulde kraften til en av kjernene uten noe synkroniseringsproblem, er det 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 gjør oppgaven delt inn i separate deler og multi-threaded, så kunne de 4 kjernene komme nær, men ikke helt nå, samme ytelse, 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 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.

  1. Hver kjerne gjør faktisk x beregninger per sekund, og totalt antall beregninger er 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.

  1. Klockhastighet er ganske mye 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 kjernereksistere. 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.