RISC (на английски: Reduced Instruction Set Computing; буквално изчисление с ограничен набор от инструкции) е подход в дизайна на процесора, който се фокусира върху набора от инструкции на процесора, но понятието говори също и за други характеристики на дизайна на процесора, в допълнение към набора от команди.

Диаграма на процесора RISC

Този вид дизайн (микроархитектура) е противоположен на ЦИСК архитектурата (CISC, Complex instruction set computing ). Концепцията е инструкциите да са по-малко на брой, но по-добре оптимизирани и извършващи повече функции. Тя се базира на прозрението, че опростен набор инструкции (за разлика от сложен набор) осигурява по-висока производителност, когато се комбинира с микроархитектура, способна да изпълнява тези инструкции при по-малко цикли на инструкция. Компютър, базиран на тази стратегия, се нарича компютър с редуциран набор от инструкции (на английски: reduced instruction set computer) или RISC.

Различни предложения са направени по отношение на точното определение за RISC, но общата концепция е, че това е система, която използва малък, силно оптимизиран набор от инструкции, а не по-гъвкав набор от инструкции, което е по-често срещано в други видове архитектури. Друга доста срещана черта е, че RISC системите използват архитектурата на load/ store, където паметта е нормално достъпна само чрез специални инструкции, а не е достъпна като част от други инструкции като например add.

Въпреки че редица системи от 60-те и 70-те години на 20 век са считани за предшественици на RISC, съвременната версия на дизайна датира от 1980-те години. Най-силно свързани с популяризирането на тази концепция са Станфордския университет и Университета на Калифорния, Бъркли. Дизайнът на Станфорд е комерсиализиран като по-успешната MIPS архитектура, докато RISC архитектурата на Бъркли дава името на цялата концепция, комерсиализирана като SPARC. Друг успех от периода принадлежи на IBM, която в крайна сметка създава Power Architecture. Голямо разнообразие от подобни проекти процъфтява в края на 1980-те и особено в началото на 1990-те години.

Добре познати устройства от семейството на RISC са: DEC Alpha, AMD Am29000, ARC, ARM, Atmel AVR, Blackfin, Intel i860 и i960, MIPS, Motorola 88000, PA-RISC, Power (включително PowerPC), RISC-V, SuperH и SPARC. През 21 век използването на ARM архитектурата в смартфони и таблети, като например устройствата на iPad и Android предоставя широка потребителска база за RISC-базирани системи. RISC процесори се използват и в някои суперкомпютри.

„Не е ясно какво е РИСК. РИСК е термин, като изкуствен интелект. Това е жаргонна дума, която има тенденция да се използва за всичко“

Joseph Henry Condon, Bell Labs

История и развитие редактиране

Първите схеми и идеи за подобен вид предаване на информация е през 60-те и 70-те години на 20 век. Първото внедряване на тази архитектура става през 80-те години. На практика два университета – Университета на Стандфорд и Университета на Калифорния разработват 2 различни проекта. Станфордският университет успешно комерсиализира МИПС архитектурата.

Редица системи от 70-те (и дори от 60-те) години са били посочвани като първата РИСК архитектура защото частично са били базирани на load/store подхода. Терминът RISC е въведен от Дейвид Патерсън по време на Berkeley RISC проекта, въпреки че до известна степен подобни концепции е имало и преди това. В CDC 6600, проектиран от Seymour Cray през 1964 г., използван с load/ store архитектура само с два насочени режима и 74 оперативни кода с основен такт за инструкция 10 пъти по бърз от времето за достъп до паметта. Поради тази оптимизирана load/ store архитектура на CDC 6600 Jack Dongarra посочва, че тя може да се разглежда като предшественик на съвременните RISC системи, въпреки че трябва да се преодолеят редица други технически проблеми за да се разработи съвремената РИСК архитектура.

Michael J. Flynn вижда в дизайна на IBM 801 първата RISC система, който е започнат през 1975 г. от John Cocke и е завършен през 1980 г. 801 в крайна сметка е бил произведен във форма на единичен чип през 1981 г., заявен като "Research OPD [Office Products Division] Micro Processor". Както подсказва името, този процесор е проектиран за задачи „мини“, и също така е използван в IBM RT-PC през 1986 г., което се оказа търговска грешка. Но 801 вдъхновява няколко изследователски проекта, включително нови такива в IBM, които в крайна сметка ще доведат до IBM POWER instruction set architecture.

Най-публичните РИСК архитектури са били резултат от университетски изследвания спонсорирани от VLSI програмата на DARPA. VLSI програмата, практически неизвестна днес, е довела до огромен брой постижения в проектирането на чипове, производството и дори в компютърната графика. Проектът Berkeley RISC започна през 1980 г. под ръководството на David Patterson и Carlo H. Sequin.

