Pitanje:
Zašto ne napraviti jednu veliku CPU jezgru?
wav scientist
2019-06-12 15:52:49 UTC
view on stackexchange narkive permalink

Ne razumijem zašto proizvođači procesora rade višejezgrene čipove. Skaliranje više jezgri je užasno, ovo je vrlo specifično za aplikaciju i siguran sam da možete istaknuti određeni program ili kod koji izvrsno radi na mnogim jezgrama, ali najčešće je skaliranje smeće. To je gubitak prostora za silicijsku matricu i gubitak energije.

Na primjer, igre gotovo nikad ne koriste više od četiri jezgre. Znanstvene i inženjerske simulacije poput Ansys ili Fluent cijene se prema tome koliko jezgri ima računalo na kojem radi, tako da plaćate više jer imate više jezgri, ali korist od više jezgri postaje jako slaba u odnosu na 16 jezgri, no vi imate ovih 64 jezgre radne stanice ... to je bacanje novca i energije. Bolje je kupiti grijač od 1500 W za zimu, puno jeftinije.

Zašto ne naprave CPU sa samo jednom velikom jezgrom?

Mislim da bi, ako bi napravili jednojezgreni ekvivalent osmojezgrenog CPU-a, ta jedna jezgra imala 800% porast u IPC-u, tako da biste dobili pune performanse u svim programima, ne samo onima koji su optimizirani za više jezgri. Više IPC-a povećava performanse svugdje, to je pouzdan i jednostavan način za povećanje performansi. Više jezgri povećava izvedbu samo u ograničenom broju programa, a skaliranje je užasno i nepouzdano.

