Полупроводники // Дэвид Паттерсон

Новый золотой век компьютерной архитектуры

Facebook
Twitter
Google+
Pinterest
Vkontakte
Odnoklassniki
1185 2
Дэвид Паттерсон об эволюции и перспективах компьютерной архитектуры, а также современном развитии открытой архитектуры RISC-V.

Дэвид Паттерсон – пионер и визионер вычислительной техники, почетный профессор компьютерных наук Калифорнийского университета в Беркли, Distinguished инженер Google, заместитель председателя совета директоров RISC-V Foundation.

Дэвид известен своим новаторским вкладом в разработку компьютерной архитектуры с сокращенным набором команд (RISC), он является автором термина «RISC» и возглавлял исследовательский проект Berkeley RISC в 1980-е годы. В 2017 году за эти исследования Дэвид был награждён премией Тьюринга, эту награду ещё иногда называют «компьютерной Нобелевской премией». Помимо этого, Дэвид является обладателем более 35 наград за разные другие научные работы. Например, вместе с Рэнди Кацем он руководил исследованием технологии избыточного массива недорогих дисков (RAID).

В своей лекции, снятой специально для YADRO в его доме в Санта-Круз (Калифорния), Дэвид Паттерсон проведёт обзор развития вычислительной техники начиная с 1960-х годов, обозначит текущие проблемы и определит будущие возможности, прогнозируя новый золотой век компьютерной архитектуры в следующем десятилетии.

Текст написан на основе статьи американских ученых Джона Хеннесси и Дэвида Паттерсона — лауреатов премии Тьюринга 2017 года — о будущем компьютерных архитектур. И это последняя статья цикла о разработке современных микросхем и устройстве полупроводниковой промышленности.

Унификация ISA, изобретение микрокода и становление CISC

1950-е и 1960-е годы ознаменовали эпоху экспериментов с архитектурами микропроцессоров для мэйнфреймов — больших универсальных высокопроизводительных отказоустойчивых серверов. К слову, других типов компьютерной техники в то время практически не проектировалось. Ключевым элементом архитектуры микропроцессоров является ISA (Instruction Set Architecture), архитектура набора команд. Это «словарь», используя который, программное обеспечение взаимодействует с оборудованием.

На этом уровне определяются реализованные в микропроцессоре конкретного типа:

  • архитектура памяти;
  • взаимодействие с внешними устройствами ввода-вывода;
  • режимы адресации;
  • регистры;
  • машинные команды;
  • различные типы внутренних данных (например, с плавающей запятой, целочисленные типы и т. д.);
  • обработчики прерываний и исключительных состояний.

ISA не регламентирует аппаратную реализацию обработки этих инструкций, за счет чего сохраняет достаточную степень независимости от аппаратной архитектуры самих процессоров.

К началу 1960-х у IBM было четыре семейства компьютеров с абсолютно различными и взаимно несовместимыми аппаратными инструкциями, комплектами разработки программного обеспечения, системами ввода-вывода и даже наборами периферийных устройств (ленточные накопители, диски (барабанные накопители) и принтеры). Это были модельные линейки 650701702 и 1401, предназначенные для бизнес-приложений, научных исследований и вычислений в реальном времени.

Аппаратная несовместимость между моделями приводила к тому, что программное обеспечение, разработанное для одного из мэйнфреймов, невозможно было использовать на модели из другого семейства. Аналогичная ситуация была и с  периферийными устройствами. Чтобы решить эту проблему, инженерам IBM впервые пришлось выработать единый набор аппаратных инструкций для всех своих компьютеров, в результате чего на свет появилась ISA System/360.

Таким образом, унифицированная ISA System/360 стала основой для всех аппаратных платформ IBM 1960-х годов, начиная от систем младшего уровня и вплоть до самых больших мэйнфреймов. Важную роль в этой трансформации сыграло архитектурное новшество того времени под названием «микропрограммирование», разработанное Морисом Уилксом в 1951 году. В 1967 году Уилкс был награжден за это исследование премией Тьюринга.

Микропрограммирование позволяет аппаратному обеспечению считывать и исполнять инструкции из ISA. По сути, оно превращает инструкцию ISA в одну или несколько простых логических инструкций, которые затем выполняются за один или несколько машинных тактов. В начале 1960-х, до широкого использования интегральных схем, логическое оборудование — вентили и триггеры — было намного дороже памяти. Поэтому микропрограммирование снижало стоимость системы за счет интенсивного использования памяти для разбиения инструкций ISA на последовательности, которые затем могут быть выполнены на более простом оборудовании.