Berkeley RISC се основава на получаване на резултати чрез използването на конвейер и агресивна употреба на техника, което е известно като регистър на прозорци. В традиционните CPU, единият е с малък брой регистри, като програмата може да използва всеки регистър по всяко време. В CPU с register windows, има голям брой регистри, например 128, но програмите могат да използват само малък брой от тях, например 8, във всеки един момент. Програма която се лимитира до 8 регистри за процедура може да направи много бързо процедурно повикване: Повикването просто премества прозореца „надолу“ от 8 с набор от 8 регистри използвани от процедурата, а връщането премества прозореца обратно. Проектът Berkeley RISC предоставя RISC-I процесора през 1982 г. Състои се от само 44 420 транзистори (в сравнение със средни стойности от около 100 000 в по-новите CISC дизайни от тази ера).RISC-I има само 32 инструкции и все още напълно надмина всеки друг едночипов дизайн. Те продължили започнатото с RISC-II през 1983 г. – състоящ се от 40 760 транзистора, имащ 39 инструкции, който работи три пъти по-бързо от RISC-I.

MIPS архитектурата се появява от завършил през 1981 г. курс на John L. Hennessy в Станфордския университет, превръщайки се във функционираща система през 1983 г., можеща да работи с прости програми от 1984 г. Тази система е последвана от MIPS-X през 1984 г. John L. Hennessy и колегите му създават MIPS Computer Systems. През 1985 г. пускат микропроцесора R2000, а през 1988 г. той е последван от R3000

В първата половина на 80-те години на двадесети век сериозни несигурности обграждат РИСК концепцията и не става ясно дали тя би могла да има сериозно бъдеще, но до средата на 80-те концепциите се развиват достатъчно, за да бъде видяна комерсиална стойност. През 1986 Хюлет Пакард започват да използват ранна имплементация на техния PA-RISC в някои от компютрите си. През това време усилията на Berkeley RISC стават толкова известни, че това създава име на цялата концепция и през 1987 Sun Microsystems започват да доставят системи със SPARC процесор, директно базиран на системата Berkeley RISC-II.

Комитетът по иновации в изчисленията и комуникациите на САЩ придава заслугите за приемането на РИСК концепцията като възможна въз основа на успеха на SPARC системата. Успехът на SPARC подновява интереса на IBM, които пускат нови РИСК системи до 1990, и до 1995 РИСК процесорите стават начало на индустрия за 15 милиарда долара.

От 2010 новоотворен ISA, RISC-V, се разработва в университета на Калифорния, Бъркли, с изследователски цели и като безплатна алтернатива на частните ISA. От 2014, версия 2 на потребителското ISA е оправена.ISA е проектиран да бъде разтегателен за работа от малки процесори до суперкомпютри.

Архитектури редактиране

Добре известни архитектури са DEC Alpha, AMD 29k, ARC, ARM, Atmel AVR, Blackfin, Intel i860.

Някои процесори са специфично проектирани да имат много малък пакет от инструкции, но тези конструкции са много различни от класическата RISC конструкция и затова на тях са им дадени други имена като MISC, TTA и други.

Въпреки многото успехи, РИСК прави леки навлизания в използването си в настолните компютри и стоковите сървърни пазари, където x86 платформата на Intel остава на челно място сред архитектурите на процесори и има три главни причини за това:

  1. Много голяма база от собственически компютърни приложения са написани за х86 или компилирани в х86 машинен код, а нито една РИСК платформа няма подобна инсталирана база, така хората с настолни компютри остават с х86.
  2. Макар че РИСК успява да повдигне производителността си доста бързо и евтино, Intel взимат предимство от големия си пазар като инвестират голяма сума пари в развиването на процесори. Intel могат да похарчат много пъти над това, което може един РИСК производител, за да подобри дизайна на ниско ниво и производството. Същото не може да бъде казано за малки фирми като Cyrix или NexGen, но те осъзнават, че могат да прилагат поточни дизайн практики за х86, както в 486 и Pentium. 6x86 и MII сериите правят точно това, но в по-напреднал вид. Имплементират суперскаларно спекулативно изпълнение чрез преименуване на регистрите директно на х86-семантично ниво. Други като Nx586 и AMD K5 правят същото, но не директно, а чрез динамично микрокод буфериране и полунезависимо суперскаларно планиране и изпращане на инструкции на микрооперационно ниво. Първият чип използващ такова динамично буфериране и планираща техника е NexGenNx 586, пуснат през 1994; AMD K5 се забавя доста и е пуснат през 1995 г.
  3. По-късни и мощни процесори като Intel P6, AMD K6, AMD K7, и Pentium 4, използват подобно динамично буфериране и планиращи принципи и прилагат свободно скачено суперскаларно изпълнение на поредици от микрооперации, генерирани от няколко паралелни х86 декодиращи етапа. Днес тези идеи сапо-изчистени и все още се използват от модерните х86 процесори като Intel Core 2 и AMDK8.

