В информатике и компьютерной инженерии архитектура компьютера — это описание структуры компьютерной системы, состоящей из составных частей. [1] Иногда это может быть описание высокого уровня, которое игнорирует детали реализации. [2] На более детальном уровне описание может включать проектирование архитектуры набора команд , проектирование микроархитектуры , проектирование логики и реализацию . [3]
Первая задокументированная архитектура компьютера была в переписке между Чарльзом Бэббиджем и Адой Лавлейс , описывающей аналитическую машину . При создании компьютера Z1 в 1936 году Конрад Цузе описал в двух патентных заявках на свои будущие проекты, что машинные инструкции могут храниться в том же хранилище, что и данные, т. е. концепция хранимой программы . [4] [5] Два других ранних и важных примера:
Термин «архитектура» в компьютерной литературе можно проследить до работы Лайла Р. Джонсона и Фредерика П. Брукса-младшего , членов отдела организации машин в главном исследовательском центре IBM в 1959 году. У Джонсона была возможность написать фирменную исследовательскую коммуникацию о Stretch , суперкомпьютере , разработанном IBM для Лос-Аламосской национальной лаборатории (в то время известной как Лос-Аламосская научная лаборатория). Чтобы описать уровень детализации для обсуждения роскошно украшенного компьютера, он отметил, что его описание форматов, типов инструкций, параметров оборудования и улучшений скорости было на уровне «системной архитектуры», термина, который казался более полезным, чем «машинная организация». [8]
Впоследствии Брукс, проектировщик Stretch, начал главу 2 книги под названием «Планирование компьютерной системы: проект Stretch» следующим образом: «Компьютерная архитектура, как и любая другая архитектура, — это искусство определения потребностей пользователя структуры и последующего проектирования для максимально эффективного удовлетворения этих потребностей в рамках экономических и технологических ограничений». [9]
Брукс продолжил помогать разрабатывать линейку компьютеров IBM System/360 , в которой «архитектура» стала существительным, определяющим «то, что пользователю нужно знать». [10] За линейкой System/360 последовало несколько совместимых линеек компьютеров, включая текущую линейку IBM Z. Позже пользователи компьютеров стали использовать этот термин во многих менее явных смыслах. [11]
Самые ранние компьютерные архитектуры были разработаны на бумаге, а затем напрямую встроены в окончательную аппаратную форму. [12] Позднее прототипы компьютерной архитектуры были физически построены в форме транзисторно-транзисторной логики (ТТЛ) компьютера — например, прототипы 6800 и PA-RISC — протестированы и доработаны, прежде чем принять окончательную аппаратную форму. Начиная с 1990-х годов новые компьютерные архитектуры обычно «строятся», тестируются и дорабатываются — внутри какой-то другой компьютерной архитектуры в симуляторе компьютерной архитектуры ; или внутри ПЛИС в качестве программного микропроцессора ; или и там, и там — прежде чем принять окончательную аппаратную форму. [13]
Дисциплина компьютерной архитектуры имеет три основные подкатегории: [14]
Существуют и другие технологии в архитектуре компьютеров. Следующие технологии используются в крупных компаниях, таких как Intel, и, по оценкам 2002 года [14], составляют 1% от всей архитектуры компьютеров:
Архитектура компьютера связана с балансировкой производительности, эффективности, стоимости и надежности компьютерной системы. Случай архитектуры набора инструкций можно использовать для иллюстрации баланса этих конкурирующих факторов. Более сложные наборы инструкций позволяют программистам писать более эффективные по пространству программы, поскольку одна инструкция может кодировать некоторую абстракцию более высокого уровня (например, инструкцию цикла x86 ). [16] Однако более длинные и сложные инструкции требуют больше времени для декодирования процессором и могут быть более затратными для эффективной реализации. Повышенная сложность из-за большого набора инструкций также создает больше возможностей для ненадежности, когда инструкции взаимодействуют неожиданным образом.
Реализация включает в себя проектирование интегральных схем , упаковку, питание и охлаждение . Оптимизация проекта требует знакомства с темами от компиляторов и операционных систем до проектирования логики и упаковки. [17]
Архитектура набора инструкций (ISA) — это интерфейс между программным и аппаратным обеспечением компьютера, а также может рассматриваться как взгляд программиста на машину. Компьютеры не понимают высокоуровневые языки программирования , такие как Java , C++ или большинство используемых языков программирования. Процессор понимает только инструкции, закодированные в некотором числовом виде, обычно в виде двоичных чисел . Программные инструменты, такие как компиляторы , преобразуют эти высокоуровневые языки в инструкции, которые процессор может понять.
Помимо инструкций, ISA определяет элементы в компьютере, которые доступны программе, например, типы данных , регистры , режимы адресации и память . Инструкции находят эти доступные элементы с помощью индексов регистров (или имен) и режимов адресации памяти.
ISA компьютера обычно описывается в небольшом руководстве по эксплуатации, в котором описывается, как кодируются инструкции. Кроме того, он может определять короткие (неопределенные) мнемонические имена для инструкций. Имена могут быть распознаны инструментом разработки программного обеспечения, называемым ассемблером . Ассемблер — это компьютерная программа, которая переводит удобочитаемую для человека форму ISA в удобочитаемую для компьютера форму. Дизассемблеры также широко доступны, обычно в отладчиках и программном обеспечении для изоляции и исправления неисправностей в двоичных компьютерных программах.
ISA различаются по качеству и полноте. Хорошая ISA является компромиссом между удобством для программиста (насколько прост код для понимания), размером кода (сколько кода требуется для выполнения определенного действия), стоимостью компьютера для интерпретации инструкций (чем сложнее, тем больше оборудования нужно для декодирования и выполнения инструкций) и скоростью компьютера (чем сложнее декодирующее оборудование, тем больше времени требуется для декодирования). Организация памяти определяет, как инструкции взаимодействуют с памятью, и как память взаимодействует сама с собой.
Во время эмуляции дизайна эмуляторы могут запускать программы, написанные в предлагаемом наборе инструкций. Современные эмуляторы могут измерять размер, стоимость и скорость, чтобы определить, соответствует ли конкретная ISA своим целям.
Организация компьютера помогает оптимизировать продукты , основанные на производительности. Например, инженерам-программистам необходимо знать вычислительную мощность процессоров . Им может потребоваться оптимизировать программное обеспечение, чтобы получить максимальную производительность по минимальной цене. Это может потребовать довольно подробного анализа организации компьютера. Например, в SD-карте разработчикам может потребоваться организовать карту таким образом, чтобы большая часть данных могла быть обработана максимально быстро.
Организация компьютера также помогает спланировать выбор процессора для конкретного проекта. Мультимедийные проекты могут нуждаться в очень быстром доступе к данным, в то время как виртуальным машинам могут потребоваться быстрые прерывания. Иногда для некоторых задач также требуются дополнительные компоненты. Например, компьютеру, способному запускать виртуальную машину, требуется виртуальное оборудование памяти, чтобы память разных виртуальных компьютеров могла храниться раздельно. Организация и функции компьютера также влияют на энергопотребление и стоимость процессора.
После того, как набор инструкций и микроархитектура были разработаны, необходимо разработать практическую машину. Этот процесс проектирования называется реализацией . Реализацию обычно считают не архитектурным проектированием, а скорее проектированием оборудования . Реализацию можно далее разбить на несколько этапов:
Для ЦП весь процесс внедрения организован иначе и часто называется проектированием ЦП .
Точная форма компьютерной системы зависит от ограничений и целей. Архитектуры компьютеров обычно выбирают между стандартами, мощностью и производительностью , стоимостью, объемом памяти, задержкой (задержка — это количество времени, которое требуется для передачи информации от одного узла к источнику) и пропускной способностью. Иногда другие соображения, такие как характеристики, размер, вес, надежность и расширяемость, также являются факторами.
Наиболее распространенная схема предполагает глубокий анализ энергопотребления и определение способа поддержания низкого энергопотребления при сохранении адекватной производительности.
Производительность современных компьютеров часто описывается в инструкциях за цикл (IPC), что измеряет эффективность архитектуры на любой тактовой частоте; более высокая скорость IPC означает, что компьютер работает быстрее. У старых компьютеров IPC составлял всего 0,1, в то время как современные процессоры легко достигают почти 1. Суперскалярные процессоры могут достигать от трех до пяти IPC, выполняя несколько инструкций за такт. [ необходима цитата ]
Подсчет инструкций машинного языка был бы обманчив, поскольку они могут выполнять разный объем работы в разных ISA. «Инструкция» в стандартных измерениях — это не количество инструкций машинного языка ISA, а единица измерения, обычно основанная на скорости архитектуры компьютера VAX .
Многие люди привыкли измерять скорость компьютера по тактовой частоте (обычно в МГц или ГГц). Это относится к циклам в секунду основных часов ЦП . Однако эта метрика несколько вводит в заблуждение, поскольку машина с более высокой тактовой частотой не обязательно может иметь большую производительность. В результате производители отошли от тактовой частоты как меры производительности.
На скорость влияют и другие факторы, такие как сочетание функциональных блоков , скорость шины , доступная память, а также тип и порядок инструкций в программах.
Существует два основных типа скорости: задержка и пропускная способность . Задержка — это время между началом процесса и его завершением. Пропускная способность — это объем работы, выполненной за единицу времени. Задержка прерывания — это гарантированное максимальное время отклика системы на электронное событие (например, когда дисковод заканчивает перемещение некоторых данных).
На производительность влияет очень широкий спектр вариантов проектирования — например, конвейеризация процессора обычно ухудшает задержку, но улучшает пропускную способность. Компьютерам, которые управляют оборудованием, обычно требуются низкие задержки прерываний. Эти компьютеры работают в среде реального времени и выходят из строя, если операция не завершается за указанное время. Например, управляемые компьютером антиблокировочные тормоза должны начинать торможение в течение предсказуемого и ограниченного периода времени после обнаружения педали тормоза, иначе произойдет отказ тормоза.
Бенчмаркинг учитывает все эти факторы, измеряя время, которое компьютеру требуется для выполнения серии тестовых программ. Хотя бенчмаркинг показывает сильные стороны, он не должен быть тем, как вы выбираете компьютер. Часто измеряемые машины разделяются по разным показателям. Например, одна система может быстро обрабатывать научные приложения, в то время как другая может более плавно отображать видеоигры . Кроме того, разработчики могут нацеливаться и добавлять специальные функции в свои продукты с помощью аппаратного или программного обеспечения, которые позволяют быстро выполнять определенный бенчмарк, но не предлагают подобных преимуществ для общих задач.
Энергоэффективность — еще один важный показатель в современных компьютерах. Более высокая энергоэффективность часто может быть обменена на более низкую скорость или более высокую стоимость. Типичное измерение, когда речь идет о потреблении энергии в архитектуре компьютера, — MIPS/W (миллионы инструкций в секунду на ватт).
Современные схемы требуют меньше мощности на транзистор по мере увеличения количества транзисторов на чип. [18] Это связано с тем, что каждый транзистор, помещенный в новый чип, требует собственного источника питания и требует создания новых путей для его питания. Однако количество транзисторов на чип начинает увеличиваться медленнее. Поэтому энергоэффективность становится столь же важной, если не более важной, чем размещение все большего количества транзисторов на одном чипе. Последние разработки процессоров продемонстрировали этот акцент, поскольку они больше фокусируются на энергоэффективности, а не на размещении как можно большего количества транзисторов на одном чипе. [19] В мире встраиваемых компьютеров энергоэффективность уже давно является важной целью наряду с пропускной способностью и задержкой.
За последние несколько лет увеличение тактовой частоты росло медленнее, по сравнению с улучшениями в области снижения энергопотребления. Это было обусловлено окончанием действия закона Мура и спросом на более длительное время работы от батареи и уменьшением размера для мобильных технологий . Это изменение фокуса с более высоких тактовых частот на энергопотребление и миниатюризацию можно продемонстрировать на примере значительного снижения энергопотребления, до 50%, о котором сообщила Intel при выпуске микроархитектуры Haswell ; где они снизили свой эталон энергопотребления с 30–40 Вт до 10–20 Вт. [20] Сравнивая это с увеличением скорости обработки с 3 ГГц до 4 ГГц (с 2002 по 2006 год), можно увидеть, что фокус в исследованиях и разработках смещается с тактовой частоты на потребление меньшего количества энергии и уменьшение занимаемого пространства. [21]
Архитектура описывает внутреннюю организацию компьютера абстрактным образом; то есть она определяет возможности компьютера и его программную модель. У вас могут быть два компьютера, которые были построены разными способами с разными технологиями, но с одинаковой архитектурой.
Эта задача имеет много аспектов, включая проектирование набора инструкций, функциональную организацию, проектирование логики и реализацию.