Тема 1 — Въведение в дисциплината
Дисциплината „Компютърни архитектури” се занимава с едно от най-фундаменталните понятия в компютърната наука — как е организиран и как функционира компютърът като цялостна система. Разбирането на архитектурата изисква поглед едновременно нагоре към програмиста и надолу към транзисторите, защото именно на кръстопътя между тези два свята се определя какво може да прави една изчислителна система и колко ефективно го прави.
1. Същност на понятието „Компютърна архитектура”
Понятието „компютърна архитектура” не е получило точно, ясно и еднозначно определение, и това е закономерно — неговото съдържание се е разширявало заедно с развитието на самите компютри. До началото на 70-те години под „архитектура на компютъра” се е разбирало описание на структурата на данните и регистрите, необходими за изясняване на набора команди на процесора и тяхната интерпретация. С други думи, това е онзи минимум от познания, достатъчен за съставяне на програма на асемблерен език.
С разпространението на виртуалната памет и разнообразните средства за вход/изход обаче броят на блоковете, чието познаване е необходимо за писане на ефективни програми, нараства значително. Само командният набор вече не е достатъчен. Поради тази причина се налагат две по-широки определения:
- Структурна организация — компютърът се разглежда като съвкупност от функционални модули и връзките между тях. Това определение добре кореспондира с технологията на свръхголемите интегрални схеми (VLSI), при която всяка схема може да се третира като самостоятелен функционален модул.
- Разпределение на функциите по нива — архитектурата определя точните граници между нивата на организация на компютъра и интерфейсите между тях. При даден избор на „ниво 5” (граница между апаратно и системно програмно осигуряване) се установява кои функции се реализират апаратно и кои — програмно.
Важно е да се подчертае, че компютърната архитектура не се занимава с управлението на данни вътре в процесора на схемотехническо ниво, с конструктивните особености на логическите елементи или с производствените технологии — това са области на организацията и реализацията на процесора.
2. Основни задачи при разработването на компютърна архитектура
Процесът на проектиране на архитектурата е итеративен по природа — отделните му етапи се повтарят многократно до достигане на приемливо решение. Класическите задачи се групират в три направления:
- Представяне на програмата — определяне на формата за представяне на програмата и правилата за нейната интерпретация от компютъра.
- Адресация на данните — установяване на методите за адресация, чрез които програмата указва операндите.
- Формати на данните — определяне на типовете и форматите, в които данните се съхраняват и обработват.
Решаването на тези задачи включва конкретизиране на: минималната необходима памет, кодовете на операциите, форматите на машинните команди, механизмите за защита на паметта и интерфейсите с устройствата за вход/изход.
Съвременните архитекти вече не са само инженери по апаратна или програмна техника. От тях се изисква познания в приложна математика, компютърни мрежи, интерфейси и системи за изчисления. Разработваният компютър трябва да бъде гъвкав в смисъл на архитектура, съвместим с нови технологии и разширяем — а с края на ерата на самостоятелните компютри той трябва и да се включва в стандартна мрежа.

