Сметачка архитектура

thumb|310п|Блок дијаграм на основен компјутер со унипроцесорски процесор. Црните линии означуваат проток на податоци, додека црвените линии означуваат контролен проток. Стрелките ја означуваат насоката на проток.
Во електротехниката, компјутерската архитектура е сет од правила и методи коишто ја опишуваат функционалноста, организацијата и имплементацијата на компјутерските системи. Некои дефиниции на компјутерската архитектура кажуваат дека тоа е како опишување на можностите и програмскиот модел на компјутерот но не со конкретна имплементација. Во други описи компјутерската архитектура вклучува дизајн на архитектурата на инструкциски сет, дизајн на микроархитектури, логички дизајн и имплементација.
## Историја

Првата документирана компјутерска архитектура била во кореспонденција помеѓу Charles Babbage и Ada Lovelace, опишувајќи го аналитичкиот мотор. Други два примери биле:
* John von Neumann-овата ‘First Draft of a Report on the EDVAC, која што во 1945 опишува организација на логички елементи
* ‘Proposed Electronic Calculator for the Automatic Computing Engine’ на Alan Turing, исто така напишана во 1945 и воедно цитирала од трудот на John von Neumann.

Терминот ‘архитектура’ во компјутерската литература се сретнува во делата на Lyle R. Johnson, Mohammad Usman Khan и Frederick P. Brooks, Jr., кои во 1959 биле членови на машински-организациониот дел во главниот истражувачки центар на IBM. Johnson ја имал можноста да напише сопствена истражувачка комуникација за Stretch, суперкомпјутер развиен од IBM за научната лабораторија на Los Alamos. За да се опишат нивоата на детали за дискутирање на луксузно разубавениот компјутер, тој напоменал дека неговите описи на формати, инструкциски типови, хардверски параметри и надградби на брзината биле на нивото ‘системска архитектура’ - термин кои изгледал повеќе корисен од ‘машинска организација’.

Последователно, Brooks, дизајнер на Stretch, започнал со второто поглавје на книга (Planning a Computer System: Project Stretch, ed. W.Buchholz, 1962) со пишување,
	
	“Компјутерската архитектура, како и секоја архитектура, е уметност за утврдување на потребите на корисникот на структура и тогаш дизајнирајќи со цел да се задоволат тие потреби нај ефикасно што може со економски и технолошки ограничувања.”

Brooks продолжил со помагање во развивање на IBM System/360 (сега наречен IBM zSeries) линија на компјутери, со кои ‘архитектура’ настанала именка со дефиниција ‘тоа што корисникот треба да го знае'. Подоцна, корисниците на компјутерите започнале да го користат терминот на помалку експлицитни начини.

Првите компјутерски архитектури биле дизајнирани на хартија и директно вградени во финалната хардверска форма. Подоцна, прототипи на компјутерска архитектура биле физички изградени во форма на Transistor-Transistor Logic (TTL) компјутер-како прототипите на 6800 и PA-RISC-тестирани и подсредении, пред да се обврзат на финалната хардверска форма. Од 1990-тите, новите компјутерски архитектури се најчесто ‘изградени’, тестирани и подсредени-во некоја друга компјутерска архитектура во симулатор на компјутерска архитектура; или внатре во FPGA како мек микрообработувач; или и двете-пред да се обврзат на финалната хардверска форма.

## Поткатегории

Дисциплината на компјутерска архитектура се има три главни под-категории:
# Архитектура на инструкциски сет (Instruction Set Architecture), или ISA. ISA го дефинира машинскиот код што провесорот го чита и дејствува врз големината на збор, модовите на мемориските адреси, обработувачкките регистри и податочни формати.
# Микроархитектурата, или компјутерската организација опишува како конкретен обработувач ќе ја имплементира ISA. Големината на обработувачккиот кеш на пример, е организациски проблем кој најчесто нема никаква врска со ISA.
# Системскиот дизајн ги вклучува сите други хардверски компоненти во компјутерски систем. Овие вклучуваат:
## Податочни процеси покрај CPU, како меморија со директен пристап (DMA)
## Други проблеми како виртуелизација, мултиобработка и софтверски функции

Некои компании кои произведуваат архитектури (како Intel и AMD) користат по фини назнаки:

* Макроархитектура: архитектурски слоеви повеќе абстрактни од микроархитектура
* Архитектури на инструкциски сет (ISA): исто како погоре но без:
** Асемблерски ISA: паметен асемблер може да претвора апстрактен асемблерски јазик кој е чест за група машини во малку поинаков машинси јазик за поинакви имплементации.
* Макроархитектура која е видлива за програмерите (Programmer Visible Macroarchitecture): повисокот ниво на јазични алакти како компајлери може да дефинираат доследен интерфејс или договор со програмерите кои ги користат, апстрактни разлики помеѓу основните ISA, UISA и микроархитектури. Пример, C/C++/Java стандардите дефинираат поинакви Макроархитектури. 
* UISA (Сет архитектура со микрокодски инструкции)-фамилија од машини со различни микроархитектури на хардверско ниво може да делат заеднички микрокодни архитектури, од таму: UISA.
* Пински архитектури: Хардверските функционалности што еден микрообработувач може да ги придонесе на хардверска платформа, пример: x86 пинските A20M, FERR/IGNNE или FLUSH. Исто така, пораките кои обработувачот би требало да ги  емитува со цел надворешните кеш-ови да бидат испразнети. Функциите на пинската архитектура се повеќе флексибилни од тие на ISA бидејќи надворешните хардвери можат да адаптираат нови кодирања или да се сменат од пин во порака. Терминот ‘архитектура’ е соодветен бидејќи функциите мора да се обезбедени за компатабилни системи, дури ако деталниот метод се смени.
## Улогите
### Дефиниција
Целта е да се дизајнира компјутер кој го максимизира перформаност додека конзумацијата на моќта ја држи во ред, има ниска цена релативна со количината на очекуваниот перформанс и е многу веродостоен. Од овие причини, треба а се земат предвид многу аспекти кои вклучуваат сет дизајн, функционална организација, логички дизајн и имплементација. Имплементацијата вклучува дизајн на интегрирани кола, пакување, енергија и ладење. Оптимизацијата за дизајнот бара познавање од компајлери, оперативни системи, логички дизајн и пакување.

### Архитектура на инструкциски сет

Архитектурата - инструкциски сет (ISA) е интерфејс помеѓу софтверот на компјутерот и хардверот и исто така може да се гледа како програмерската гледна точка врз машината. Компјутерите не ги разбираат јазиците на високи нивоа што имаат малку, ако воопшто некои, јазични елементи кои се преведуваат директно во машинските домашни операциски кодови. Обработувачот ги разбира само инструкциите кодирани бројчено, најчесто бинарен код. Софтверските алатки, како компајлерите, преведуваат јазици на високо ниво, како C, во инструкции.

Покрај инструкциите, ISA дефинира работи во компјутерот кои се достапни за програми, пример: податочни типови, регистри, адресни модови и меморија. Инструкциите лоцираат операнди со Регистарски индекси (или имиња) и мемориски адресни модови.

ISA-та на еден компјутер е обично опишана во мала книгичка или памфлет, кој опишува како инструкциите се кодирани. Исто така, можно е да дефинира на кратко мненонични имиња за инструкциите. Овие имиња може да се препознаени од софтверска развојна алатка наречена асемблер. Асемблер е компјутерска програма која што преведува форма на ISA која што може човек да ја разбере во форма што може компјутер да ја разбере. Спротивното од асемблер е исто така широко достапно, обично во дебагери, софтверски програми коишто се користат да изолираат и поправат грешки во бинарни компјутерски програми.

Видовите на ISA варираат во квалитет и целосност. Добра ISA прави компромис помеѓу програмерски услужности (повеќе операции може да се подобро), брзина на компјутер (побрзо е подобро) и гоелмина на код (помало е подобро). На пример, ISA со една инструкција е можна, евтина и брза (пример: одземи и скокни ако е нула. Всушност се користи во SSEM), но не е удобно или од корист да се направат програмите помали. Мемориската организација дефинира како инструкциите се однесуваат со меморијата и исто така како различни делови од меморијата се однесуваат меѓусебно.

За време на дизајнирањето емулацискиот софтвер може да извршува програби напишани во предложен инструкциски сет. Модерните емулатори кои тестираат можат да мерат време, конзумација на енергија и големина на компајлиран код со цел да одлучат ако одредена архитектура на инструкциски сет ги задоволува своите цели.

### Компјутерска организација