Komentari nisu za proširenu raspravu;ovaj je razgovor premješten u chat (https://chat.stackexchange.com/rooms/94914/discussion-on-question-by-wav-scientist-why-not-make-one-big-cpu-core).Sve donesene zaključke treba ponovo urediti u pitanju i / ili odgovorima.
Mogao bi vas zanimati ovaj članak: http://www.gotw.ca/publications/concurrency-ddj.htm
"ali korist od više jezgri postaje jako slaba nakon 16 jezgara" Očito ne znate o čemu govorite.Vjerujte mi, radio sam na procesima koji se izvode na nekoliko desetaka tisuća CPU-a.Postoji čitava klasa problema koja se naziva "Neugodno paralelno", gdje bacanje više jezgri na problem djeluje vrlo dobro.
Jedanaest odgovori:
#1
+95
Tom Carpenter
2019-06-12 16:24:11 UTC
view on stackexchange narkive permalink

Problem leži u pretpostavci da proizvođači procesora mogu samo dodati više tranzistora kako bi jednu jezgru procesora učinili snažnijom bez posljedica.

Da biste CPU učinili više, morate planirati što podrazumijeva više. Postoje stvarno tri mogućnosti:

  1. Majte da jezgra radi na višoj taktnoj frekvenciji - Problem je u tome što već pogađamo ograničenja onoga što možemo učiniti.

    Potrošnja energije, a time i rasipanje topline raste s frekvencijom - ako udvostručite frekvenciju, nominalno ćete udvostručiti rasipanje snage. Ako povećate napon, vaše rasipanje snage raste s kvadratom napona.

    Interkonekti i tranzistori također imaju kašnjenja širenja zbog neidealne prirode svijeta. Ne možete samo povećati broj tranzistora i očekivati ​​da ćete moći raditi na istoj frekvenciji takta.

    Ograničeni smo i vanjskim hardverom - uglavnom RAM-om. Da biste CPU učinili bržim, morate povećati propusnost memorije, bržim pokretanjem ili povećanjem širine sabirnice podataka.


  1. Dodajte složenije upute - Umjesto da radimo brže, možemo dodati bogatiji skup uputa - uobičajeni zadaci poput šifriranja itd. mogu se stvrdnuti u silicij. Umjesto da uzmemo brojne cikluse takta za izračunavanje u softveru, umjesto toga imamo hardversko ubrzanje.

    To se već radi na procesorima složenih instrukcija (CISC). Pogledajte stvari poput SSE2, SSE3. Jedna CPU jezgra danas je daleko moćnija od CPU jezgre od prije čak 10 godina, čak i ako radi na istoj frekvenciji takta.

    Problem je što dodavanjem složenijih uputa dodajete više složenosti i povećavate čip. Kao izravni rezultat, CPU postaje sporiji - dostižne frekvencije takta opadaju kako kašnjenje širenja raste.

    Ove složene upute također vam ne pomažu u jednostavnim zadacima. Ne možete očvrsnuti svaki mogući slučaj upotrebe, pa neizbježno veliki dijelovi softvera koji pokrećete neće imati koristi od novih uputa, a zapravo će biti oštećeni rezultirajućim smanjenjem takta.

    Također možete povećati širinu sabirnice podataka za obradu više podataka odjednom, no opet to povećava CPU i postižete kompromis između propusnosti stečene većim sabirnicama podataka i pada takta. Ako imate samo male podatke (npr. 32-bitne cijele brojeve), posjedovanje 256-bitnog CPU-a vam zapravo neće pomoći.


  1. Ma CPU učinite paralelnijim - Umjesto da pokušavate napraviti jednu stvar brže, radite više stvari istovremeno. Ako se zadatak koji radite podvrgava operiranju nekoliko stvari odjednom, tada želite ili jedan CPU koji može izvoditi više izračuna po naredbi (Single Instruction Multiple Data (SIMD)), ili imati više CPU-a koji mogu obaviti po jedan izračun.

    Ovo je jedan od ključnih pokretača za višejezgrene procesore. Ako imate pokrenutih više programa ili možete podijeliti svoj pojedinačni program u više zadataka, posjedovanje više CPU jezgri omogućuje vam više stvari odjednom.

    Budući da su pojedinačne procesorske jezgre zapravo odvojeni blokovi (zabrane predmemorije i memorijskog sučelja), svaka pojedinačna jezgra je smaller od ekvivalentne pojedinačne monolitne jezgre. Budući da je jezgra kompaktnija, kašnjenja širenja se smanjuju i svaku jezgru možete brže pokrenuti.

    Što se tiče toga može li jedan program imati koristi od više jezgri, to je u potpunosti od onoga što taj program radi i kako je napisan.

Komentari nisu za proširenu raspravu;ovaj je razgovor premješten u chat (https://chat.stackexchange.com/rooms/94913/discussion-on-answer-by-tom-carpenter-why-not-make-one-big-cpu-core).Sve zaključke treba ponovno urediti u pitanju i / ili odgovorima.
Jedna od točaka pokrenutih u komentarima koji još uvijek nisu obrađeni jest da CPU mogu biti paralelni izvođenjem više uputa po taktu (Superscalar).To je ortogonalno SIMD-u i frekvenciji;upute po taktu (IPC) treći su faktor stvarne propusnosti po vremenu.Svi moderni CPU-ovi za radna opterećenja u interaktivnoj upotrebi imaju najmanje 2 širine.
Za točniji odgovor pročitajte https://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption
#2
+38
whatsisname
2019-06-13 01:08:19 UTC
view on stackexchange narkive permalink

Uz ostale odgovore, postoji još jedan element: chip donosi. Suvremeni procesor ima nekoliko milijardi tranzistora u sebi, svaki od tih tranzistora mora raditi savršeno kako bi cijeli čip mogao ispravno funkcionirati.

Izradom višejezgrenih procesora možete čisto razdijeliti grupe tranzistora. Ako postoji nedostatak u jednoj od jezgri, možete onemogućiti tu jezgru i prodati čip po sniženoj cijeni prema broju funkcionalnih jezgri. Isto tako, također možete sastaviti sustave od provjerenih komponenata kao u SMP sustavu.

Za gotovo svaki CPU koji kupite počeo je život biti vrhunski premium model za tu liniju procesora. Što ćete završiti, ovisi o tome koji dijelovi tog čipa rade pogrešno i onemogućeni. Intel ne proizvodi nijedan i3 procesor: svi su neispravni i7, a sve značajke koje razdvajaju linije proizvoda su onemogućene jer nisu uspjeli testirati. Međutim, dijelovi koji još uvijek rade i dalje su korisni i mogu se prodati mnogo jeftinije. Sve gore postaje privjesak za ključeve.

A nedostaci nisu rijetkost. Savršeno stvaranje tih milijardi tranzistora nije lak zadatak. Ako nemate mogućnosti selektivno koristiti dijelove određenog čipa, cijena rezultata će rasti, vrlo brzo.

Sa samo jednim über procesorom, proizvodnja je sve ili ništa, što rezultira mnogo rasipnijim postupkom. Za neke uređaje, poput slikovnih senzora u znanstvene ili vojne svrhe, gdje vam treba ogroman senzor i sve to mora funkcionirati, troškovi tih uređaja toliko su ogromni da si ih mogu priuštiti proračuni na državnoj razini.

Ako se / kad se prinosi poboljšaju i proizvode cjelovitije čipove nego što to zahtijeva tržište, dobavljači obično počnu spajati neke jezgre / predmemoriju i / ili ih spajaju na niže frekvencije SKU, umjesto da strukturu cijena prilagode kako bi visokokrajnji čips relativno jeftiniji.S GPU-ima / grafičkim karticama nekad ste mogli otključane jedinice sjenčanja na nekim karticama otključavati firmware-om, da biste vidjeli jeste li imali sreće i dobili karticu na kojoj su one onemogućene samo zbog segmentacije tržišta, a ne zbog stvarnih nedostataka.
Intel je za neke njihove čipove proizveo matrice s dvije jezgre.Budući da su svi njihovi ULV (ultra niskog napona) mobilni SKU-ovi dvojezgreni, nije bilo dovoljno neispravnih četverojezgara, a manje područje matrice (posebno s smanjenim iGPU-om) daje više radnih dvojezgrenih čipova po oblatninego spajanjem četverojezgrenih matrica.https://en.wikichip.org/wiki/intel/microarchitectures/sandy_bridge_(client)#Dual-Core_.28GT1.29 ima snimke Sandybridgea 131 mm² matrice dual-core + GT1 grafike, nasuprot 149 mm² dual-core + GT2 grafika + 216 mm² quad + GT2.Još uvijek ima mjesta za nedostatke u predmemoriji itd.
I (neki) kvarovi u dijelu FMA jedinice mogu se riješiti spajanjem i prodajom kao Celeron ili Pentium čip (bez AVX-a, dakle samo 128-bitni vektori.) Čak i modernim čipovima Skylake ili Coffee Lake Pentium nedostaje AVX.SIMD FMA jedinice čine pristojan dio jezgre (i pokreću mnoge SIMD operacije osim FP matematike, uključujući cjelobrojni mul i integer pomak), pa me ne bi iznenadilo da se 2x 256-bitne FMA jedinice mogu preslikati na2x 128-bitni koristeći bilo koji dio još uvijek rade.Uz Skylake Xeon postoje čak i SKU-ovi sa smanjenom AVX512 FMA propusnošću (samo 1 radni 512-bitni FMA)
@PeterCordes Ako prinosi budu tako dobri, tada će dobavljači iznijeti dizajne veće gustoće i / ili brže radne frekvencije (a time i veću stopu kvarova) sve dok se stope neispravnosti ne vrate tamo gdje mogu onemogućiti jezgre i / ili čipove ispod sata.prodajte s popustom ..
@MontyHarder: To je nekako istina, ali provjera valjanosti troši novac i vrijeme, a postojeće će proizvodne linije neko vrijeme nastaviti izrađivati postojeće dizajne.Ali da, neki Intelovi primjeri onoga o čemu govorite su [Haswell Refresh] (https://en.wikipedia.org/wiki/Haswell_ (mikroarhitektura) #Haswell_Refresh) i razna usavršavanja Skylakea u osnovi bez arhitektonskih promjena imanja poboljšanja u njihovom 14nm procesu.(Ponekad s novim iGPU-om).npr.[Kaby Lake] (https://en.wikipedia.org/wiki/Kaby_Lake), zatim Coffee Lake itd. Kao "optimizacijski" koraci u uobičajenoj Intelovoj frekvenciji.
Do ove nedavne staje na koju je Intel naišao sa svojim 10nm procesom, oni su se uglavnom usredotočili na pripremu sljedećeg procesa ili sljedećeg mikroarhitekturnog poboljšanja (tik / tak od ~ Core 2 ili Nehalem), bez pročišćavanja proizvodnje prethodnih iteracija.Novi SKU s većim taktom sigurno je (HSW osvježavanje), ali ponovna provjera valjanosti nakon bilo koje stvarne promjene izgleda velika je stvar.
"Sve gore postaju privjesci za privjeske."- a sada želim jedan.BRB kupovina.
#3
+26
pjc50
2019-06-12 17:02:09 UTC
view on stackexchange narkive permalink

Ovisnost o podacima

Prilično je lako dodati više uputa po satu čineći čip "širim" - ovo je pristup "SIMD". Problem je što ovo ne pomaže većini slučajeva korištenja.

Postoje otprilike dvije vrste opterećenja, neovisne i ovisne. Primjer neovisnog radnog opterećenja može biti "s obzirom na dva niza brojeva A1, A2, A3 ... i B1, B2, ... itd., Izračunaj (A1 + B1) i (A2 + B2) itd." Ovakva vrsta opterećenja vidljiva je u računalnoj grafici, obradi zvuka, strojnom učenju itd. Prilično je puno toga dato GPU-ima, koji su posebno dizajnirani za to.

Ovisno o opterećenju može biti "Dano A, dodajte mu 5 i potražite to u tablici. Uzmite rezultat i dodajte mu 16. Potražite to u drugoj tablici."

Prednost neovisnog radnog opterećenja je u tome što se može podijeliti na puno različitih dijelova, pa više tranzistora pomaže u tome. Za ovisna radna opterećenja to nimalo ne pomaže - više tranzistora može ga samo usporiti . Ako morate dobiti vrijednost iz memorije, to je katastrofa za brzinu. Signal se mora poslati preko matične ploče, putujući podsvjetlosnom brzinom, DRAM mora napuniti red i pričekati rezultat, a zatim ga poslati natrag. To traje desetke nanosekundi. Zatim, nakon jednostavnog izračuna, morate poslati sljedeći.

Upravljanje napajanjem

Rezervne jezgre isključene su većinu vremena. Zapravo, na dosta procesora ne možete stalno pokretati sve jezgre, a da se stvar ne zapali, pa će ih sustav isključiti ili smanjiti za vas.

Prepisivanje softvera jedini je put prema naprijed

Hardver ne može automatski pretvoriti ovisna radna opterećenja u neovisna radna opterećenja. Ne može ni softver. Ali programer koji je spreman redizajnirati svoj sustav kako bi iskoristio mnoštvo jezgri, samo bi mogao.

Navod potreban za "ne mogu pokretati sve jezgre istovremeno".Osim ako maksimalnu brzinu turbo takta s jednim jezgrom ne smatrate "pravom" brzinom procesora.U klasičnom smislu (prije nego što smo udarili u zid napajanja i brzina takta bila je ograničena kritičnim kašnjenjem širenja puta), da, to je istina, ali u modernom svijetu ima smisla gledati na osnovnu brzinu sata kao na ono što se može održati sa svimjezgre aktivno izvođenje teških radnih opterećenja.Sve što je veće od toga je umak koji možete oportunistički koristiti kao što dopuštaju ograničenja snage / topline.(npr. Intelov Turbo).
Ali što se tiče snage, čak je i maksimalni takt * jedne * jezgre ograničen termikom više od kašnjenja širenja (iako su vjerojatno odabrane granice stupnja cjevovoda tako da ste blizu tog ograničenja na ciljanom max turbo).A i napon je varijabla: lošija snaga, ali kraća kašnjenja na vratima.U svakom slučaju, nema smisla jednostruki max turbo smatrati nečim na čemu biste "trebali" moći pokretati sve jezgre, jer ta granica već dolazi od snage.
Kontekst izvornog pitanja definitivno je bio pitanje o jednojezgrenoj maksimalnoj brzini, te je u mnoge praktične svrhe (i nedostaci predmemorije) stvarni ograničavajući faktor za percipiranu brzinu za korisnika.
Da, svi bismo uzeli 8x izvedbu s jednom niti umjesto 8-jezgrenog CPU-a da možemo.(Sa SMT-om kako bi mogao pokretati prirodno odvojena radna opterećenja bez prebacivanja konteksta iznad glave. Pogledajte moj odgovor. :) Hipotetička superširoka jezgra vjerojatno bi se mogla brže taktirati kada bi radno opterećenje uzrokovalo puno zastoja, umjesto da zadrži svetranzistori u SIMD FMA jedinicama uključivali su se i prebacivali svaki sat.(Snaga napajanja * unutar * jedne jezgre također je ključna za netapanje kod visokih satova; https://en.wikipedia.org/wiki/Dark_silicon).Dakle, imati jednu široku jezgru ne bi ovo učinilo drugačijim.
Iako imate poantu da su izvedbe s jednim navojem koje vidimo na trenutnim CPU-ima bolje nego da su ograničene na radni takt koji mogu istodobno održavati na svim jezgrama, čak i s najtežim radnim opterećenjem.tj. Turbo je ključan, posebno za dijelove s niskim TDP-om poput čipova za prijenosno računalo ([Zašto moj CPU ne može održati vrhunske performanse u HPC-u] (// stackoverflow.com/q/36363613)): obično je velik omjer između početne i maksimalne turbo-vrijednosti, za razliku od stolnih čipova velike snage, ali s malim brojem jezgri, npri7-6700k Skylake je 4GHz osnovni, 4,2GHz jednojezgreni turbo (bez overclockinga; veći je moguć s 95W TDP).
#4
+20
Graham
2019-06-13 00:47:58 UTC
view on stackexchange narkive permalink

Vraćajući se u prošlost, procesori nisu mogli raditi tako brzo. Kao rezultat toga, ako ste željeli napraviti više obrade, trebalo vam je više procesora. To može biti s matematičkim koprocesorom ili jednostavno s više istih procesora. Najbolji primjer za to je Inmos Transputer iz 80-ih, koji je posebno dizajniran za masovnu paralelnu obradu s više spojenih procesora. Cijeli koncept počivao je na pretpostavci da ne postoji bolji način za povećanje procesorske snage od dodavanja procesora.

Problem je u tome što je ta pretpostavka (privremeno) bila netočna. Možete dobiti i više procesorske snage ako jedan procesor napravi više izračuna. Intel i AMD pronašli su načine kako povećati taktove sve veće, a kako kažete, puno je lakše držati sve na jednom procesoru. Rezultat je bio taj da je do sredine 2000-ih brzi jednojezgreni procesor posjedovao tržište. Inmos je umro smrću u ranim 90-ima i sve njihovo iskustvo umrlo je s njima.

Dobra su vremena ipak trebala završiti. Jednom kad su se taktovi povećali na GHz, stvarno se više nije moglo ići dalje. I natrag smo opet išli na više jezgri. Ako zaista ne možete postići brže, odgovor je više jezgri. Kako kažete, nije uvijek lako učinkovito koristiti te jezgre. Ovih smo dana puno bolji, ali još uvijek smo na putu da to učinimo tako jednostavnim kao što je to učinio Transputer.

Naravno, postoje i druge mogućnosti za poboljšanje - umjesto toga biste mogli biti učinkovitiji. SIMD i slični skupovi uputa omogućuju više obrade za isti broj taktova sata. DDR brže unosi vaše podatke u procesor i iz njega. Sve to pomaže. Ali što se tiče obrade, opet se vraćamo u 80-te i više jezgri.

Komentari nisu za proširenu raspravu;ovaj je razgovor premješten u chat (https://chat.stackexchange.com/rooms/94915/discussion-on-answer-by-graham-why-not-make-one-big-cpu-core).Sve zaključke treba ponovno urediti u pitanju i / ili odgovorima.
#5
+20
Peter Cordes
2019-06-13 09:34:16 UTC
view on stackexchange narkive permalink

Dobro pitanje ili barem jedno sa zanimljivim odgovorom. Dio ovog odgovora prikazuje svijet u kojem bi se CPU mogli učinkovito skalirati u širinu, umjesto s više odvojenih jezgri. Modeli licenciranja / cijene bili bi drugačiji!

Ostalo objašnjava zašto ne mogu. Sažetak:

  • TTrošak više jezgri skali blizu linearno
  • Trošak proširenja superskalarnih cjevovoda 1 jezgre ~ kvadratno To je izvedivo s dovoljno grube sile, ionako do određene točke. Izvedba s jednim navojem je vrlo važna za interaktivnu upotrebu (važna je latencija, a ne samo protok), tako da trenutni high-core CPU-ovi plaćaju tu cijenu. npr. Skylake (4 širine), Ryzen (5 ili 6 širina) i Appleov A12 (7 širina za velike jezgre, 3 širine za male energetski učinkovite jezgre)
  • Ozbiljni diminishing IPC vraća se samo širenjem cjevovoda većim od 3 ili 4 širine, čak i s izvršenjem izvan reda kako bi se pronašao ILP. Propusti u granama i predmemorije su teški i još uvijek zaustavljaju cijeli cjevovod.
  • Niste spomenuli frekvenciju, već samo IPC, ali i frekvencija skaliranja je teška. Veća frekvencija zahtijeva veći napon, pa se power vaga s frekvencijom cubed: ^ 1 od frekvencije izravno, a ^ 2 od napona. (Kondenzatorska energetska skala pohranjuje se s V ^ 2, a većina dinamičke snage koja prelazi struju propuštanja dolazi od pumpanja naboja u kapacitivna opterećenja FET ulaza + žica.)

    Izvedba = učestalost puta IPC. (Unutar iste arhitekture. Širi SIMD omogućuje vam da obavite isti posao s manje uputa, a neki su ISA gušći od drugih, npr. MIPS često uzima više uputa za obavljanje istog posla od x86 ili AArch64.)

Troškovi su u području umrijenja (proizvodni trošak) i / ili snage (što neizravno ograničava frekvenciju jer je hlađenje teško). Također, niža snaga i performanse po vatu cilj je sam po sebi, posebno za mobilne uređaje (baterija) i poslužitelje (gustoća snage / troškovi hlađenja / troškovi električne energije).

Prije nego što je stvar bila višejezgrena po utičnici, imali ste sustave s više utičnica za high-end slučajeve upotrebe kada ste željeli veću propusnost nego što je to bilo moguće postići jednim CPU-om koji se može proizvesti, pa su to bili jedini SMP sustavima. (Poslužitelji, vrhunske radne stanice).

Ako se jedna jezgra može skalirati na toliko učinkovit način koliko želite, imali bismo sustave s 1 fizičkom jezgrom po utičnici i SMT (npr. HyperThreading) kako bi im se omogućilo da djeluju kao višestruke logičke jezgre. Tipična stolna / prijenosna računala imala bi samo 1 fizičku jezgru i ne bismo se trudili paralelizirati stvari koje se linearno ne skaliraju s više jezgri. npr. make -j4 da biste iskoristili prednosti višetonskih poslužitelja i / ili da biste sakrili kašnjenje I / O na radnoj površini. (Ili bismo možda ipak pokušali paralelizirati puno ako se širina cjevovoda lako skalira, ali IPC nije, pa smo morali koristiti više SMT niti.) Vaša jezgra OS-a i dalje bi trebala raditi na svim logičkim jezgrama, osim na način na koji CPU predstavlja SMT za OS vrlo različit, pa bi tamo i dalje bili potrebni paralelni algoritmi raspoređivanja i zaključavanja.


Donald Knuth rekao je u intervjuu 2008.

Mogao bih malo zapaliti svoju osobnu nesreću trenutnim trendom prema višejezgrenoj arhitekturi. Meni se čini više-manje kao da je dizajnerima hardvera ponestalo ideja i da pokušavaju prebaciti krivnju za buduću propast Mooreova zakona na autore softvera dajući nam strojeve koji rade brže samo na nekoliko ključna mjerila!

Da, da imamo čudotvorne jednojezgrene procesore s 8 puta većim protokom na stvarnim programima , vjerojatno bismo ih i dalje koristili. Sa sustavima s dvostrukim utičnicama samo kada je vrijedilo platiti puno više za veću propusnost (ne izvedbu s jednim navojem).

Više procesora smanjuje troškove prebacivanja konteksta kada se izvodi više programa (dopuštajući im da se istodobno rade paralelno, umjesto brzog prebacivanja između njih); preventivno multitasking prekidanje masivne neispravne mehanizacije za takvu CPU vjerojatno bi naštetilo još više nego sada.

Fizički bi to bila jedna jezgra (za jednostavnu hijerarhiju predmemorije bez međusobnih veza između jezgri), ali podržala bi SMT (npr. Intelov HyperThreading) pa bi je softver mogao koristiti kao 8 logičkih jezgri koje se dinamički natječu za protok resursi. Ili kad se samo 1 nit izvodi / nije zaustavila, to bi u potpunosti iskoristilo.

Dakle, koristili biste više niti kada je to zapravo bilo lakše / prirodnije (npr. odvojeni procesi koji se istodobno izvode) ili za lako paralelizirane probleme s lancima ovisnosti koji bi spriječili maksimiziranje IPC-a ove zvijeri.

Ali nažalost Knuthovo je željno razmišljanje da višejezgreni CPU u ovom trenutku više neće biti stvar.


Skaliranje izvedbe s jednom niti

Mislim da bi, ako bi napravili jednojezgreni ekvivalent 8-jezgrenom CPU-u, ta jedna jezgra imala 800-postotni porast IPC-a, tako da biste dobili pune performanse u svim programima, a ne samo u onima koji su optimizirani za više jezgri.

Da, to je istina. Ako bi uopće bilo moguće izraditi takav CPU, bilo bi vrlo nevjerojatno. Ali mislim da je to doslovno nemoguće u istom proizvodnom procesu poluvodiča (tj. Jednaka kvaliteta / učinkovitost tranzistora). To sigurno nije moguće s istim proračunom napajanja i površinom matrice kao 8-jezgreni CPU, iako biste uštedjeli na logici za lijepljenje jezgri i ne bi trebalo toliko prostora za privatne predmemorije po jezgri.

Čak i ako dopustite povećanje frekvencije (budući da je stvarni kriterij rad u sekundi, a ne rad po satu), stvaranje čak 2x bržeg CPU-a bio bi velik izazov.

Kad bi bilo moguće negdje u blizini istog proračuna snage i područja umrijeti (dakle troškovi proizvodnje) izraditi takav CPU, da, dobavljači CPU-a već bi ih tako izgradili.

Pogledajte Moderni mikroprocesori 90-minutni vodič!

Konkretno, odjeljak Više jezgri ili šire jezgre? Odjeljak , radi potrebne pozadine za razumijevanje ovog odgovora; započinje jednostavno s načinom rada redoslijeđenih cjevovodnih CPU-a, a zatim superskalarnim (više uputa po satu). Zatim objašnjava kako smo pogodili zid napajanja točno oko P4 ere, što je dovelo do kraja lakog skaliranja frekvencije, ostavljajući uglavnom samo IPC i obavljajući više posla po uputi (npr. SIMD) kao put naprijed, čak i s manjim tranzistorima.

MŠirenje cjevovoda (maksimalne upute po satu) obično skalira trošak kao kvadrat širine . Taj se trošak mjeri u površini matrice i / ili snazi, radi šire paralelne provjere ovisnosti (otkrivanje opasnosti) i šireg planera koji ne radi kako bi pronašao spremne upute za pokretanje. I više portova za čitanje / pisanje u vašoj datoteci registra i predmemoriji ako želite pokretati upute koje nisu nop . Pogotovo ako imate upute s 3 unosa poput FMA ili add-with-carry (2 registra + zastavice).

Ta također se smanjuju povrati IPC-a zbog širenja CPU-a; većina radnih opterećenja ima ograničeni ILP malog opsega / kratkog dometa (paralelizam na razini uputa) za korištenje CPU-a, tako da širenje jezgre ne povećava IPC (upute po taktu) ako je IPC već ograničen na manje od širine jezgre lancima ovisnosti, propustima grana, propustima predmemorije ili drugim stajama. Sigurno biste postigli ubrzanje u nekim odmotanim petljama s neovisnim iteracijama, ali to nije ono što većina koda provodi većinu svog vremena radeći. Upute za usporedbu / grane čine 20% kombinacije uputa u "tipičnom" kodu, IIRC. (Mislim da sam pročitao brojeve od 15 do 25% za razne skupove podataka.)

Također, promašaj predmemorije koji zaustavlja sve ovisne upute (a zatim sve nakon što se postigne ROB kapacitet) više košta za širi CPU. (Oportunitetni trošak ostavljanja više izvršnih jedinica u praznom hodu; više potencijalnih poslova se ne završi.) Ili propust grane na sličan način uzrokuje balon.

T Da bismo dobili 8x IPC, trebat će nam barem 8x poboljšanje točnosti predviđanja grana i brzine učitavanja u predmemoriji. Ali stope učitavanja u predmemoriji ne mijenjaju se dobro s kapacitetom predmemorije koji je prošao određenu točku za većinu radnih opterećenja. A HW unaprijed dohvaćanje pametno je, ali ne može biti toliko pametno. A na 8x IPC, granski prediktori trebaju proizvesti 8x više predviđanja po ciklusu, kao i da budu preciznija.


Currentne tehnike za izgradnju izvanrednih izvršnih procesora mogu pronaći ILP samo u kratkim dometima. Na primjer, Skylakeova veličina ROB-a je 224 uops fused-domain, a planer za neizvršene uops-e 97 unfused-domain. Pogledajte Razumijevanje utjecaja ograde na petlju s dva dugačka lanca ovisnosti, radi povećanja duljina za slučaj kada je veličina planera ograničavajući faktor u izdvajanju ILP-a iz 2 dugačka lanca uputa, ako dobiju predugo dugo. I / ili pogledajte ovaj općenitiji i uvodniji odgovor).

Dakle, pronalaženje ILP-a između dvije odvojene duge petlje nije nešto što možemo učiniti s hardverom. Dinamična binarna rekompilacija za fuziju petlje mogla bi biti moguća u nekim slučajevima, ali teško, a ne nešto što CPU stvarno može učiniti ako ne krene putem Transmeta Crusoe. (x86 emulacijski sloj na vrhu drugog internog ISA-a; u tom slučaju VLIW). No, standardni moderni x86 dizajn s uop predmemorijama i moćnim dekoderima nije lako pobijediti većinu koda.

A izvan x86, sve ISA-ove koji se još uvijek koriste relativno je lako dekodirati, tako da nema motivacije za dinamičku rekompilaciju osim optimizacija na velike udaljenosti. TL: DR: nadajući se da će magični kompajleri koji mogu izložiti više ILP-a hardveru nisu uspjeli za Itanium IA-64 i vjerojatno neće uspjeti za superširok CPU za bilo koji postojeći ISA sa serijskim modelom izvršenja.


Ako ste imali superširok CPU, zasigurno biste željeli da podržava SMT, tako da ga možete napuniti radom izvođenjem više niti s niskim ILP-om.

Budući da je Skylake trenutno širok 4 uops (i postiže stvarni IPC od 2 do 3 uopsa po satu, ili čak bliži 4 u visokopropusnom kodu), hipotetički 8x širi CPU bio bi širok 32!

Mogućnost urezivanja toga natrag u 8 ili 16 logičkih CPU-a koji dinamički dijele te resurse izvršavanja bilo bi fantastično: nestalne niti dobivaju svu propusnost pročelja i pozadinsku propusnost.

Ali s 8 odvojenih jezgri, kada se nit zaustavi, ništa drugo ne može održavati jedinice izvršenja; ostale niti nemaju koristi.

Izvršenje je često brzo: zaustavlja se čekajući propušteno učitavanje predmemorije, a nakon što stignu paralelno mnoge upute, taj rezultat može koristiti. S superširokim CPU-om taj rafal može ići brže i zapravo može pomoći kod SMT-a.


Ali ne možemo imati čarobne superširoke procesore

Dakle, da bismo postigli protok, umjesto toga moramo izložiti paralelizam hardveru u obliku thread-paralelizma. Općenito kompajleri nisu sjajni u znanju kada / kako koristiti niti, osim u jednostavnim slučajevima poput vrlo velikih petlji. (OpenMP ili gcc-ove -ftree-parallelize-petlje ). I dalje je potrebna ljudska pamet kako bi se preradio kôd kako bi se paralelno učinkovito obavljao koristan posao, jer je komunikacija između niti skupa, a isto tako i pokretanje niti.

TLP je grubozrnati paralelizam, za razliku od sitnozrnog ILP-a unutar jedne niti izvršenja koju HW može iskoristiti.


CPU usmjereni na interaktivno radno opterećenje (poput Intel / AMD x86 i Apple / ARM AArch64 high-end jezgri) definitivno do gura u sve manje povrata IPC skaliranja, jer izvedbe s jednim navojem i dalje su toliko vrijedne kad je latencija samo protok za masovno paralelne probleme.

Mogućnost paralelnog pokretanja 8 primjeraka igre pri 15 sličica u sekundi mnogo je manje vrijedna od mogućnosti pokretanja jedne kopije pri 45 sličica u sekundi. Dobavljači CPU-a to znaju i zato moderni CPU koriste izvršavanje bez narudžbe, iako to košta značajnu snagu i površinu. (Ali GPU-i nemaju jer im je radno opterećenje već uvelike paralelno).

Intelov višejezgreni Xeon Phi hardver (Knight's Landing / Knight's Mill) zanimljiva je pola puta: vrlo ograničeno izvršavanje izvan redoslijeda i SMT za održavanje 2-širokih jezgri napajanih AVX512 SIMD uputama za krčenje brojeva. Jezgre se temelje na Intelovoj arhitekturi Silvermont male snage. (Izvršeno izvan reda, ali s malim prozorom za promjenu redoslijeda, puno manjim od velike jezgre obitelji Sandybridge. I užim cjevovodom.)


BTW, sve je ovo ortogonalno SIMD-u. Dovršenje više posla po uputi uvijek pomaže ako je to moguće zbog vašeg problema.


Modeli određivanja cijena

Modeli određivanja cijena softvera temelje se na trenutnom okruženju hardvera.

Modeli licenciranja po jezgri postali su sve rašireniji (i relevantni čak i za radne površine s jednom utičnicom) pojavom višejezgrenih procesora.Prije toga bio je relevantan samo za poslužitelje i velike radne stanice.

Da softveru nije potrebno više jezgri za rad pri najvećoj brzini, ne bi zapravo postojao način da ga jeftinije proda ljudima koji od toga ne ostvaruju toliko koristi jer ga pokreću na slabijem procesoru.Osim ako možda softverski / hardverski ekosustav nije razvio kontrole na "SMT kanalima" koje vam omogućavaju da konfigurirate maksimalnu širinu izvršavanja koda pokrenutog na toj logičkoj jezgri.(Opet zamišljajući svijet u kojem se procesori skaliraju u širini cjevovoda umjesto više zasebnih jezgri.)

"pokretanje niti je skupo" - to nije teška činjenica;to je artefakt uobičajenih modernih operativnih sustava.
@MSalters I zaista, neki su istraživački projekti istražili kako bi bilo strašno odbaciti ovaj pristup.Isto je s "ljudskom pametnošću za preradu koda" - postoje načini pisanja koda koje je prirodno lakše paralelizirati, ali oni jednostavno nisu bili popularni u posljednjih nekoliko desetljeća.Tamo gdje se * koriste, općenito možete vidjeti masivno vodoravno skaliranje po vrlo niskoj cijeni;zapravo, do te mjere da horizontalno skaliranje postaje mnogo jeftinije od vertikalnog u mnogim aplikacijama.To samo znači da programerima ne smijete dati izbor - ako to okolnosti natjeraju, to u redu funkcionira: D
#6
+11
EvilSnack
2019-06-13 09:41:46 UTC
view on stackexchange narkive permalink

Dopustite mi da napravim analogiju:

Ako vam majmun tipka na pisaćoj mašini, a želite završiti više tipkanja, majmunu možete dati kavu, satove tipkanja i možda prijetiti kako bi brže radio, ali dolazi točka u kojojmajmun će tipkati maksimalnim kapacitetom.

Dakle, ako želite više tipkati, morate dobiti više majmuna.


Da biste dalje proširili analogiju, potrebna vam je zasebna pisaća mašina za svakog majmuna (predstavlja podatkovnu sabirnicu koja će biti potrebna svakoj jezgri), trebate način kako donijeti banane do svakog majmuna i nešto za prikupljanje njihovog izmeta (analogno snazidistribucija i odvođenje topline) i potreban vam je način da osigurate da svi majmuni ne pokušavaju otkucati isti odlomak u Dvanaesta noć (analogno ispravnoj podjeli radnog opterećenja među procesorima).Ali sve je ovo manje posla za veću dobit nego pokušaj više tipkanja od jednog majmuna.

#7
+7
hekete
2019-06-12 17:36:51 UTC
view on stackexchange narkive permalink

Ističete da puno softvera ne koristi više od (x) jezgri. Ali to je u potpunosti ograničenje koje su postavili dizajneri tog softvera. Kućna računala koja imaju više jezgri još je uvijek nova (ish), a projektiranje softvera s više niti također je teže s tradicionalnim API-ima i jezicima.

Vaše računalo također ne pokreće samo taj 1 program. Radi čitav niz drugih stvari koje se mogu staviti na manje aktivne jezgre kako ih vaš primarni softver ne bi toliko ometao.

Trenutno nije moguće samo povećati brzinu jedne jezgre kako bi se podudarala s propusnošću od 8 jezgri. Veća brzina vjerojatno će morati dolaziti iz nove arhitekture.

Kako je obično dostupno više jezgri, a API-ji su dizajnirani s tom pretpostavkom, programeri će početi koristiti više jezgri. U toku su napori za olakšavanje dizajna s više navoja. Da ste ovo pitanje postavili za nekoliko godina, vjerojatno biste rekli: "Moje igre obično koriste samo 32 jezgre, pa zašto moj CPU ima 256?".

Razlika između 1 i više jezgri je * ogromna * u smislu dobivanja softvera za iskorištavanje.Većina algoritama i programa su serijski.npr.[Donald Knuth je rekao] (https://thunk.org/tytso/blog/2008/04/26/donald-knuth-i-trust-my-family-jewels-only-to-linux/) da je više jezgraCPU izgledaju kao da dizajneri HW-a "* pokušavaju prenijeti krivnju za buduću propast Mooreova zakona na pisce softvera dajući nam strojeve koji rade brže samo na nekoliko ključnih mjerila! *"
Nažalost, još nitko nije smislio način da jedna široka / brza jezgra pokrene jednonitni program bilo gdje toliko brzo koliko možemo dobiti učinkovito paralelni kôd za pokretanje na više jezgri.No, srećom dizajneri CPU-a shvaćaju da su izvedbe s jednim navojem i dalje ključne i čine svaku pojedinačnu jezgru mnogo većom i moćnijom nego što bi bilo kad bi išli za čistom propusnošću paralelnih problema.(Usporedite Skylake (4 širine) ili Ryzen (5 širina) u odnosu na jezgru Xeon Phi-a (Knight's Landing / Knight's Mill temeljen na Silvermont + AVX512) (2-široki i ograničeni OoO izvršilac)
U svakom slučaju da, posjedovanje najmanje 2 jezgre često je korisno za multitasking OS, ali preventivno višezadaćno radjenje na jednoj jezgri koja je bila 4x ili 8x brža od trenutnog CPU-a bilo bi prilično dobro.Za mnoge interaktivne slučajeve upotrebe to bi bilo puno bolje kad bi uopće bilo moguće graditi / s istim proračunom snage.(Dvojezgre ipak pomaže u smanjenju troškova prebacivanja konteksta kada više zadataka želi procesorsko vrijeme.)
Sve istinito, ali povijesno višejezgreno bilo je skuplje.Nije bilo puno razloga dizajnirati paralelne algoritme izvan znanstvenih aplikacija.Puno je prostora za paralelizaciju, čak i u algoritmima koji zahtijevaju uglavnom serijsko izvršavanje.Ali IPC trenutne generacije nije sjajan i lako ga je zabrljati.Što obično rezultira bugovima koje je doista teško pronaći i ispraviti.Naravno, 4x brži CPU bio bi nevjerojatan (ali svejedno biste željeli više jezgri).
@PeterCordes Pa, većina algoritama i programa nisu serijski jer * moraju * biti, već uglavnom zato što se to uvijek radilo (uz prskanje "bila je to dobra trgovina").Najgrublji slučajevi su kada isti program možete pokrenuti četiri puta na četiri zasebna radna opterećenja i pokrenuti ih paralelno bez problema.Ali to pogađa još jedan problem - CPU nije usko grlo toliko često, a obično je način da se koriste bolji algoritmi, a ne više CPU-a.Ponekad one pomažu i kod drugih uskih grla (memorija, disk, mreža ...).
@hekete: Za * neke * slučajeve upotrebe, poput paralelnih radnih opterećenja, da želite višejezgrene.Ali samo u istim slučajevima kada su se koristili sustavi s više utičnica prije nego što su se radili višejezgreni jezgri po čipu.Ako bi se protok jedne jezgre mogao savršeno prilagoditi području matrice modernog višejezgrenog procesora, vi biste to jednostavno izgradili i projektirali SMT-om kako bi se pretvarao da je više logičkih jezgri kako bi mogao raditi paralelno s niskim IPC-omopterećenja.(Ovu točku obrazlažem detaljnije u svom odgovoru na ovo pitanje.)
Ne zaboravite na @PeterCordes da prebacivanje zadataka ima svojstveni trošak i mogao bi biti prilično velik, ovisno o količini stanja koje je trebalo prebaciti u kontekst (registri, predmemorija, TLB itd.).Postoje slučajevi velike iskoristivosti kada četiri sporo jezgre koje rade po jednu nit mogu biti brže od svih nego jedna jezgra koja je četiri puta veća od brzine, ali razbijajući se između 4 niti.
@MarkBooth: SMT (npr. Hipernit) rješava problem arhitektonskog stanja (predajom hardveru), ali više logičkih jezgri na istoj fizičkoj jezgri i dalje se natječe za predmemoriju i TLB resurse.Pretpostavljao sam da će, ako imate čarobnu superširoku jezgru, imati i čarobno ogromne predmemorije i velike TLB-ove, ali postavljate zanimljivu točku da to možda ne bi bilo slučaj ako samo ima čarobni HW pred-dohvat umjesto daogromne predmemorije L1d / L2 koje su dobre za SMT niti koje dodiruju različite podatke.
Da, vrlo je ovisan o arhitekturi @PeterCordes.Jedna od ogromnih prednosti u vrijeme arhitekture Transputera (spomenuta u drugom odgovoru) bila je ta što je prelazak konteksta s kooperativne niti na nit visokog prioriteta bio samo mikrosekunda (pri taktu od 25 MHz!), Što je manje vremena od mnogih modernihGHz procesori.Možda su brži, ali imaju i puno više konteksta za promjenu.
#8
+3
user4574
2019-06-13 20:39:43 UTC
view on stackexchange narkive permalink

Najuvjerljiviji razlog s povijesnog stajališta je power dissipation.

Nakon Pentiuma IV, Intel je pokušao slijediti sljedeću generaciju procesora kodnog naziva Tejas koji je trebao raditi u rasponu od 4 GHz do 12 GHz. Problem je bio u tome što je trčanje pri toj brzini generiralo previše topline da bi bilo održivo.

Nakon što je Tejas otkazan trebalo je Intelu još 10 do 15 godina prije nego što su napokon imali jezgre koje rade na 4 GHz s prihvatljivom razinom topline.

Pogledajte Tejas i Jayhawk .

Intel je paralelno s Tejasom imao još jedan projekt koji je uključivao upotrebu više jezgri. Taj je projekt imao prihvatljivu razinu topline, pa su tako išli. Omogućilo im je da sada povećaju performanse, umjesto da čekaju dodatnih 10 godina za postupke izrade od 10 nm.

Pod pretpostavkom da jezgre nisu izgladnjene resursima, da biste dobili jednak broj uputa u sekundi od jedne jezgre umjesto N jezgri, trebat će vam brzina uputa te jedre da bude N puta brža. Dinamičko rasipanje snage jezgre procesora linearno je proporcionalno radnoj frekvenciji. Također je proporcionalan kvadratu radnog napona. Trčanje na nižim frekvencijama omogućuje upotrebu nižih radnih napona. Korištenje nižih napona na nižim frekvencijama znači da se generirana toplina u praksi smanjuje s cube radne frekvencije.

Ekstremni primjer toga je ljudski mozak koji može izvesti ekvivalent od 2 ^ 18 operacija u sekundi koristeći samo 20 W snage. To postiže korištenjem milijardi neurona koji paralelno rade na samo nekoliko stotina Hz.

Također imajte na umu da na računalu obično istodobno rade stotine ili tisuće niti.Operativni sustav rukuje dodjeljivanjem vremena na jezgri svakoj niti.Dakle, čak i ako pojedinačni program ne iskoristi sve jezgre, to će svejedno imati koristi jer ostali programi uzimaju manje CPU-a ako rade na drugoj jezgri.

Ako išta drugo, tržište visokih performansi prelazi na paralelniju obradu u obliku FPGA-a.Intel je nedavno kupio Altera (drugi najveći proizvođač FPGA-e), a sada prodaje ploče s FPGA hardverskim ubrzivačem.Softver može učitati FPGA slikom u vrijeme izvođenja pomoću API poziva.CPU zatim unosi podatke u FPGA i dopušta mu da obavi veći dio posla.Tipovi aplikacija su obično video kodiranje, AI, prikazivanje, pretraživanje baze podataka itd.

* Također imajte na umu da se na računalu obično istodobno pokreću stotine ili tisuće niti. * Ne, ne * radi *.Mnogo niti postoji na modernim radnim površinama, ali gotovo svi spavaju i čekaju I / O ili timer u bilo kojem trenutku.npr.prosjek opterećenja (u posljednjoj minuti) na mojoj Linux radnoj površini trenutno je 0,19 zadataka koji su aktivno spremni za korištenje procesorskog vremena u bilo kojem trenutku.Da sam pokrenuo video kodiranje, x264 bi pokrenuo više niti za OS da zakaže na više jezgri, ali samo otprilike onoliko koliko imam logičkih jezgri.
BTW, OP (iz nekog je razloga) u potpunosti izostavio frekvenciju i pitao za skaliranje IPC-a (upute po taktu), a ne po sekundi.To što kažete je istina, ali oni su predlagali da se CPU * proširi *, a ne da radi na višem taktu.To sam već obratio u svom odgovoru, tako da je vaš odgovor koji objašnjava skaliranje snage s frekvencijom lijep dodatak, +1.
@PeterCordes Točno, nisam htio implicirati da se sve niti izvršavaju odjednom, naravno da se izmjenjuju.Hvala na razjašnjenju.
Pa ne toliko se "izmjenjuju" koliko da većinu vremena uopće nisu spremni za trčanje.Uglavnom su svi spavali, obično se bude samo zbog kratkog niza računanja, na pr.nakon što OS isporuči pritisak tipke ili mrežno očitavanje ili ih probudi jer je tajmer istekao.Rijetko je kada više od 2 osobe budu budne odjednom, osim ako zapravo ne radite nešto računalno intenzivno.A ako jeste, ne pokrećete stotine niti, pokrećete niz niti ~ = broj dostupnih jezgri.
#9
+2
Dirk Bruere
2019-06-13 13:12:10 UTC
view on stackexchange narkive permalink

Samo da zaokružim sliku kuda sve ovo ide ...

Neuronske mreže i AI super su aktualne teme trenutka.Jedan od razloga je taj što se paralelno može učinkovito koristiti velik broj jednostavnih jezgri i tako izvući blizu maksimalnih računalnih performansi.Zahtjev je u osnovi masovno paralelan i prilično se lako preslikava na niz procesora bez puno komunikacije između jezgri.Zbog toga su GPU-ovi bili prva goto tehnologija za AI ubrzanje.Trenutno vidimo čipove koji su optimizirani čak i bolje od video GPU-ova za NN-ove koji dolaze na tržište.Sljedeći je, ili možda konačni korak, stvaranje NN-ova pomoću analognih tehnologija poput memristora.

A osim toga, u nečemu poput igraćeg računala grafičke kartice imaju daleko više sirovih performansi od višejezgrenog Intel ili AMD CPU

Re * "... suštinski masovno paralelni" *: Čak i * [neugodno paralelno] (https://en.wikipedia.org/wiki/Embarrassingly_parallel) *?
#10
+1
Tony Stewart Sunnyskyguy EE75
2019-06-14 19:12:07 UTC
view on stackexchange narkive permalink

U osnovi, CMOS gubici su eksponencijalno (^ 1,5) proporcionalni frekvenciji, a paralelne performanse CPU-a nešto su manje od linearnih proporcionalne broju CPU-a.

Dakle, omjer računalne snage i rasipanja snage poboljšan je za multi-CPU aplikacije s različitim taktovima kada se uspoređuju brzina i količina CPU-a za fiksno rasipanje snage.

Složenije je od ovoga, ali to su osnove zašto paralelni CPU u dinamičkim aplikacijama bolje udara po vatima. Uvijek će postojati iznimke kada se optimizira za jedan scenarij.

Nije veličina većeg procesora ono što ga čini bržim za tipične računalne programe Intel / AMD, već smanjena veličina zbog litografske razlučivosti i manji kapacitet kapije smanjuje snagu zajedno sa smanjenom razinom ispod praga i naponom jezgre .

Poboljšanje nije linearno i ne znači da je 8 jezgri 4 puta bolje od 2, ali cilj je ako se postigne imati veći dinamički opseg obrade s prigušivanjem rasipanja snage, brzine i napona radi poboljšanja performansi i učinkovitosti te vršne snage na zahtjev bez prekomjernog porasta temperature.

Za znanstveniji odgovor pročitajte https://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption

#11
-2
machtur
2019-06-13 10:17:55 UTC
view on stackexchange narkive permalink

Višejezgre obično nisu multiskalne.A multiskalne jezgre nisu višejezgre.

Bilo bi nekako savršeno pronaći multiscalarnu arhitekturu koja radi na nekoliko megaherca, ali općenito njezini mostovi ne bi bili omogućeni potrošačima, ali skupi, pa je tendencija višejezgrenog programiranja na nižim frekvencijama, a ne kratkih uputa pri velikim taktovima.

Više jezgri uputa je jeftinije i lakše se njima zapovijeda, i zato je loša ideja imati multiscalarnu arhitekturu na nekoliko gigaherca.

Mislite li na "superskalar", više uputa po satu?Većina višejezgrenih procesora * su * superskalarni.npr.Ryzen je širok 5.Appleovi vrhunski čipovi AArch64 široki su 6 ili 8.Puno je plodova za nisko vješanje kako bi se 2-širok CPU iskoristio u većini koda, pa je vrijedno napraviti svaku jezgru širine najmanje 2 prije skaliranja na više jezgri za koje svaka treba svoju privatnu predmemoriju i međusobnu vezu između jezgri (npr. Intelove Xeon Phi višejezgrene računalne kartice imaju mnogo jezgri s dva izdanja).Isto je i s jezgrama pametnih telefona: male jezgre imaju najmanje 2 širine.Izvedba s jednim navojem je bitna!
Ili ste mislili na https://dl.acm.org/citation.cfm?id=224451 - istraživački rad o onome što oni nazivaju "Multiscalar" jezgrama koja traži ILP u većim rasponima u grafu kontrolnog toka visokeprogram na razini, koristeći kombinaciju HW i SW.Uobičajeni procesori koje koristimo na stolnim računalima i pametnim telefonima * nisu * ovakvi, oni su obični superskalari s izvršavanjem izvan reda, implementirajući serijski ISA koji se pretvara da izvršava upute jednu po jednu.
Hvala.afaik, ideja iza skalarnog luka je mjerljivost topline iza poznatih ili predefiniranih skupova uputa (slučaj AVX).
Proračun trenutne arhitekture u odnosu na toplinu se ne može računati predvidljivo.to poboljšava nevjerojatnost da se višejezgre mogu raditi na velikim frekvencijama, jer njihova sposobnost izvođenja u idealnom vremenu i toplini nije izračunata.to je sve što zasad znam.kopam vektorske strojeve u tu svrhu kako bih razumio fiziku "multiskara".slučaj je xeon / phy slijedi idealnu toplinsku krivulju kao što je to činio drevni cpus.poboljšanje korisničkog iskustva
SIMD-ovi skupovi uputa poput AVX-a način su za postizanje više posla kroz cjevovod * bez * potrebe za širenjem cijelog cjevovoda, već samo za izvršne jedinice.Na primjer, Skylake može izvoditi 3 upute "vpaddd ymm0, ymm1, ymm2" po satu, a svaka izvršava 8 pakiranih 32-bitnih cjelobrojnih dodavanja.Dakle, 24 cijela broja zbrajaju se po satu, ali strojevi za izvršavanje izvan reda moraju "pratiti" 3 upute u letu.To je * puno * jeftinije za izradu od CPU-a koji može raditi 24 `add eax, edx` upute po satu.SIMD je u osnovi ortogonalna širini cjevovoda.
Skylake je dobar slučaj optimizacije po taktu.inačica je bezbroj, ja nisam u njima, što su zanimljivi slučajevi interne optimizacije sabirnice, jer skylakes na taj način integriraju Xeon originalni istovar u SIMD cjevovod.Pretpostavljam da bi jedna velika jezgra integrirala istovar i računanje u nekoliko ciklusa na način (na primjer) koji fenomen čini za AVX.to je način na koji se računanje integrira prema naprijed u odnosu na snagu potrebnu za unutarnje blok operacije.suprotno višestrukim kratkim uputama poput Gpu-a s više "virtualnih" jezgri sličnih dodacima Nehalemu
Obitelj Intel Sandybridge (uključujući Skylake) nema zaseban plinovod za SIMD.Koriste jedinstveni planer gdje se cijelobrojni uops natječu za luke izvršenja s upovima SIMD / FP.(Za razliku od AMD-a gdje uops čekaju da se izvrše na izvršnim jedinicama SIMD-a čekaju u drugom planeru).https://www.realworldtech.com/sandy-bridge/5/.Nemam pojma o čemu govoriš s "istovarom".Većina onoga što govorite u komentarima (i vaš odgovor) jedva je razumljiva ili čak potpuno nerazumljiva.Znam što riječi znače, ali način na koji ih sastavljaš nije značajan.
Slijedio sam nekoliko dodataka za Nehalema, Skylakes u nekim operativnim specifikacijama.mislim da se taktiranje postavlja na štetu međusobnog povezivanja koje pruža manje specijalizirane CPU registre u zamjenu za vektorsko računanje u pojedinačnim čvorovima po CPU, za razliku od onoga što sam očekivao za optimizacije;izravnavanje mogućnosti obrade mostova, čime se konačno iskrcao na priključne kartice, poput GPU-a, TPU-a ... Prije TPU-a samo su MIC-ovi trenirali svoje tenzore kao početnu ponudu proizvoda.Sada je zamijenjen TPU-om za uglavnom sve slučajeve koji nisu obuhvaćeni CPU-om / GPU-om, a snižava radne taktove najviše kako bi se podudarali
Oh, jesi li razgovarao o Xeon Phiu ranije?Upravo ste rekli Xeon.Ne, Skylake čipovi ne integriraju nijednu Knight's Landing jezgru ili bilo koju drugu vrstu preopterećenja, osim ako mislite na integrirani GPU?Izvršne jedinice Skylake-a za SIMD dio su izravno jezgre, baš kao i cjelobrojni ALU-ovi i jedinice za učitavanje / spremanje.Dizajn je vrlo sličan Haswellu, sljedećoj generaciji Sandybridgea;pogledajte članak HSW-a Davida Kantera na istoj poveznici.Čak i Skylake-poslužitelj s AVX512 ugrađuje SIMD jedinice točno u svaku jezgru.(Iako je jedna od 512-bitnih FMA jedinica nekako "pričvršćena".)
Iskrcavanje pretpostavljam da dolaze iz Xeon / Nehalem serije grupiraju serije računanja u stanju čekanja na paralelni vektorski stroj.kao i grupiranje operacija premještanja koje su došle do troškova topline zbog nastanka takvog elementa.Novije jezgre poput sandybridgea imaju ovo uvelike optimizirano po taktu, ali za razliku od AMD-ove tendencije da sve stavi u silicijum, odlučili su se poboljšati satnik za operacije čekanja, čineći ga pretvaračem ugodnijim.
Svi oni imaju interni planer koji grupira velike vektorske adicije u letu za primjerak.ali njihovi su mi postupci nepoznati.govorio sam o Xeonima, koje su neke upute prerasle u XeonPhys, a neke su prešle u Sandybridge.Haswell je pokušao integrirati Phys / paraleliranje.ali tendencija je uključivanje vektorskih strojeva u različite arhitekture rasporeda instrukcija poput sandybridgea.Umjesto toga, Nehalems je imao zanimljivu (za mene) hardversku arhitekturu koja je bila preopterećena sabirnicom, umjesto da bi poboljšala stanja čekanja za paralelno računanje u cjevovodu ...
Ništa od onoga što govoriš nema smisla.Xeon Phi nije izdanak uobičajenog Xeona;razvio se iz https://en.wikipedia.org/wiki/Larrabee_(microarchitecture) koju je Intel namijenio GPGPU-u (slična niša onoj koju Xeon Phi sada popunjava).Nisam siguran što mislite pod pojmom "grupiranje operacija premještanja".Vaša se terminologija ne podudara s onim kako Intelovi priručnici za optimizaciju ili vodič za mikroarhitekturu Agnera Foga išta opisuju.Ili bilo koji terminolgoj CPU-arhitekture.
Skylakeov izvanredni planer uopćeno se u osnovi ne razlikuje od obitelji Pentium Pro / P6, uključujući Nehalem.Uops se dodjeljuju lukama tijekom dodjele / preimenovanja, a planer prvo bira najstariji spreman za svaki port.[Kako su točno planirani x86 uopsi?] (// stackoverflow.com/q/40681331).Uops moraju čekati izvršnu jedinicu, ali same izvršne jedinice nemaju stanja čekanja;svi su potpuno pripremljeni (osim za podijeljenost).Format uop pojednostavljen je u SnB-u kako bi bio kompaktniji, omogućujući veći RS / ROB, a koristi PRF, ali to je glavna promjena u odnosu na NHM.
XeonPhys je imao prvi preopterećeni pristup registrima svih njih.takav je autobus došao iz originalnog Xeona;što čini proširivo umnožavanje jezgre (sada očito buldožer).Planer buldožera na ovaj način gura grupne operacije.što znači da SIMD izračun možete gurnuti ravno u drugu jezgru;uglavnom ostale jezgre Buldožera ili bilo što drugo.Ova Xeon tehnologija istraživala je međusobno povezivanje vektorskih strojeva.Sandybridge to nema, i dalje se oslanjaju na mostove za nultu kopiju.FP uops su vjerojatno raspoređeni na jedan ili više taktova svakog pojedinog, poput premještanja na usklađene jezgre
One uopste ne moraju imati fiksni ciklus od jednog sata za sve značajke.to bi trebalo biti poznato izvana, ovisno o zahtijevanoj operaciji.ove arhitekture nisu FPGA.nisu zakačeni za jedan sat uvijek kako je predviđeno za svaku pojedinu varijantu ili seriju ... to je ono što predstavlja zahtjev za planerom za FP ili cjelobrojne operacije ... ako prijeđete na matematičke funkcije na razini SIMD-a za primjer.ne računaju svi sqrt ili kosinusi točno jedan sat.ovo je prešlo na jedinicu za raspoređivanje s nizom linearnih ili paralelnih ... čime je poništeno masovno velike taktove ...
U Dodatku.TPU-ovi ili GPU-ovi koji na sličan način izvode nekoliko ovih izračuna imaju nelinearno vrijeme računanja po naredbi u odnosu na ono što nazivamo uops.pouzdano je očekivati da bi svaka proizvodna linija iste jezgre imala ovo potpuno jednako, ali to nije u stvarnom svijetu.dakle implikacije razumijevanja planera na razini montaže.vrlo poučna veza, kopam po njoj hvala.
Svakako svi ovi uopsi imaju posebne specifičnosti za dopiranje silicija, što predstavlja glavni problem povezanih uputa u stvarnom planeru za nekoliko mnogih arhitektura.Uživao sam čitajući Petera, hvala.
uopće su latencije fiksne za zadani dizajn (npr. Skylake, Knight's Landing ili Ryzen) i ne ovise o podacima (osim za jedinicu div / sqrt).Ne razlikuje se od čipa do čipa u istom modelu.SSE / AVX / AVX512 nema kosinus u hardveru, već samo osnovne IEEE operacije (uključujući sqrt).Možda mislite na x87 mikrokodirane "fcose" koji su mnogi uops.Ljudi su testirali uopće latenciju i propusnost, na pr.https://agner.org/optimize/ i https://uops.info/.Intel ih čak objavljuje u [to je IACA alat] (// stackoverflow.com/q/26021337) i njihovom priručniku za optimizaciju.


Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 4.0 licenci pod kojom se distribuira.
Loading...