Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!
RISC
RISC arba Reduced Instruction Set Computer - įvairios procesorių architektūros, kurių idėjos ėmė rastis apie 1970, bet pirmi bandymai tokias architektūras sukurti - jau kiek vėliau, apie 1980 metus. Tokie procesoriai būna greiti ir ekonomiški, tačiau normalus žmogus jais programuoti tiesiog negali.
RISC procesoriai praktikoje dažniausiai pasižymi visa krūva teigiamų savybių:
- RISC būna daug greitesni, nei panašaus sudėtingumo ir darbinio dažnio CISC procesoriai, greičų skirtumas siekia nuo keliasdešimt procentų iki kelių kartų
- RISC procesoriai, gaminti panašiu technologiniu lygiu, paprastai turi daug mažiau elementų, nei CISC procesoriai. To rezultatas - dvejopas:
- Tas pats procesorius, turintis daug mažiau elementų, naudoja ir daug mažiau energijos
- Mažiau kaistantis procesorius gali dirbti gerokai aukštesniu dažniu, tad su ta pačia technologija pasiekiamas dar didesnis greitis
- Gero našumo RISC procesoriai gali būti pagaminami su žymiai paprastesnėmis technologijomis
- Esant toms pačioms technologijoms, į vieną to paties sudėtingumo mikroschemą galima įdėti gerokai daugiau (paprastai 2-4 kartus) branduolių
- Dėl daug mažesnio bazinio komandų kiekio atsiranda žymiai didesnės galimybės automatiškai optimizuoti programas kompiliacijos metu
Kaip pvz., tokio našumo įrenginiai, kaip smartfonai, išvis negalėtų netgi egzistuoti, jei nebūtų RISC architektūrų: tokie mažyčiai ir į tokius mažus korpusus sukišti CISC tipo procesoriai, kaip pvz., x86, ne tik nusodintų bateriją per pusvalandį, bet ir banaliai tiesiog perkaistų ir sudegtų. Tuo tarpu tipiški mobiliakuose esantys ARM procesoriai, turintys RISC architektūrą, išlaiko visą dieną darbo ir telefonas nuo to darbo paprastai neužsidega.
Tipiški RISC procesorių skirtumai
Paprastai RISC sistemose atsisakoma kelių CISC sistemoms būdingų dalykų, tačiau įvedama ir keletas nuosavų įdomumų:
- Paprastai visiškai nėra jokio steko
- Nėra programos struktūravimo komandų, skirtų funkcijų iškvietimui ar pan.
- Labai apribojamos galimybės dirbti su atmintimi, neretai leidžiama atmintį pasiekti tik per registrų langą
- Vietoje nedidelio kiekio įprastų procesoriaus registrų įvedamas registrų langas - didelis registrų masyvas
- Aritmetinės operacijos suprastinamos, kartais netgi paliekant išvis tiktai vieną vienintelę sudėties operaciją
Kadangi visiškas procesoriaus suprastinimas visgi ne visada padidina našumą (nors visada sumažina kainą ir energijos sąnaudas), tai daugelis procesorių būna gan kompromisiniai, turintys gana daug RISC bruožų, bet ir truputį sudėtingesnių komandų.
Kaip pvz., IBM, Motorola ir Apple sukurtas PowerPC procesorius turėjo ir registrų langus, ir gana daug skirtingų komandų, nes specializuotos komandos veiksmus visgi leisdavo įvykdyti greičiau, nei paprastų RISC komandų sekos. Taigi, nors PowerPC procesoriai ir laikomi RISC architektūra, jie visgi turėjo ir CISC bruožų.
Beje, pirmas mikroprocesorius, jau turėjęs ir tipišką RISC procesorių bruožą - registrų langą, Texas Instruments TMS9900, buvo išleistas dar 1976 metais, trim metais anksčiau, nei Intel išleido 8086 procesorių. Nors TMS9900 nebuvo visai tipiškas RISC, nes turėjo gana nemažai komandų, jis jau buvo gan stiprus žingsnis link architektūrų supaprastinimo.
Vėliau jau atsirado ir daug kitų procesorių, kurie buvo daug ryškesni RISC pavyzdžiai, savo laiku labai smarkiai dėdavę visokias x86 architektūras į vietą:
Architektūriniai RISC ir CISC skirtumai
RISC idėja yra tokia, kad gerai optimizuotas procesorius turi būti optimizuotas maksimaliam našumui, o ne tam, kad programuotojams būtų lengva programuoti asembleriu. Tai reiškia, kad jei kažkokia komanda procesoriui nėra būtina ir našumo kaip nors nepagerina, tai ji ir nereikalinga, o vietoje jos gali puikiai veikti seka iš kelių kitų komandų.
Kaip pvz., CISC architektūroje gali būti tokia komandų seka:
- :START
- CALL SUBROUTINE
- JMP END
- :SUBROUTINE
- NOP # Do something
- RET
- :END
Šita komandų seka išties bus visiškas ekvivalentas kokios nors C kalba parašytos funkcijos:
- // Start
- func();
- goto END
- func() {
- // Do nothing
- }
- END:
Tokia veiksmų seka bus ir lengvai transliujama iš aukšto lygio programavimo kalbos į asemblerį, ir pačiu asembleriu rašyti bus paprasta, tačiau procesorius turės turėti visą krūvą loginių grandinių, kurios užkoduotų visai kitą veiksmų seką.
Pvz., realus veiksmų ekvivalentas išties bus apytiksliai toksai (išties panašiai, bet ne visai taip, nes čia išgalvotas asemblerio variantas):
- MOV REGISTER1, CURRENT_ADDRESS
- JMP END
- ADD STACK_REGISTER, 1
- MOV_TO_ADDRESS STACK_REGISTER, REGISTER1
- MOV REGISTER2, SUB
- JMP REGISTER2
- :SUBROUTINE
- NOP # Do something
- MOV_FROM_ADDRESS STACK_REGISTER, REGISTER1
- SUB STACK_REGISTER, 1
- ADD REGISTER1, 4 # forward by 1 word from saved position
- JMP REGISTER1
- :END
Tai vat kažkaip taip gausis, labai painiai ir nelabai suprantamai programuotojams. Bet štai koksai nors kompiliatorius, kuriame viskas suprogramuota iš anksto, visą tą kodą generuos be jokių problemų ir tikrai ne blogiau, nei generuotų programuotojas. O tai reiškia, kad procesorius galės būti paprastesnis, turės daug daug mažiau elementų, dėl to mažiau naudos energijos, dėl to mažiau kais, o dėl to galės turėti daugiau gigahercų ir dar kokių nors naudingų skaičiavimą pagreitinančių dalykų.
Tai toksai ir skirtumas: RISC procesoriai yra išties beveik nepritaikyti žmogiškam programavimui. Galima programuoti ir juos asembleriu, nes kitaip jiems ir kompiliatorių nesukursi, bet tas programavimas būna skirtas tik pačiai pradžiai. Po to, kai padarytos esminės kompiliatoriaus dalys, viskas daroma jau aukšto lygio programavimo kalbomis, automatizuotai.