Примером массового использования микропрограммирования стала система VAX, представленная компанией DEC в 1977 году. ISA системы VAX включала большое количество удобных для программистов режимов адресации и содержала машинные инструкции, которые могли выполнять такие сложные операции, как вставка и удаление элементов в очереди и даже вычисление полиномов. Эти сложные инструкции считались более удобными для программистов, ведь они в основном всё еще писали программы на языке ассемблера, непосредственно связанном с процессорной ISA. Микрокод позволял легко добавлять новые инструкции к ISA — и 99-разрядные микропрограммное управление VAX «раздулось» до 4096 слов. Ориентация на создание постоянно растущего числа инструкций для облегчения работы программистов оказалась реальным конкурентным преимуществом системы VAX. Вероятно, как и сейчас, программисты любили компьютеры, облегчающие их работу. Для многих компьютерных историков VAX 11/780, как и IBM 360, знаменует рождение архитектуры CISC (Complex Instruction Set Computer, компьютер со сложным набором команд).

Компания Intel сделала существенный вклад в развитие CISC-архитектуры со своей серией процессоров i8086/8088. Эти процессоры устанавливались в компьютеры IBM PC и стали абсолютным бестселлером тех времен — по всему миру было продано около 100 миллионов штук. Семейство процессоров породило название х86 — оно образовано от двух цифр, которыми заканчивались названия процессоров Intel ранних моделей — 8086, 80 186, 80 286 (i286), 80 386 (i386), 80 486 (i486). Через какое-то время новые процессоры этого семейства стали получать имена вместо цифровых обозначений. Так появились Pentium и Celeron, но платформа x86 не претерпевала кардинальных изменений до 2000-х годов.

Переход на архитектуру RISC

Переход от CISC к RISC был связан с началом существенных изменений в разработке программного обеспечения в 1980-е годы. Программисты стали переходить с ассемблера на языки высокого уровня для повышения производительности. Результат работы компилятора стал более важным, чем простота ассемблера и многообразие инструкций ISA.

В 1970-е годы Джон Кок, работавший над экспериментальным оптимизирующим компилятором ACS компании IBM, заметил, что, если ограничить компилятор простыми инструкциями, программный код будет работать в три раза быстрее, чем анологичный, но с использованием более сложных инструкций. Причина этого эффекта оказалась довольно проста, учитывая широкое использование микрокода в то время. Сложные инструкции задействовали более сложные микропрограммы, которые, в свою очередь, требовали большего количества тактов процессора для своего исполнения.

Кок руководил компьютерным проектом IBM 801, начавшимся в 1975 году. В проекте велась одновременная разработка оптимизирующего компилятора в сочетании с тесно связанной с ним аппаратной реализацией ISA. Считается, что результатом этого проекта стала первая в мире система с архитектурой RISC. Джон Кок получил премию Тьюринга за эту работу в 1987 году. Через несколько лет архитектура RISC вытеснила большинство процессоров CISC благодаря превосходным результатам, достигнутым с помощью оптимизирующих компиляторов. Архитектура RISC уменьшила размер набора инструкций и оптимизировала наиболее важные из них. Программы стали более эффективными — их стало легче анализировать и легче отлаживать.

В 1984 году Стэнфордский профессор Джон Хеннесси опубликовал в журнале IEEE Transactions on Computers знаковую статью под названием «Процессорная архитектура СБИС», в которой доказал превосходство архитектуры RISC  для реализации процессора на базе сверхбольшой интегральной схемы (СБИС). Паттерсон резюмировал доказательство Хеннесси: RISC по определению быстрее, потому что процессору CISC в среднем требуется в шесть раз больше тактов на инструкцию, чем процессору RISC. Даже если CISC требуется выполнить для аналогичной задачи в два раза меньше инструкций, RISC всё равно в среднем работает втрое быстрее.

Во-первых, инструкции RISC обычно являются такими же простыми, как микрокоманды, и поэтому могут выполняться непосредственно аппаратным обеспечением. Во-вторых, быстрая память, ранее использовавшаяся для интерпретатора микрокода CISC, была перепрофилирована в кеш-память RISC-инструкций. Кеш — это небольшая быстрая память, которая буферизует инструкции и данные для повторного использования. В-третьих, распределители регистров, основанные на схеме раскраски графов Грегори Хайтина, значительно упростили компиляторам эффективное использование регистров. Наконец, закон Мура привел к тому, что в 1980-е годы микросхемы стали содержать достаточно транзисторов, чтобы собрать полный 32-битный канал памяти вместе с кешем инструкций и данных на одном кристалле.