Извън настолните компютри, обаче, ARM архитектурата (РИСК и създадена по същото време като SPARC) до някаква степен разбива ограничаването на Intel с широко разпространеното си използване при смартфоните, таблетите и много вградени устройства. Pentium Pro (P6)Intel също използва вътрешно РИСК процесорно ядро за процесорите си.

Докато ранните РИСК дизайни се различават много от съвременните CISC дизайни, до 2000 г. най-продуктивните процесори от РИСК типа са почти неразличими от най-продуктивните процесори от CISC типа.

Използване от хардуера редактиране

Основното е използване на инструкционния формат е единична дума с опкод със същата битпозиция. Също така се използва идентичен регистър на процесора за унифициране и по-бързо преработване на броя инструкции. Опростена е и адресната линия и така по-добре се адресират и комплексират сигналите.

Философия на реда от инструкции

Често срещано недоразбиране на фразата „reduced instruction set computer“ e сгрешената идея, че част от инструкциите са просто елиминирани, в резултат на което имаме по-малък ред от инструкции. Всъщност, през годините, реда от инструкции на РИСК-архитектурата порасна като размер, и днес много от тях имат по-голям набор от инструкции отколкото много CISC процесори. Някой RISC процесори например PowerPC имат ред от инструкции голям колкото CISC процесора на IBM IBM System/370; и обратно, DEC PDP-8 – чист CISC процесор, заради това че неговите инструкции изискват многоканален достъп до паметта, има само 8 основни инстукции, и няколко разширени инструкции.

Термина „reduced(намалена)“ в тази фраза е предназначен да опише факта, че количестото работа която всяка отделна инструкция извършва е намалено – при повечето еднократен цикъл за обработка на данни – сравнено със „сложните (съставните) инструкции на CISC процесорите, много от които изискват десетки цикли за обработка на данни за да изпълнят единична инструкция. В частност, RISC процесорите обикновено имат отделни инструкции за I/O и дата обработка.

Някой път се използва и термина load/store архитектура.

Основни концепции за развитие

RISC процесорите използват намален сет от инструкции и има ограничено количество методи за достъп до паметта. Инструкциите и техните параметри са с фиксирана дължина (обикновено 32 бита). Целта е вътрешната архитектура на процесора да е по-проста и 90% от инструкциите да се извличат заедно с параметрите си в един такт. Оптимизацията е оставена на програмиста (или на компилаторите). Кодът е по-голям, но се компенсира от повече памет и по-бързо извличане. Така е възможно извличането на инструкция и параметри да стане за един такт, а изпълнението за друг такт. С добра оптимизация на кода, и този подход, можем да имаме 15 – 40% по-добра ефективност, от стандартния CISC.

Някой представители на тази тенденция са ARM, ISA, MIPS, RISC-V и Adapteva Epiphany, при тях се съдържа съкратен набор инструкции/команди, където всяка инструкция върши едно малко и просто действие. SH5 също следва този модел, макар че е еволюирал в обратна посока, като са добавени по-дълги инструкции за оригинален 16bit кодиране.

Така е възможно извличането на инструкция и параметри да стане за един такт, а изпълнението за друг такт. С добра оптимизация на кода, и този подход, можем да имаме 15 – 40% по-добра ефективност, от стандартния CISC.

Използване от хардуер

Добрата работа с регистрите е от критична важност за повишаване на производителността на процесора. Това усложнява доста боравенето на компилатора с регистрите. Проектирането и подобряването на RISC върви заедно с проектирането на оптимизирани компилатори, които да могат да слагат често използваните променливи в регистрите. Така при RISC архитектурите, операндите по-често се намират в регистровия файл. Поради всичко това, RISC обикновено разполагат с повече регистри, сравнени с CISC.

Други функции, които обикновено се срещат в RISC архитектури са:

  • Командите трябва да се изпълняват за един и същ брой тактове (в идеалния случай за един такт);
  • Идентични регистри с общо предназначение, което позволява всеки регистър, за да бъдат използвани по никакъв контекст;
  • Командите трябва да имат един и същ формат;
  • Прости методи за адресиране;
  • Обръщението към паметта е свързано само с команди от тип LOAD и STORE;
  • Всички аритметични и логически функции се изпълняват на ниво регистър.

