Hjemmeside » hvordan » Hvordan beregner du processorhastighed på multi-core processorer?

    Hvordan beregner du processorhastighed på multi-core processorer?

    Adventen 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 og Svar session kommer til os med venlig hilsen af ​​SuperUser-en underafdeling af Stack Exchange, en community-drive gruppering af Q & A websteder.

    Spørgsmålet

    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ører ved 12GHz?

    Jeg kom engang ind i et "Mac vs. PC" -argument (som forresten IKKE er fokuset på dette emne ... det var tilbage i mellemskolen) med en bekendtskab, der insisterede på, at Mac'er kun blev annonceret som 1Ghz-maskiner, fordi de var dobbelt -processor G4'er der kører ved 500MHz.

    På det tidspunkt vidste jeg, at dette var svinekød af grunde, som jeg synes, det er tydeligt for de fleste mennesker, men jeg har lige set en kommentar på denne hjemmeside til virkningen af ​​"6 kerner x 0.2GHz = 1.2Ghz" og det fik mig til at tænke igen om der er et reelt svar på dette.

    Så dette er et mere eller mindre filosofisk / dybt teknisk spørgsmål om semantikken til beregning af urhastighed. Jeg ser to muligheder:

    1. Hver kerne gør faktisk x beregninger pr. Sekund, og det totale antal beregninger er x (kerner).
    2. Urhastighed 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 kerner der findes . 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 anvende single-core-hastighedsnomenklatur på et multikernesystem?

    Svaret

    SuperUser bidragsydere Mokubai hjælper med at rydde op. Han skriver:

    Den vigtigste årsag 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 virker, dvs. single-threaded 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 10 

    Derefter afhænger opgaven meget af resultatet af det foregående pass og kan ikke køre flere kopier af sig selv uden at ødelægge værdien af 'en' som hver kopi ville få værdien af 'en' på forskellige tidspunkter og skrive det 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 10 

    Alle disse linjer er uafhængige og kan opdeles i 4 separate programmer som den første og køre på samme tid, hver som er i stand til effektivt at udnytte den fulde kraft af en af ​​kernerne uden noget synkroniseringsproblem, det er her, hvor Amdahls lov kommer ind i det.

    Så hvis du har en enkelt gevind-applikation, der udfører brute force-beregninger, vil den enkelte 12 GHz-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å kunne de 4 kerner 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 svagt eller dømmende . På et multikernesystem får den store opgave en kerne, og alle de andre opgaver spiller på de andre kerner, 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.

    1. 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 passer parallelt, på et lineært program er alt 1 kerne.

    1. Urhastighed 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 kerner der findes . Med andre ord, Hz = (core1Hz + core2Hz + ...) / kerner.

    Jeg tror, ​​det er en fejl at tro, at 4 x 3GHz = 12GHz, der ydes matematikværkerne, men sammenligner æbler med appelsiner, og summen er bare ikke 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.