Поиски более эффективных архитектур: VLIW, EPIC, Itanium

В 1990-е годы разработчики процессорных архитектур решили разработать ISA, которая станет намного лучше, чем RISC или CISC. С помощью очень длинных машинных команд (VLIW, very long instruction word) стало возможным упаковать множество параллельных операций в одну огромную машинную инструкцию. Архитектура VLIW заимствует один из принципов работы RISC, возлагая на компилятор еще больше работы по конвертации команд языка высокого уровня в машинные инструкции и последующей их планировке и упаковке в сверхбольшие процессорные инструкции VLIW-архитектуры.

Intel решила, что архитектура VLIW выглядит очень привлекательно, и начала разработку процессора, который стал бы ее флагманом в надвигающейся эпохе 64-битных процессоров. Свою VLIW-архитектуру компания назвала IA-64. Intel разработала собственную номенклатуру и свои названия для привычных терминов: на Intel-жаргоне VLIW превратилась в EPIC (Explicitly Parallel Instruction Computing). Архитектура EPIC не должна была пересекаться с набором инструкций x86 — отчасти для предотвращения копирования со стороны AMD.

Разработчики процессоров PA-RISC из HP тоже решили, что потенциал развития архитектуры RISC почти исчерпан, и также обратились к идее VLIW. В 1994 году HP и Intel объединили усилия для разработки совместной 64-битной архитектуры VLIW/EPIC. Выпуск первого процессора под названием Itanium был намечен на 1998 год.

Вскоре стало ясно, что в разработках процессора и в особенности компилятора для архитектуры VLIW возникли серьезные затруднения. HP и Intel не объявляли о разработках Itanium до 1999 года, а первый рабочий процессор смогли выпустить только в 2001 году. Процессоры семейства Itanium неплохо справлялись с научными вычислениями, но показывали очень слабую производительность на более простых и более распространенных целочисленных задачах. Компания HP вышла из проекта совместной разработки в 2004 году. Intel самостоятельно выпустила еще несколько модификаций процессора, после чего в 2017 году объявила об окончательном завершении работ над IA-64.

Архитектура VLIW не смогла удержаться на рынке процессоров общего назначения по нескольким причинам:

  • непредсказуемые ветвления усложняли планирование и упаковку параллельных операций в командные слова VLIW;
  • непредсказуемые промахи кеш-памяти приводили к переменным задержкам выполнения команд;
  • наборы команд VLIW «раздували» объем машинного кода;
  • создание хороших оптимизирующих компиляторов для архитектуры VLIW оказалось слишком сложной задачей.

Тем не менее процессоры VLIW продолжают использоваться для некоторого узкого класс задач без сложных алгоритмических ветвлений и без большой привязки к кеш-памяти, например для обработки цифровых сигналов.

RISC против CISC в эпоху ПК и пост-ПК

AMD и Intel использовали команды разработчиков из 500 человек и передовые полупроводниковые технологии, чтобы сократить разрыв в производительности между x86 и RISC. Следуя очевидным преимуществам в производительности конвейерной обработки простых и сложных инструкций, в процессорах х86 был реализован декодер инструкций, который на лету переводил сложные инструкции x86 во внутренние RISC-подобные микрокоманды. Затем AMD и Intel организовали конвейерное выполнение микрокоманд RISC. Многие идеи, которые разработчики RISC использовали для повышения производительности, такие как отделение инструкций от кеш-данных, кеш второго уровня на кристалле, глубокие конвейеры, выборка и выполнение нескольких инструкций одновременно, были затем включены в архитектуру x86. AMD и Intel ежегодно поставляли около 350 миллионов микропроцессоров x86 на пике эры ПК в 2011 году. Высокие объемы и низкая рентабельность индустрии ПК также означали более низкие цены на компьютеры x86, чем на компьютеры RISC.

