| proging pinigai istorija link04 paranoja apie | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| {local_links} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Yra dvi pagrindinės šiuolaikinių procesorių architektūros (tiksliau - koncepcijos),
jas būtų galima pavadinti ir dviem skirtingom ideologijom.
Viena vadinasi "CISC", kita - "RISC".
"CISC" yra daug senesnė procesorių kūrimo pakraipa. Pagrindinė "CISC" idėja yra tokia: jei mes turime dažnai naudojamą procesoriaus komandų seką, mes galime pakeisti ją specialia procesoriaus instrukcija. Kadangi tokia komandų seka jau bus realizuota aparatiškai, ji įvykdyta bus greičiau. Iš esmės, pirmus du kompiuterių egzistavimo dešimtmečius visi jie buvo kuriami, remiantis tokia idėja. Nors, norint sukurti pilnavertį kompiuterį, pilnai pakaktų keliolikos ar netgi kelių komandų. Tai jau būtų artima "RISC" idėjoms. Iš esmės, yra sukurtas netgi teorinis procesoriaus modelis, kuris gali vykdyti visų tipų uždavinius, naudodamas vieną komandą su vienu operandu! Taigi, kokios būtų konkretesnės "CISC" ar "RISC" pasirinkimo priežastys ir kuro šie procesoriai iš viso skiriasi? Ko gero, dažniausiai pateikiamas apibrėžimas būtų toks:
Nežinau, kaip jums, bet man tokie apibrėžimai nieko nesako: vien instrukcijomis nieko nepakeisi, juo labiau kad kai kurie iš šiuolaikinių "RISC" procesorių (pvz., "PowerPC") turi daugiau, nei šimtą instrukcijų, parinktų ne per daug protingai, dažnai - stengiantis išlaikyti suderinamumą su ankstesniais procesoriais, o kai kurie tipiški "CISC" procesoriai yra pakankamai apgalvoti. Juolab, kad pvz., tipiškiausi 8 bitų "CISC" procesoriai turi vos po kelioliką - keliasdešimt instrukcijų. Tad, ko gero, kriterijai būtų sudėtingesni:
Vis dėl to, sakyčiau, tipiškiausias "RISC" bruožas - tai specifinė, kraštutinai optimizuota architektūra, leidžianti procesoriaus galimybes panaudoti tiek efektyviai, kiek tai įmanoma ir neturinti jokių nereikalingų ar mažai reikalingų išplėtimų. Aišku, gilinantis, iš karto galima atmesti procesorius su viena komanda bei kai kurias netradicines architektūras, pvz., tokias, kur skaičiavimus atlieka ne procesorius, o operacinė atmintis. Kita vertus, reikia pastebėti, kad aiškios ribos tarp dviejų "architektūrų" nėra: tai ne tiek skirtingos architektūros, kiek skirtingas procesorių kūrėjų nusistatymas. Galų gale, net ir sukūrus tipišką "RISC" procesorių, jis tobulinamas, tad ilgainiui dalis jo komandų gali tapti nenaudingomis, dalis - dubliuotis, o dalis - veikti kaip papildomi išplėtimai. Taip, per kelias kartas, tipiškas "RISC" gali tapti tipišku "CISC". Gal geriausia būtų palyginti tipiškas "RISC" bruožų turėjusias mašinas - rusišką "M-10", sukurtą 1973 (tai pirmas pasaulyje "RISC" kompiuteris) ir tipišką šių laikų "CISC" procesorių šeimą - "Intel x86". Esminis "M-10" bruožas - tai specifinė procesoriaus architektūra:
Šis procesorius turėjo 2 128 bitų registrus, kurių kiekvienas galėjo veikti kaip du 64 bitų registrai. Kiekvienas iš šių, atitinkamai, galėjo veikti, kaip 2 32 bitų registrai, o pastarieji - kaip 2 16 bitų registrai. 512 bitų pločio duomenų šyna (magistralė) leisdavo per vieną ciklą pakrauti visus registrus duomenimis bei išsaugoti visus duomenis atmintyje (labai panaši, tik mažesnio našumo schema naudojama vėlesniuose "RISC" procesoriuose, pvz., "Sparc" - tai taip vadinamas registrų langas). Tuo atveju, kai procesorius vykdydavo operacijas su mažesniais, kaip 128 bitų skaičiais, su visais procesoriaus registrais buvo galima atlikti tas pačias operacijas sinchroniškai. Dėl to procesorius galėdavo vykdyti veiksmus su vektoriais (vienodo tipo duomenų sekomis). Adresacijai realizuoti "M-10" buvo panaudotas atskiras, nepriklausomai veikiantis procesorius, veikiantis sinchroniškai su aritmetiniu, tad, duomenų ir adresų registrai buvo atskirti. Kita vertus, toks atskyrimas leido itin paprastai ir efektyviai vykdyti išankstinį duomenų krovimą. Visiška priešingybe tokiems procesoriams tapo "Intel x86" serijos procesoriai, kurių registrų paskirtyje bei komandų veikime susigaudytų tik pamišėlis. Viskas prasidėjo, matyt, nuo "Intel 8080" procesoriaus, kuris buvo gana silpnas, tad jį teko atitinkamai optimizuoti (tuo metu techninės galimybės neleido procesoriuje panaudoti nei pakankamai komandų, nei pakankamai registrų, etc.). Gavosi maždaug toks įrenginys:
Procsorius turi 7 8 bitų registrus. šeši iš jų suporuoti taip, kad gali būti naudojami, kaip 3 16 bitų registrai. Visi registrai yra griežtai specializuoti, kiekvienas naudojamas tik su tam tikromis opearcijomis. Kaip matome, "Intel 8080" nepasižymėjo grožiu (netgi geometriniu). Jis buvo sukurtas dar senesnio "Intel 8008" procesoriaus, skirto paprastiems kalkuliatoriams, pagrindu. Vėliau "Intel" sukūrė "8086" procesorių. Nors jis nebuvo tiesiogiai pritaikytas "8080" programoms vykdyti, "Intel" nusprendė išsaugoti seną architektūrą: tokiu atveju "8080" programas buvo galima vykdyti po nesudėtingos transliacijos. Gavosi štai toks daiktas:
Jau iš bendros grafinės schemos matosi, kad 1978-aisiais, daug toliau pažengusiose Jungtinėse Valstijose sukurtas procesorius "Intel 8086", lyginant su rusišku "M-10", atrodo kaip paliegęs invalidas. Dar labiau šis įspūdis sustiprėja, palyginus registrų atliekamas funkcijas ir adresaciją: nors šis procesorius gali adresuoti iki 1 megabaito atminties, realiai adresacija yra 16bitų su keturiais segmentiniais registrais (CS, DS, SS, ES). Kitaip tariant, programai kiekvienu momentu pasiekiamos 4 adresų sritys, kurių kiekviena yra 64 kilobaitų dydžio. Kai kurių rūšių operacijos gali būti tiesiogiai atliekamos tik su kuriuo nors vienu iš atminties segmentų. Registrai irgi pasižymi išskirtinumu bei papildomomis savybėmis: pvz., BX ir DX gali būti naudojami adresacijai, nors AX ir CX tokių galimybių neturi. Daugybos ir dalybos veiksmuose visada naudojamas AX registras, o su CX ir BX daugybos ir dalybos atlikti negalima. Rezultatas iš tikro bjaurus, efektyviai panaudoti registrų beveik neįmanoma. Didele dalimi tokia architektūra yra tiesiog paveldėta iš 1974-aisiais sukurto 8 bitų "Intel 8080" procesoriaus ir net iš 1972-aisiais sukurto "Intel 8008" procesoriaus. Naujesni "x86" tipo procesoriai, pradedant "Intel 80386", turi 32 bitų architektūrą, kuri iš tikro tėra tos pačios "Intel 8086" išplėtimas:
Nors iš karto matosi, kad pastarasis procesorius sudėtingumu jau turėtų aplenkti senovinį "M-10" (iš tikro, taip ir yra), matosi ir tai, kad jis nei kiek nepagražėjo - greičiau atvirkščiai, tapo dar didesniu gargaru. Per porą "x86" architektūros gyvavimo dešimtmečių, šiuose procesoriuose neatsirado ir "SIMD" instrukcijų (jos pirmą kartą labai ribotai (tiesiai šnekant - invalidiškai) panaudotos buvo tik "Pentium III", kaip "MMX" papildymas), leidžiančių vienu metu vykdyti tą pačią komandą grupei duomenų apdirbti. Būtent dėl tokio tipo komandų labai pagarsėjo 1967-1973 sukurtas "ILLIAC IV" kompiuteris - tūkstančiai jo procesorių vienu metu vykdydavo vieną ir tą pačią komandą, bet kiekvienas - su savais duomenimis. Tokia schema leido atsisakyti daugelio instrukcijų atpažinimo ir pan. mechanizmų, sumažinant "ILLIAC IV" kainą ir kartu smarkiai padidinant našumą. Analogiškos metodikos buvo panaudotos ir jau minėtame rusiškame "M-10" kompiuteryje. Vidutinio ir didelio našumo procesorių rinkoje "CISC" žlugimą galutinai pademonstravo "Intel" pasirinkimas, kuriant "Intel 486" procesorius: šį kartą, vitoje to, kad kurti eilinį, dar sudėtingesnį "CISC" gargarą, "Intel" sukūrė didelio našumo "RISC" procesorių, turintį registrų rinkinį ir adresacijos mechanizmus, būdingus "Intel 80386" procesoriui, o paskui prie viso to prikabino aparatinį transliatorių, kuris tiesiog keičia "80386" komandas į "RISC" branduolio komandas bei jų sekas. Nors, iš pirmo žvilgsio, tokia schema atrodo dar sudėtingesnė, nei ankstesnė "80386", realiai ji gali turėti netgi mažiau loginių elementų, o dirbti daug greičiau. "Intel" sprendimas pasiteisino: "486" procesorius, esant tam pačiam taktiniam dažniui, dirbo 2 kartus greičiau už "386", tad tokiu keliu "Intel" (kaip, beje ir "AMD", "Cyrix" bei kiti) eina iki šiol. Kraštutinį žingsnį šioje srityje žengė "Transmeta" kompanija, išleidusi "Crusoe" procesorius: pastarieji yra tipiški "RISC" procesoriai, turintys komandų rinkinį, išplėstą efektyvesniam kitų procesorių emuliavimui. Rezultate šie procesoriai, turėdami praktinius "RISC" privalumus (mažas energijos naudojimas, paprastumas ir pigumas), našumu prilygsta to paties taktinio dažnio "Intel" procesoriams. Kartu "Crusoe" aparatiškai nėra susieti su "x86" architektūra, tad, bent jau teoriškai, gali emuliuoti ir kitų architektūrų procesorius. Jei pabandytume sukurti našumui optimizuotą, minimalų elementų skaičių turintį procesorių, turintį labai trumpą darbinį žodį, susidurtume su paprasta problema: tuo atveju, jei naudosime greičiausią (sinchroniškai su aritmetiniu įrenginiu dirbančią) komandų ir registrų žymėjimo schemą, pagrįsta identifikacija pagal pavienius bitus, remiantis jų prioritetais, į 8 bitų režimu galėsime panaudoti vos keletą registrų bei komandų. Norint kreiptis į duomenis, mums reiks mažiausiai vieno adresų registro, norint apdirbinėti masyvus ar naudoti sąlyginę adresaciją, mums prireiks indeksų registro. Dar dviejų registrų prireiks, norint atlikti bet kokias aritmetines operacijas. Taigi, 4 iš 8 bitų susinaudos. 4 bitai liks komandoms. Tačiau, esant ribotam registrų skaičiui bei ribotoms galimybėms, mums 4 komandų jau nepakaks. Juo labiau, kad dalis komandų naudos du operandus, taigi nepakaks nurodyti kad naudojamas registras A ir registras B, o teks dar ir nurodyti registrų panaudojimo tvarką. Štai čia ir prasideda inžinierių gudrybės: pvz., vietoje registrų imama naudoti akumuliatorius. Tokiu atveju, vykdant skaičiavimus, rezultatas visada bus permetamas į konkretų registrą.
Norėdami užkoduoti tokių komandų rinkinį, galėsime pasinaudoti paprastu interpretatoriumi:
Norint "CISC" architekturos paremtos idėja, kad programos bus vykdomos greičiau, jei jos bus sudarytos iš šimtu ar tukstanchiu skirtingu, specializuotu komandu. Tipishkas tokiu procesoriu pavyzdys - ivairus xxx86 architekturos procesoriai. Dar pirmieji 8086 procesoriai turejo daugiau kaip shimta skirtingu komandu. Naujesni, pvz., Pentium procesoriai ivairiu komandu turi dar daug kartu daugiau. Ivairios komandos tokiuose procesoriuose turi daugybe variaciju. Tai, atseit, turetu padidinti procesoriu darbo greiti, nes programas butu galima efektyviau optimizuoti. Deja, kaip bebutu gaila, pirmuju CISC architekturu shalininkai klydo. Devintajame deshimtmetyje, atsiradus zhymiai sudetingesniems procesoriams, paaishkejo, kad komandu skaichiaus didinimas procesoriaus efektyvuma tiktai sumazhina. Priezhastys kelios: Visu pirma, dvi panashios komandos, skirtos tik truputeli skirtingiems dalykams, dirbs tik truputeli greichiau, nei viena, bet universali komanda. Del to, net ir idealiu atveju, nashumas padides labai nezhymiai. Antra, keleriopai sudetingesnis procesorius, turintis keleriopai dauigau komandu, tures ir zhymiai letesni komandu ishrinkimo bei identifikavimo mechanizma. Del to procesoriaus greitis gali smarkiai sumazheti. Trechia - itin sudetingus procesorius itin sunku optimizuoti. Sunku ir atidirbti tokiu procesoriu schemas, bet dar sunkiau optimizuoti tokius procesorius, pritaikant juos realaus kodo vykdymui bei analizei. Rezultatas - tokie sudetingi procesoriai dirba labai ish leto. Ketvirtas, itin svarbus dalykas - efektyviai optimizuojanchius kompiliatorius CISC procesoriams sukurti yra zhymiai kebliau, nei RISC, del to daugelis programu nesugeba efektyviai pasinaudoti tomis "galingomis" CISC komandomis. Rezultatas aishkus - del per didelio sudetingumo CISC procesoriai tampa neefektyviais. Ashtuntame deshimtmetyje tarp daugelio procesoriu kureju eme plisti mintis, kad procesorius supaprastinus, butu galima juos efektyviai optimizuoti. Viska optimizavus, nedideli komandu rinkineli turintys procesoriai galetu dirbti greichiau uzh sudetingus. Negana to, jie kainuotu bent kelis kartus pigiau. Dar daugiau - jie butu ekonomishki, ir del to galetu dirbti neshiojamuose kompiuteriuose. Ideja pasiteisino, o greitai ji buvo dar patobulinta. Paaishkejo, kad su paprastais procesoriais galima naudoti itin rafinuotus programu greichio didinimo metodus - pavyzdzhiui, aptikti, kokios komandos kada bus vykdomos, ir reikalingas pakrauti i procesoriaus kesha ish anksto. Taip pat, kai kurias, programoje nuosekliai nurodytas komandas vykdyti vienu metu - paraleliai. Svarbiu dalyku tapo ir ypatingai mazhos RISC procesoriu energijos sanaudos: jei procesorius ekonomishkas, jis mazhai kaista, o jei jis mazhai kaista, galima i ta pati kristala ideti kad ir didesni kesha, ir kartu padidinti kesho taktini dazhni. Betobulindami RISC architekturas, matematikai sukure ir keleta daugiau kuriozishku, nei naudingu architekturu. Tachiau jos tikrai idomios - pavyzdzhiui, vienoje ish tokiu architekturu procesorius turi tik viena(!!!) komanda, kuriai perduodamas tik vienas(!!!) parametras. Nepaisant to, shios komandos pakanka tam, kad parashyti bet kokias programas. Devinto deshimtmechio viduryje procesoriu gamintojai isitikino, kad RISC procesoriu greitis yra bent kelis kartus didesnis, nei CISC. Tuo isitikino net ir Intel, pabandzhiusi savo 80286 procesorius pakeisti RISC architekturos 80860 procesoriais. Deja, del nepilno programinio suderinamumo nauji Intel procesoriai nepaplito. Ishpopuliarejo pagalbiniams tikslams skirtas, su 80286 suderinamas 80386. Greitai Intel isitikino, kad 80386, kuris buvo skirtas greitai 8086 emuliacijai, gavosi toks sudetingas, kad jo patobulinti jau neisheina. Shis procesorius tapo paskutiniu galingu Intel sukurtu 100% tikru CISC procesoriumi. Po to Intel procesorius eme tobulinti gudriau. Jau Intel 486 turejo RISC branduoli, kuris ish tikruju ir vykde visas operacijas. Branduolys buvo sukurtas Intel 80860 procesoriu pagrindu. Komandas ish CISC i RISC transliavo specialus papildomas irenginys, esantis tame pachiame kristale, kaip ir procesorius. Greitai prie panashiu architekturu perejo ir Intel procesoriu klonuotojai - Cyrix bei AMD. Pastaroji firma RISC tipo procesoriais uzhsieme bene ankschiau uzh Intel, bet irgi nesekmingai. Visi shiuolaikiniai xxx86 tipo procesoriai dabar gaminami taip, kaip sumane Intel - jie turi RISC branduoli, kuris tiesiog emuliuoja CISC komandu rinkini. Aishku, del emuliacijos tokie procesoriai dirba daug lechiau, nei galetu. Kita vertus, tokiu sudetingu CISC procesoriu, kaip Pentium, nenaudojant RISC branduolio, gali net nepavykti sukurti. Tur but ryshkiausias panashiu architekturu pavyzdys - tai nauji Transmeta firmos Crusoe procesoriai. Jie net neturi aparatinio transliatoriaus, del to yra zhymiai lankstesni ir paprastesni uzh Intel Pentium, bet kartu sugeba emuliuoti Pentium procesorius beveik tokiu pat greichiu. Kitos firmos gamina daugeli kitu RISC procesoriu. Labiausiai pagarseje ish tokiu procesoriu - tai Digital(dabar Compaq padalinys) Alpha procesoriai, IBM ir Motorola firmu sukurti PowerPC, Silicon Graphics(dabar - tiesiog SGI) MIPS, Hewlett Packard firmos PA-RISC ir ivairus Sun Microsystems Sparc. Deja, idealios architekturos turbut nera. Shiuolaikiniai RISC procesoriai turi daug komandu - kai kada beveik shimta, o tai jau panashiau i CISC, nei i RISC. Tad faktishkai tipishki shiuolaikiniai procesoriai yra RISC ir CISC mishinys. {text} |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Burgzt Banner Exchange |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||