Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


RISC

Iš Pipedijos - durniausios enciklopedijos.
Jump to navigation Jump to search

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.