Компјутерската организација помага да се оптимизираат производите кои се основаат на перформанс. На пример, софтверските инженери треба да ги знаат обработувачките можности на обработувачите. Тие би требало да го оптимизираат софверот со цел да се добием најдобриот перформанс за најниската цена. Ова може да бара прилично детална анализа на компјутерската организација. На пример, во мултимедиски декодер, дизајнерите можеби би требало да наместат поголемиот дел од податоците да биде испроцесиран од најбрзата податочна патека.

Компјутерската организација исто така помага да се планира селекцијата на обработувачот за одреден проект. На мултимедиските проекти би можело да им треба брз пристап на податоци, додека на надзорниот софтвер би можело да му требаат брзи прекинувања. Понекогаш на одредени задачи им се потребни додатни компоненти. На пример: на компјутер кој може да виртуелизира му е потребен хардвер за виртуелна меморија за меморијата од различните симулирани компјутери не се меша. Компјутерската организација и функција исто така има удел во енергетската конзумација и цена на обработувачот.

### Имплементација

Што инструкцискиот сет и микро-архитектурата се опишани, практичната машина мора да биде дизајнирана. Овој дизајнерски процес е нареден Имплементацијата. Имплементацијата вообичаено не се смета како архитектурска дефинициј, туку како инженерство на хардверски дизајн. Имплементацијата може да биде разделена на неколку (не целосно дефинирани) чекори:

