Рачунар са сложеним скупом инструкција

Из Википедије, слободне енциклопедије
(преусмерено са CISC)

Рачунар са сложеним скупом инструкција (CISC) је рачунар где једна инструкција може да изврши неколико операција ниског-нивоа (као што су учитавање из меморије, аритметичке операције и меморијско складиште) и/или су у стању да ураде операције са више корака или режиме адресирања унутар појединачних инструкција. Термин је дат ретроактивно за разлику од рачунара са смањеним скупом инструкција (RISC).[1][2]

Примери CISC скупа инструкција архитектура су System/360 кроз z/Architecture, PDP-11, VAX, Motorola 68k, и x86.

Историјски контекст дизајна[уреди]

Распламсавање сукоба и предности[уреди]

Пре него што је RISC филозофија постала истакнута, многи рачунарски архитекти покушали су да премосте тзв семантички јаз, ондосно креирање инструкционих скупова који директно подржавају програмске конструкције на високом нивоу, као што су процедуре позива, контрола петље и сложени режими адресирања, што омогућава да се структура података и приступ низу комбинују у појединачне инструкције. Инструкције су углавном високо кодиране у циљу унапређења густине кода. Компактна природа таквог инструкционог скупа резултује у програме мањих величина и мање (спорије) приступа главне меморије, што је у то време (почетком 1960-их у даље) резултовало огромним уштедама на трошковима за меморију рачунара и складиштење дискова, као и брежег извршења. То је значило добру продуктивност програмирања чак и у асемблерском језику, као и у језику високог нивоа као што су Fortran и Algol где нису увек доступни или одговарајући (микропроцесори у овој категорији су и даље понекад програмирани на асемблерском језику за поједине врсте критичних апликација).

Нове инструкције[уреди]

У 1970. години, анализа језика високог нивоа показала је неке сложене имплементације машинског језика и утврђено је да нове инструкције могу побољшати перформансе. Неке инструкције су додате које никада нису биле намењене да се користе у асемблерском језику, али се добро уклапају са компајлерским језицима високог нивоа. Компајлери су ажурирани да искористе предности ових инструкција. Предности семантички богатих инструкција са компактним кодирањем може се видети и у новим процесорима, посебно у сегменту високох перформанси где су кешови централне компоненте (за разлику од већине уграђених система). То је зато што су ове брзе, али сложене и скупе, меморије ограничене величине, чинећи компактан код корисним. Наравно, главни разлог зашто су потребне је тај да главне меморије (тј. данас динамички RAM) остају споре у поређењу са (високим перформансама) CPU-језгром.

Питања дизајна[уреди]

Док многи дизајни постижу циљ високог протока по нижој цени и такође омогућавају да језичке конструкције високог нивоа буду изражене помоћу мањих инструкција, примећено је да то није увек случај. На пример, на нижим крајевима верзија комплексних архитектура (тј. који користе мање хардвер) може да дође до ситуација у којима је било могуће да се побољшају перофрмансе без коришћења сложених инструкција (као што су процедуре позивања или улазна инстрикција), већ уместо тога коришћењем секвенца једноставнијих инструкција.

Чак и у балансираним дизајнима високих перформанси, високо кодиране и (релативно) инструкције на високом нивоу могу бити компликоване за декодовање и ефикасно извршавање унутар ограниченог транзисторског буџета. Такве архитектуре су због тога захтевале много рада на делу дизајна процесора у кешовима где једноставније, али (обично) спорије, решење базирано на декодованим табелама и/или микрокод секвенцирање није прикладно. У време када су ресурси за транзисторе и друге компоненете били ограничени, тада је такође остало мање компененти и мање могућности за друге врсте оптимизације дизајна.

RISC идеја[уреди]

