Kaip skaičiuojate procesoriaus greitį daugiašaliuose procesoriuose?
Ekonominių vartotojų klasės kelių branduolių procesorių atsiradimas kelia klausimą daugeliui vartotojų: kaip efektyviai apskaičiuojate tikrojo kelių branduolinių sistemų greitį? Ar 4 branduolių 3Ghz sistema tikrai 12GHz? Skaitykite, kai mes tiriame.
Šiandienos „Klausimų ir atsakymų“ sesijos metu mes galime pasveikinti „SuperUser“ - „Stack Exchange“ padalinį, bendruomenės diską „Q&A“ svetainių grupavimas.
Klausimas
„SuperUser“ skaitytuvas NReilingh buvo įdomus, kaip daugelio branduolinių sistemų procesoriaus greitis yra iš tikrųjų apskaičiuotas:
Ar teisinga pasakyti, pavyzdžiui, kad procesorius, turintis keturias šerdis, kurių kiekvienas veikia 3GHz, iš tikrųjų yra 12GHz procesorius?
Aš vieną kartą įžengiau į „Mac vs PC“ argumentą (kuris, beje, nėra šios temos dėmesio centre ... kuris buvo grįžęs į vidurinę mokyklą) su pažįstamu, kuris primygtinai reikalavo, kad „Mac“ būtų reklamuojami tik kaip 1Ghz mašinos, nes jie buvo dvigubi -procesorius G4s kiekvienas veikia 500 MHz.
Tuo metu, kai žinojau, kad tai būna plovimas dėl priežasčių, kurios, manau, yra akivaizdžios daugeliui žmonių, bet aš tiesiog pastebėjau komentarą apie šią svetainę „6 branduolių x 0,2GHz = 1.2Ghz“ poveikiui ir tai, kad man vėl galvojau, ar yra tikras atsakymas.
Taigi, tai yra daugiau ar mažiau filosofinis / gilus techninis klausimas apie laikrodžio greičio skaičiavimo semantiką. Matau dvi galimybes:
- Kiekviena šerdis iš tiesų daro x skaičiavimus per sekundę, todėl bendras skaičiavimų skaičius yra x (šerdys).
- Laikrodžio greitis yra greičiau skaičiuojamų ciklų skaičius per sekundę, todėl tol, kol visi šerdys veiks tuo pačiu greičiu, kiekvieno laikrodžio ciklo greitis lieka tas pats, nepriklausomai nuo to, kiek šerdies yra. . Kitaip tariant, Hz = (core1Hz + core2Hz +…) / šerdys.
Taigi, koks yra tinkamas būdas žymėti visą laikrodžio greitį ir, dar svarbiau, ar galima naudoti vieno branduolio greičio nomenklatūrą daugelio branduolių sistemoje?
Atsakymas
„SuperUser“ mokytojai Mokubai padeda išsiaiškinti dalykus. Jis rašo:
Pagrindinė priežastis, kodėl „quad-core 3GHz“ procesorius niekada nėra toks greitas kaip 12GHz vienas branduolys, yra susijęs su tuo, kaip veikia procesorius, ty vienas sriegis arba daugiasriegis. „Amdahl“ įstatymas yra svarbus svarstant užduočių tipus.
Jei turite užduotį, kuri savaime yra linijinė ir turi būti atliekama tiksliai, pvz., (Labai paprasta programa)
10: a = a + 1
20: goto 10
Tada užduotis labai priklauso nuo ankstesnio leidimo rezultato ir negali paleisti daugelio kopijų, nepažeidžiant
„a“
kadangi kiekviena kopija būtų vertinga„a“
skirtingais laikais ir jį rašyti kitaip. Tai apriboja užduotį į vieną temą, todėl užduotis gali būti vykdoma tik vienu branduoliu bet kuriuo metu, jei ji būtų naudojama daugeliu branduolių, tada įvyktų sinchronizavimo korupcija. Tai apriboja iki 1/2 dvigubos branduolinės sistemos CPU galios arba 1/4 keturių branduolių sistemoje.Dabar atlikite tokią užduotį kaip:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
Visos šios linijos yra nepriklausomos ir gali būti suskirstytos į 4 atskiras programas, pavyzdžiui, pirmąsias ir paleisti tuo pačiu metu, kiekvienas gali veiksmingai panaudoti visą vienos iš šerdies galią be jokios sinchronizavimo problemos, tai yra, kur Amdalo įstatymas ateina į jį.
Taigi, jei turite vieną srieginę programą, kuri atlieka brutalios jėgos skaičiavimus, vienas 12GHz procesorius laimėtų rankas, jei galite kažkaip paversti užduotį į atskiras dalis ir daugiasriegius, tada keturios šerdys gali būti artimos, bet ne visai pasiekiamos tą patį spektaklį, kaip ir Amdalo įstatymas.
Svarbiausia, kad daugelio procesorių sistema suteikia jums reagavimą. Vienoje pagrindinėje mašinoje, kuri dirba sunkiai, sistema gali atrodyti vangi, nes didžiąją laiko dalį gali naudoti viena užduotis, o kitos užduotys vykdomos tik trumpose eilutėse tarp didesnės užduoties, todėl sistema, kuri atrodo vangesnė ar menkesnė . Daugialypėje sistemoje sunki užduotis atlieka vieną branduolį ir visas kitas užduotis atlieka kitose šerdyse, greitai ir efektyviai atlieka savo darbą.
„6 branduolių x 0,2GHz = 1,2 GHz“ argumentas yra šiurkštumas visose situacijose, išskyrus tuos atvejus, kai užduotys yra visiškai lygiagrečios ir nepriklausomos. Yra daug užduočių, kurios yra labai lygiagrečios, tačiau joms vis dar reikia tam tikros sinchronizacijos formos. Rankinis stabdys yra vaizdo transkoderis, kuris yra labai geras naudojant visus prieinamus procesorius, tačiau tam reikia pagrindinio proceso, kad kiti siūlai būtų užpildyti duomenimis ir surinkti duomenys, kuriuos jie atlieka.
- Kiekviena šerdis iš tiesų daro x skaičiavimus per sekundę, todėl bendras skaičiavimų skaičius yra x (šerdys).
Kiekviena šerdis gali atlikti x skaičiavimus per sekundę, darant prielaidą, kad darbo krūvis yra tinkamas lygiagrečiai, linijinėje programoje viskas yra 1 branduolys.
- Laikrodžio greitis yra greičiau skaičiuojamų ciklų skaičius per sekundę, todėl tol, kol visi šerdys veiks tuo pačiu greičiu, kiekvieno laikrodžio ciklo greitis lieka tas pats, nepriklausomai nuo to, kiek šerdies yra. . Kitaip tariant, Hz = (core1Hz + core2Hz +…) / šerdys.
Manau, kad yra klaidinga manyti, kad veikia 4 x 3GHz = 12GHz matematikos darbai, tačiau jūs lyginate obuolius su apelsinais ir sumos tiesiog nėra teisingos, GHz negali būti tiesiog pridedama kiekvienai situacijai. Norėčiau pakeisti jį į 4 x 3GHz = 4 x 3GHz.
Ar ką nors papildyti paaiškinimu? Garsas išjungtas komentaruose. Norite perskaityti daugiau atsakymų iš kitų „tech-savvy Stack Exchange“ vartotojų? Čia rasite visą diskusijų temą.