( Логичката имплементација ги дизајнира блоковите дефинирани во микро-архитектурата на (примарно) преносното ниво на регистрите и нивотот на логичните порти.
* Импленетација на колото работи дизајни на транзисторско ниво од основни елементи (порти, мултиплексери, жици итн.) исто како и некои поголеми блокови (ALU, кешови итн.) кои би можеле да се имплементираат на ова ни во, или дури (нецелосно) на физичкотк ниво, за перформански причини.
* Физичката имплементација црта физички кола. Различните компоненти на колата се наместени во чипски ‘план на подот’ или на плоча и жиците кои ги поврзуваат се насочени
* Валидацијата на дизајнот го тестира компјутерот како целост со цел да провери дали работи во сите ситуации и времиња. Штом имплементацијата започне, првата валидација на дизајн се симулации кои користит логични емулатори. Но, ова е обично премногу споро за на него да работат реални програми. Така што, после поправање на грешките, прототипи се конструирани со користење на Field-Programmable Gate-Array (FPGA). Многу проекти-хобија престануваат на ова ниво. Последниот чекор е да се тестира прототипните интегрирани кола. Интегираните кола може да бараат неколку редизајни за да се решат проблемите.

За обработувачите, целиот имплементирачки процес е често наречеден Обработувачкки дизајн.

## Дизајнерски цели

Точната форма на компјутерски систем зависи од ограничувањата и целите. Компјутерските архитектури обично разменуваат стандарди, моќ наспроти перформанс, цена, мемориски капацитет, латенција (времето кое што е потребно информацијата да патува до изворот) и проток. Понекогаш други други работи се предвид како, функционалности, големина, тежина, зависност и можност за проширување.

Најчестата шема работи детална анализа на моќта и одредува како да се намали конзумацијата додека одржува соодветен перформанс.

### Перформанс

Модерниот компјутерски перформанс и често опишан преку IPC (instructions per cycle;инструкции во циклус). Ова ја мери ефикасноста на архитектурата при брзината на клок. Бидејќи побрз клок прави побрз компјутер, ова е корисно и широко користено мерење. Историските компјутери имале ниски IPC мерки (0.1). Едноставните модерни обработувачи лесно достигнуваат близу 1. Суперскаларните обработувачи можад да достигнат од 3 до 5 со извршување неколку инструкции во циклус на клокот. Повеќејадрените и векторските обработувачи можат да го помножат пова со дејстување многу на податоците во инструкцијата, коишто имаат повеќе обработувачи како извршуваат паралелно.

Да се бројат инструкциите на машинскиот јазик би било погрешно разбрано бидејќи тие работат варирачки во различни ISA. ‘Инструкцијата’ во стандардните мерки не се брои како реална ISA машинска инструкција туку како историска единица за мерка, обично заснована на брзината на VAX компјутерската архитектура.

Историски, многу луѓе ја мереле компјутерската брзина врз основа на клокот (обично во MHz или GHz). Ова се референцира на циклусите во секунда на главниот клок на обработувачот. Но, оваа метрика е малце погрешно разбрана бидејќи машината со поголема рата на клок не секогаш има подобар перформанс. Како резултат на ова, произведувачите се имаат тргнато од помислата на брзината на клокот како мерка за перформанс.

Други фактори влијаат вр брзината, како мешавината од функционални мерки, брзини на bus, достапна меморија и типот и редот на инструкциите во програмите кои работат.

Во типичек домашен компјутер, наједноставниот, нај доверливиот начин да се забрза перфромансот обично е да се додаде меморија со случаен пристап (RAM). Повеќе RAM ја зголемува можноста дека програмата нема да има потреба од преместување меморија од дискот за да се услужи. Дискот е обично 10.000 пати поспор од RAM-от бидејќи има механички делови кои ги користи за да пристапи на податоците.

Има два главни типа на брзина: латенција и проточност. Латенцијата е времето помеѓу почетокот и крајот на процесот. Проточност е количината на завршена работа за единица време. Латенција на прекинување е гарантираното максимално време за одговор на системот за електронски настан (пример: кода дискот престанува да преместува податоци).

Во перформансот имаат удел широк дел на дизајнерски избори, на пример: pipeline-ирање на процесо обично прави латенцијата да е полоша (поспора) но го прави протокот подобар. Компјутерите кои контролираат мапинерија обично имаат потреба од ниски латенциски прекинувања. Овие компјутери оперираат во околини со реално време и не успеваат доколку операциите не се завршени во специфично време. На пример: компјутерски контролирани кончници мора да почнат со кочење предвидено, кратко време откако педалата е притисната.

Перформансот на компјутер може да биде измерена со помош на други метрики во завист на неговиот апликативен домен. Систем може да биде обработувачкки приврзан (пресметки на бројки), приврзан со I/O (веб-хостирани апликации) или приврзан мемориски (како видео уредување). Конзумацијата на енергија е важно нешто на опслужувачите, лаптопите и мобилните уреди.

Бенчмаркингот пробува да ги земе сите овие фактори во пресметка со мерење на времето што на еден компјутер би му требало да пројде низ серија програми. Додека бенчмаркингот покажува силни страни, не секогаш помага при избор на компјутер. Често измерените машини се делат на различни мерки. Пример: еден систем би можел да се справи со научни апликации брзо, додека некој би можел да рендерира видео игри побрзо. Понатака, дизајнерите може да таргетираат и додадат специјални функционалности на нивните производи, низ хардвер и сфотвер, кои дозволуваат специфичен бенчмарк да се извршува побрзо но да не нудат слични предности на генерални задачи.

### Конзумација на енергија

Конзумацијата на енергија е уште една мерка што е важна за модерните компјутери. Ефикасноста на моќта може често да биде заменета за брзина или пониска цена. Типичната мерка во овој случај е MIPS/W (милиони инструкции во секунда при еден ват).

Модерните кола имаат помалку енергија при транзистор како што бројот на транзистори при чип расте. При тоа, ефикасноста на моќта има пораснато со важност. Неодамнешните обработувачкки дизајни како Haswell на Intel даваат поголем нагласок на зголемување на ефикасноста на енергијата. Исто така, во светот на вградени компјутери, ефикасноста на енергијата одамна е и ќе остане важна цел, веднаш до протокот и латенцијата.

### Промени во барањето на потрошувачите

Зголемувања во јавно-слободните брзини на клокови релативно пораснаа споро во изминатите години со почит до големи скокови во конзумација на енергија и побарувачката на минитуризацијата. Во споредба со експоненционалното растење со истата претходна временска рамка, брзините на обработувачите полека се зголемени помеѓу 3&nbsp;GHz (2006) и 4&nbsp;GHz (2014). Силна побарувачка поттикната од мобилната технологија го смени фокусот на подобрување на обработката со цел да се достигне подолг живот на батеријата и намалување во големината на истата. Значајни намалувања во конзумацијата на енергијата, достигнувајќи 50% презентирани од Intel со нивното пуштање на Haswell микроархитектурата; беа 10-20 вати наспроти 30-40 во претходниот модел. Како плус, севкупниот перформанс се подобрил низ повеќејадрените паралелизирачки операции кои достигнуваат подобро одговорни и ефиксасни протоци со едно јадрени циклуси низ целиот систем. Со делење на работата низ повеќе јадра, архитектите на системите постигнуваат многу повеќе од ‘замислениот перформанс’ без да имаат потреба од 8–10&nbsp;GHz-ни обработувачи.

## Наводи