Учитывая сотни миллионов ПК, продаваемых по всему миру каждый год, программное обеспечение для ПК стало гигантским рынком. В то время как поставщики программного обеспечения для рынка UNIX предлагали разные версии программного обеспечения для различных коммерческих RISC-архитектур: Alpha, HP-PA, MIPS, POWER и SPARC, — на рынке ПК использовалась одна ISA, поэтому разработчики для ПК поставляли программное обеспечение, которое было бинарно совместимым только с x86. Гораздо более обширная программная база, адекватная производительность и более низкие цены привели к тому, что x86 в 2000-е годы стала доминировать как на рынке настольных компьютеров, так и на рынке небольших серверов.

Apple помогла запустить эру пост-ПК с iPhone в 2007 году. Вместо того чтобы покупать микропроцессоры, производители смартфонов создавали свои собственные системы на чипе (SoC), используя разработки других компаний, включая процессоры RISC от ARM. Разработчики мобильных устройств ценили площадь кристалла и энергоэффективность не меньше производительности, ставя в невыгодное положение архитектуры CISC. Более того, появление интернета вещей как значительно увеличило количество процессоров, так и стимулировало поиск компромиссов в размере кристалла, мощности, стоимости и производительности. Эта тенденция увеличила важность времени разработки и стоимости, еще больше ставя процессоры CISC в невыгодное положение. В сегодняшнюю эпоху пост-ПК поставки x86 падают почти на 10 % в год с пика в 2011 году, в то время как количество чипов с архитектурой RISC увеличилось до 20 миллиардов. Сегодня 99 % 32-битных и 64-битных процессоров построены на RISC-архитектуре.

Завершая этот исторический обзор, можно отметить, что рынок решил вопрос выбора между RISC и CISC: CISC победил на более поздних этапах эры ПК, но RISC побеждает в эпоху пост-ПК. В течение десятилетий не появилось ни одной  новой архитектуры CISC. Консенсус в отношении лучших принципов ISA для универсальных процессоров сегодня по-прежнему остается за RISC, спустя 35 лет после их появления.

Источник: Джон Хеннесси и Дэвид Паттерсон. Компьютерная архитектура. Количественный подход. 6-e изд., 2018

На графике видно, что микропроцессоры RISC обеспечили почти двадцать лет быстрого прироста производительности — с 1986 по 2004 год. Они эволюционировали по закону Мура (вдвое больше транзисторов на каждом новом витке техпроцесса), который сопровождался прогнозом Роберта Деннарда под названием «масштабирование Деннарда».

В прогнозе говорилось, что по мере увеличения плотности транзисторов потребление мощности на транзистор будет падать, поэтому мощность, потребляемая 1 кв. мм кремния, будет почти постоянной. Поскольку вычислительные возможности миллиметра кремния увеличивались с каждым новым поколением технологий, компьютеры становились более энергоэффективными. Масштабирование Деннарда начало значительно замедляться в 2007 году и почти полностью исчезло к 2012 году — потребление энергии на транзистор перестало уменьшаться вдвое на каждом этапе.

Зависимость нормы технологического процесса от мощности на квадратный нанометр
Источник: Джон Хеннесси и Дэвид Паттерсон. Компьютерная архитектура. Количественный подход. 6-e изд., 2018

В период с 1986 по 2002 год использование параллелизма на уровне команд (ILP) было основным архитектурным методом повышения производительности и наряду с улучшением быстродействия транзисторов приводило к ежегодному увеличению производительности примерно на 50 %. Однако конец масштабирования Деннарда означал, что увеличение ILP приводит к большей неэффективности. Поэтому архитекторам пришлось искать более эффективные способы использования параллелизма. Так родилась эра многоядерных процессоров.

Многоядерный дизайн (Multicore) переложил ответственность за определение и использование параллелизма на программиста и на язык программирования. Однако Multicore не решает проблему энергоэффективных вычислений. Каждое активное ядро сжигает энергию независимо от того, способствует ли оно эффективному вычислению. Таким образом, многоядерные процессоры ограничены мощностью рассеивания тепла (TDP) или средним количеством энергии, которое может удалить корпус и система охлаждения. Ограничение TDP привело к эре «темного кремния», когда процессоры стали замедлять тактовую частоту и отключать неактивные ядра, чтобы предотвратить перегрев. Другой способ взглянуть на этот подход состоит в том, что некоторые микросхемы могут перераспределять свою мощность от незанятых ядер к активным.

Таким образом, неэффективность архитектуры процессоров не позволяет существенно повышать производительность вычислений, и ее рост составляет всего несколько процентов в год. Достижение более высоких темпов улучшения производительности, как это было в 1980-х и 1990-х годах, потребует новых архитектурных подходов, которые гораздо более эффективно использовали бы возможности интегральных схем. Серьезным аргументом для разработки новых архитектурных подходов также является необходимость повышения безопасности процессоров.