Изключения изобилстват, разбира се, в рамките на CISC както и RISC.

RISC типа прилича на бъдещ Harvard memory model, където потока от инструкции и потока от данни са концептуално разделени; това означава, че промяна на паметта, където се изпълнява код не може да има някакъв ефект върху инструкциите изпълнявани от процесора (защото процесора има отделна инструкция и кеш данни), поне докато не се издава специална инструкция за синхронизация. В посока нагоре, това дава възможност на два кеша да бъдат достъпни едновременно, което често може да подобри ефективността.

Някои аспекти, приписвани на първите RISC типове от около 1975 включват наблюденията, че ограниченията на паметта на компилатора за това време често не можели да се възползват от функции, предназначени да улеснят ръченото кодиране, и че на теория неговите инструкции изисквали многоканален достъп до паметта. Твърди се, че тези функции щели да бъдат по-добре, извършвани от поредици от по-прости инструкции, а ако това се получело щяло да се реализира достатъчно място за много регистри, намаляване на достъп до бавна памет. В тези прости дизайни, повечето инструкции са на еднаква дължина и подобна структура, аритметични операции са ограничени до CPU регистри и само отделни инструкции за load (зареждане) и store (съхранение) имат достъп до паметта. Тези свойства позволяват по-добър баланс на етапа разпространение отколкото преди, което прави RISC типа значително по-ефективен и позволява по-високи честоти.

В ранните дни на компютърната индустрия, програмиране било направено в сборен език или машинен код, който насърчавал усилено леснотата на използването на инструкции. Затова CPU дизайнери се опитавали да направят инструкции, които да извършват толкова работа колкото е възможно. С появата на езици от по-високо ниво, компютърни архитекти също започват да създават специални инструкции за пряко прилагане на някои централни механизми на тези езици. Друга обща цел била да се предоставят всички възможни адресация за всяка инструкция, известен като ортогоналност, за да се улесни компилирането.

Отношението към момента било, че хардуерния дизайн бил по-зрял от компилиращия, така че това само по себе си също било причина за изпълнение на част от функционалността на хардуера или микрокода, а не в ограниченията на паметта на компилатора (или нейната генериран код). След появата на RISC, тази философия става със задна дата, известна като циск архитектура, или CISC.

Процесори също има сравнително малко регистри, по няколко причини:

  • Повече регистри предполагат отнемането на повече време за спестяване и възстановяване на съдържанието на регистъра на стека машина.
  • Голям брой регистри изисква голям брой инструкции.
  • Регистрите на процесора са по-скъпи, отколкото външни компоненти на паметта; големи регистърски комплекти са тромави с ограничени платки или чип интеграции.

Според CISC архитектурите, хардуерът (набора от инструкции) трябва да осигури абстрактен слой, лесен за програмиране през асемблер от хора, докато Според RISC архитектурите, хардуерът трябва да предостави само суров интерфейс, с видими характеристики, подходящ за оптимизиращ компилатор. RISC е разработена като алтернатива на това, което сега е известен като CISC. С течение на годините, други стратегии са изпълнени, като алтернатива на RISC и CISC. Някои примери VLIW, MISC, OISC, massive parallel processing, systolic array, reconfigurable computing и dataflow architecture.

Разбира се RISC архитектурата има някои негативни страни, които трябва да се имат предвид. Основните от тях са следните:

Регистровата архитектура открива възможности за намаляване бързодействието на паметта за данни с цената на повишена пропускателна способност на паметта за команди. Това свойство се оказва желателно при използване на кеш-памет за команди, която е по-ефективна от кеш-паметта за данни. Кеш паметта за команди е по-проста за реализация (изисква само четене) и при равни обеми вероятността за попадения в нея е по-висока отколкото в кеш паметта за данни, защото локалността на обръщенията за команди е по-висока отколкото за данните. Така че няма RISC процесор, който да няма поне кеш-памет за команди.

Простотата на използване на команди в компютрите с RISC архитектура осигурява висока скорост на тяхното изпълнение. Повишаването на скоростта на изпълнение на отделните команди, като правило, превъзхожда повишаването на тяхната ефективност, защото за изпълнението даже на прости операции, реализирани с една-единствена CISC команда, са необходими няколко RISC команди. Това означава увеличен размер на паметта за съхраняване на програмата, а оттук и увеличени обръщения към паметта, което в крайна сметка се отразява негати общата производителност.

Източници редактиране