Абстракционните слоеве на компютърната архитектура: ISA действа като интерфейс между софтуера (приложения, ОС) и хардуера (микроархитектура), дефинирайки представяне на програмата, адресация и формати на данните. (Wikimedia Commons)
3. Нива на компютъра (вертикален разрез)
Вертикалният разрез на архитектурата на конвенционален (последователен) компютър разкрива йерархия от нива, всяко от които дефинира точен интерфейс с нивото над и под него.
Фиг. 1-1. Слоеста (йерархична) структура на компютъра — от приложни програми до апаратни средства.
Нивата могат да се опишат в следния ред отгоре надолу:
- Ниво 1 — определя какви функции изпълнява компютърът като цяло спрямо „външния свят” (програмист, оператор). Взаимодействието става чрез езици за програмиране и системни програми.
- Нива 2, 3 и 4 — разграничават подравнища вътре в програмното осигуряване: транслатори (ниво 2), управление на бази данни, виртуална памет и мрежова телеобработка (ниво 3), управление на оперативната и външната памет и вътрешни системни процеси (ниво 4). Обобщено се нариват „архитектура на програмното осигуряване”.
- Ниво 5 — границата между операционната система и апаратното осигуряване (включително микропрограмното). Именно тук се определя какво се реализира апаратно и какво — програмно. Повдигането на това ниво намалява дела на програмното осигуряване за сметка на апаратното, и обратно.
- Ниво 6 — интерфейсът на микропрограмното управление; съгласува потока данни и управляващите сигнали с формата на микрокомандите.
- Ниво 7 — разпределение на функциите между централния процесор и процесорите за вход/изход.
- Ниво 8 — интерфейсът между централния процесор и паметта.
- Нива 9 и 10 — разграничаване на функциите между процесорите за вход/изход и контролерите; „архитектура на физическия вход/изход”.
Нива 6 и 8 заедно се означават като „архитектура на процесора” или „организация на процесора”. Описаният вертикален разрез съответства на класическия фон Ноймански компютър; хоризонталният разрез отразява архитектурата на паралелния компютър, при която функциите се разпределят между група процесори и съответните им интерфейси за взаимодействие.
4. Паралелна обработка в компютърните системи
Паралелната обработка е основен инструмент за повишаване на производителността на компютърните системи. Тя може да се реализира на различни равнища — от едновременното изпълнение на множество независими задачи в многопроцесорна система до паралелното изпълнение на операции в рамките на един процесор чрез конвейерна обработка. Разбирането на тези нива е предпоставка за правилен избор на архитектура при решаването на конкретен клас задачи.
Класическата таксономия на паралелните компютърни системи е предложена от Майкъл Флин в края на 60-те години. Тя разделя системите по броя на потоците от команди и данни:
Фиг. 1-2. SIMD (Single Instruction, Multiple Data) — един поток команди обработва едновременно множество потоци данни, характерно за векторни процесори и графични ускорители.
Четирите класа по Флин са:
- SISD (Single Instruction, Single Data) — класическият последователен компютър на фон Нойман.
- SIMD (Single Instruction, Multiple Data) — една команда се изпълнява едновременно върху множество данни; характерно за векторни процесори и съвременни GPU.
- MISD (Multiple Instruction, Single Data) — множество команди обработват един поток данни; теоретична категория с ограничено практическо приложение.
- MIMD (Multiple Instruction, Multiple Data) — множество процесори изпълняват различни команди върху различни данни едновременно; основата на съвременните многопроцесорни системи.
5. Програмни нива на паралелната обработка
Паралелната обработка не се реализира само на апаратно ниво — програмното осигуряване играе ключова роля за нейното ефективно използване. Съвременните компилатори са способни да разкриват паралелизъм в последователен код и да го трансформират за изпълнение на паралелна архитектура. Важно е да се разграничат нивата:
- Паралелизъм на ниво команди (Instruction-Level Parallelism — ILP) — процесорът изпълнява множество команди едновременно, използвайки конвейер или множество функционални устройства. Това ниво е прозрачно за програмиста при скаларните процесори, но се управлява явно при архитектури като VLIW (Very Long Instruction Word).
- Паралелизъм на ниво нишки (Thread-Level Parallelism — TLP) — различни нишки на изпълнение работят паралелно, или на хипернишкова (SMT) основа в рамките на един процесор, или на ниво отделни процесорни ядра.
- Паралелизъм на ниво задачи — цели задачи или програми работят на различни процесори в многопроцесорна или разпределена система, като координацията между тях се осъществява чрез механизми за комуникация и синхронизация (напр. MPI, PVM).
Изборът на нивото, на което ще се реализира паралелизмът, определя и изискванията към архитектурата, компилатора и операционната система.
Резюме
- Понятието „компютърна архитектура” се е развило от описание на командния набор до пълна структурна организация на функционалните модули и техните интерфейси по нива.
- Проектирането на архитектура решава три основни задачи: представяне на програмата, методи за адресация и формати на данните — при итеративен процес на разработка.
- Вертикалният разрез на компютъра разкрива йерархия от ~10 нива — от приложните програми до апаратните схеми; граничното ниво 5 определя разпределението между апаратно и програмно осигуряване.
- Таксономията на Флин класифицира паралелните системи по потоците команди и данни: SISD, SIMD, MISD и MIMD.
- Паралелизмът съществува на три програмни нива: ниво команди (ILP), ниво нишки (TLP) и ниво задачи — всяко с различни архитектурни и програмни изисквания.