DSA, TPU и Open RISC-V

Дэвид Паттерсон считает, что в архитектуре процессоров существуют перспективные области для развития.

Первая из них — специализированные архитектуры (DSA, Domain Specific Architectures), специально разработанные процессоры, которые ускоряют выполнение задач конкретного класса для определенных приложений (глубокие нейросети, распознавание изображений, обработка видео и т. д.) . В своих задачах они способны задействовать больший параллелизм, а также более эффективно использовать полосу пропускания памяти, поскольку размеры обрабатываемых блоков данных могут быть сопоставлены с решаемой задачей.

Хорошим примером развития DSA-архитектуры служит Google TPU (Tensor Processing Unit), ускоряющий выполнение DNN (Deep Neural Network, глубокие нейросети) примерно в 29 раз больше, чем CPU общего назначения, и обладающий энергоэффективностью более чем в 80 раз выше.

DSA требуют приспособления высокоуровневых операций к архитектуре процессора, но это очень сложно сделать на языке общего назначения, таком как Python, Java, C или Fortran. Предметно-ориентированные языки (DSL) помогают в этом и позволяют эффективно программировать DSA. Среди предметно-ориентированных языков — Matlab, язык для работы с матрицами, TensorFlow для программирования нейросетей, Р4 для программирования программно-определяемых сетей и Halide для обработки изображений с указанием преобразований высокого уровня.

Проблема DSL заключается в том, как сохранить достаточную архитектурную независимость, чтобы программное обеспечение на нем можно было портировать на различные архитектуры, и при этом достичь высокой эффективности при сопоставлении программного обеспечения с базовым DSA. Балансировка переносимости между DSA с сохранением эффективности — интересная исследовательская задача для разработчиков языков, компиляторов и самих DSA.

Еще одна перспективная область, по мнению Паттерсона, — создание архитектур ISA с открытым исходным кодом. Для понимания: архитектура x86, как и большинство вычислительных архитектур, имеет закрытый исходный код. Если кто-то хочет настроить чип для определенной цели или проанализировать конструкцию чипа, об этом не может быть и речи. Предыдущие попытки по созданию ISA с открытым исходным кодом, в том числе OpenRISC и OpenSPARC, не увенчались успехом. Перспективной сейчас является процессорная архитектура  RISC-V, которую Паттерсон помогал разрабатывать в Беркли.

В 2015 году был сформирован фонд RISC-V, похожий по концепции на успешный Linux Foundation. В него вошли уже более 100 компаний, и он взял на себя работу по стандартизации RISC-V ISA. Миссия Фонда — способствовать внедрению RISC-V ISA и ее будущему развитию. Цель — предоставить процессоры для чипов стоимостью от нескольких центов до 100 долларов.

RISC-V использует модульный набор команд. Небольшая база инструкций запускает полный стек программного обеспечения с открытым исходным кодом, за которым следуют дополнительные стандартные расширения — их разработчики могут включать или исключать в зависимости от своих потребностей. Эта база включает 32-битный и 64-битный адрес. RISC-V может расти только за счет дополнительных расширений. Базовый программный стек всегда работает корректно, даже если архитекторы не используют новые расширения. Проприетарные архитектуры обычно требуют восходящей двоичной совместимости, а это означает, что, когда производитель процессоров добавляет новую функцию, все будущие процессоры также должны включать ее. Иначе обстоит дело с RISC-V, где все улучшения являются необязательными и могут быть удалены, если они не нужны приложению.

На данный момент самая большая область возможностей для применения новых архитектур и языков — это машинное обучение. Машинное обучение жаждет вычислений, которые возможны с применением DSA и специальных акселераторов. Сегодня ведутся жаркие споры о том, какой тип компьютерной архитектуры лучше всего подходит для машинного обучения, и многие компании делают свои ставки: Google, NVIDIA, Microsoft, Intel и более 45 компаний-разработчиков оборудования предлагают разные архитектуры. Это очень увлекательное время — новая эпоха специализированных вычислителей.

    ПОДПИШИСЬ НА НАШУ ТЕХНО-РАССЫЛКУ
    ПОДПИШИСЬ
    НА НАШУ ТЕХНО-РАССЫЛКУ