Кола која обављају радње дефинисане микрокодом у многим (али не свим) CISC процесорима је, само по себи, процесор који у много чему подсећа на структуру раних CPU дизајна. У раним 1970-им годинама, то је довело до идеје повратка једноставнијем дизајну процесора како би он могао да се избори без (тада релативно великих и скупих) ROM табела и/или PLA структура за секвенцирање и/или декодирање. Први (ретроактивни) RISC-означени процесор (IBM 801 - IBM's Watson Research Center, средином 1970-их година) био је чврсто pipelined једноставна машина првобитно намењена да се користи као интерни микрокод кернела, или мотора, у CISC дизајну, али такође је постао процесор који је увео идеју RISC-а у нешто већој јавности. Једноставност и правилност у видљивом скупу инструкција олакшали су имплементацију фазе преклапања процесора (pipelining) на машинском нивоу (тј. на нивоу гледања компајлером.) Међутим, pipelining на том нивоу је већ коришћен у неким CISC “суперрачунарима” високих перформанси у циљу смањења времена циклуса инструкција (упркос компликацијама имплементирања у оквиру ограниченог броја компоненети и изводљивости сложених ожичења у то време). Извршење унутрашњег микрокода у CISC процесорима, с друге стране, може бити више или мање pipelined у засвисности од одређеног дизајна, и стога више или мање сличан основној структури RISC процесора.

Суперскалар[уреди]

У савременијем контексту, сложене променљиве дужине кодирања користе се од стране неких типичних CISC архитектура које их чине копликованим, али ипак изводљивим, да би се изградила суперскаларна импелементација CISC који програмира модел директно; у-реду (in-order) суперскаларни првобитни Pentium и изван-реда (out-of-order) суперскаларни Cyrix 6x86 су добро познати примери. Чести приступ меморији за операнде типичне CISC машине може ограничити ниво паралелизма инструкција које се могу издвојити из кода, иако је то јако посредовано брзим кеш структурама коришћених у модерним дизајнима, као и другим мерама. Због само по себи компактним и семантички богатим инструкцијама, просечан износ обављеног рада по јединици кода машине (тј. по бајту или биту) већи је за CISC него за RISC процесоре, што му може дати значајну предност у модерно кеш заснованој примени.

Транзистори за логику, PLAs, и микрокод нису више оскудни ресурси; данас су само велики кешеви високе брзине лимитирани максималним бројем транзистора. Иако комплексан, број транзистора CISC декодера није експоненцијално растао као укупан број транзистора по процесору (већина се обично користи за кеш). Заједно са бољим алатима и побољшаној технологији, дошло се до нових имплементација високо кодираних и дизајна променљиве дужине без ограничења оптерећења-складишта (тј. не-RISC). Ово регулише ре-имплементацију старијих архитектура као што је свеприсутни x86 (види доле), као и нови дизајн за микроконтролере за уграђене системе, и за сличне употребе. Суперскаларна сложеност у случају модерног х86 је решена конвертовањем инструкција у једној или више микрооперација, односно посредним и непосредним суперскаларним извршавањем; Pentium Pro и AMD K5 су рани примери за то. Он омугућава да прилично једноставни суперскаларни дизјан да буде лоциран после (релативно сложеног) декодера (и бафера), чинећи га светски поштованим.

CISC и RISC термини[уреди]

Термини CISC и RISC су постали мање значајни са континуираним развојем CISC и RISC дизајна и имплементацијама. Прва високо (или чврсто) pipelined х86 архитектура, на 486 дизајну Intel-а, AMD-а, Cyrix-а, и IBM-а, подржавала је сваку инструкцију коју су његови претходници урадили, али су постигли максималну ефикасност само на прилично једноставном х86 подскупу који је био само нешто више од типичног RISC скупа инстрикција (тј. без типичних RISC ограничења оптерећења-складишта). Intel P5 Pentium генерација била је суперскаларна верзија ових принципа. Међутим, савремени х86 процесор такође (типично) декодира и дели инструкције у динамичким секвенцама интерно баферованим микро-операцијама, које не само што помажу извршавању већих подскупова инструкција у pipelined (преклапању) облику, већ такође олакшавају напреднију екстракцију паралелизма изван стрим кода, за још беље перформансе.

Насупрот популарним поједностављењима (представљеним такође у неким академским текстоваима), нису сви CISCs микрокодовани или са “сложеним” инструкцијама. Како је CISC постајао свеобухватни термин са значењем било чега што није оптерећење-складиште (RISC) архитектура, то није број инструкција, нити сложеност имплементације или самих инструкција, који дефинишу CISC, већ чињеница да аритметичке инструкције такође обављају меморијски приступ. У поређењу са малим 8-битним CISC процесором, RISC са инструкцијама у покретној тачки је сложен. CISC чак и не мора да има сложен начин адресирања; 32 или 64-битни RISC процесор меже имати сложенији начин адресирања него мали 8-битни CISC процесор.

PDP-10, PDP-8, Intel 386, Intel 4004, Motorola 68000, System z mainframe, Burroughs B5000, VAX, Zilog Z80000, и 6502 све неравномерно варирају бројем, величинама и форматима инструкција, бројем врстама и величинама регистара и доступним типовима података. Неки имају хардверску подршку за операције као скенирање за поднит, произвољно прецизну BCD аритметику, или трансцеденталне функције, док други имају само 8-битно сабирање и одузимање. Али они су сви у CISC категорији јер имају “оптерећење-радне” инструкције која отперећује и/или меоријске складишне садржаје у оквиру исте инструкције које обављају стварне калкулације. На пример, PDP-8 који има само 8 фиксне дужине инструкције и уопште нема микрокод, је CISC јер како инструкције раде, PowerPC, који има више од 320 инструкција (више него VAXes) и унутрашњу сложеност као преименовање регистара и поновно ређање бафера је RISC, док Minimal CISC има 8 инструкција, али је јасан CISC јер комбинује приступ меморији и рачуна у истим инструкцијама.

Неки од проблема и противречности у овој терминологији ће можда нестати као више систематски термини, као што су (не) оптерећење/складиште, постаће популарнији и евентуално заменити непрецизне и мало контра-интуитиве RISC/CISC термине.

Види још[уреди]

Нотес[уреди]

  • Tanenbaum, Andrew S. (2006) Structured Computer Organization, Fifth Edition, Pearson Education, Inc. Upper Saddle River, NJ.

Референце[уреди]

  1. ^ Patterson, D. A. and Ditzel, D. R. 1980. The case for the reduced instruction set computing. SIGARCH Comput. Archit. News 8, 6 (October 1980), 25-33. DOI= http://doi.acm.org/10.1145/641914.641917
  2. ^ Lakhe, Pravin R. (2013 June). „A Technology in Most Recent Processor is Complex Reduced Instruction Set Computers (CRISC): A Survey“. pp. 711-715.