Явное выполнение графа данных - Википедия - Explicit data graph execution

Явное выполнение графа данных, или же КРАЙ, это тип архитектура набора команд (ISA), который призван повысить производительность вычислений по сравнению с обычными процессорами, такими как Intel x86 линия. EDGE объединяет множество отдельных инструкций в большую группу, известную как «гиперблок». Гиперблоки созданы для того, чтобы их можно было легко запускать параллельно.

Параллелизм современных конструкций ЦП обычно начинает выходить на плато примерно на восьми внутренних модулях и от одного до четырех «ядер», конструкции EDGE предназначены для поддержки сотен внутренних модулей и предлагают скорость обработки в сотни раз выше, чем у существующих конструкций. Основное развитие концепции EDGE было проведено Техасский университет в Остине под DARPA Программа Polymorphous Computing Architectures с заявленной целью создания к 2012 году однокристального процессора с производительностью 1 терафлопс, которая еще не была реализована по состоянию на 2018 год.[1]

Традиционный дизайн

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

CISC в RISC

В 1960-е годы объем памяти было относительно дорого, и разработчики ЦП создали наборы инструкций, которые плотно кодировали инструкции и данные, чтобы лучше использовать этот ресурс. Например, добавить A к B, чтобы получить C инструкции будут предоставляться во многих различных формах, которые будут собирать A и B из разных мест; основная память, индексы или регистры. Предоставление этих различных инструкций позволило программисту выбрать инструкцию, которая занимала наименьшее возможное место в памяти, уменьшая потребности программы и оставляя больше места для данных. Набор инструкций, который пытался обеспечить все возможные режимы доступа для каждой возможной инструкции (например, DEC VAX ) был известен как ортогональный, тогда считался образцом дизайна. Этот стиль доступа к памяти с большим разнообразием режимов привел к созданию наборов инструкций с сотнями различных инструкций, стиль, известный сегодня как CISC (Вычисление сложных команд).

К концу 1970-х годов память стала дешевой, но за счет снижения производительности; Конструкции ЦП теперь работали во много раз быстрее, чем память, с которой они говорили. В этом новом режиме ортогональность стала нежелательной. Каждая из этих версий инструкций занимала место в ЦП, но практически ничего не улучшала. спектакль потому что они взаимодействовали с медленной памятью, и в то же время экономия памяти отпала. В этот период RISC (Вычисления с сокращенным набором команд) процветала философия дизайна. Основная цель заключалась в том, чтобы максимально сократить доступ к памяти, используя внутренние высокопроизводительные регистры для большинства инструкций. В качестве побочного эффекта исчезло множество различных режимов для инструкций; может быть только один ДОБАВИТЬ инструкция вместо многих. Удаление этих инструкций упростило декодер инструкций и высвободило значительное пространство в ЦП, которое использовалось для значительного увеличения количества регистров.

Внутренний параллелизм

В 1990-е годы процесс проектирования и изготовления микросхем вырос до такой степени, что стало возможным создать серийный процессор со всеми возможными встроенными функциями. Чтобы повысить производительность, в конструкции ЦП начали добавлять внутренний параллелизм, становясь "суперскалярный ". В любой программе есть инструкции, которые работают с несвязанными данными, поэтому, добавив больше функциональных блоков, эти инструкции можно запускать одновременно. Новая часть ЦП, планировщик, ищет эти независимые инструкции и передает их в блоки, принимая их выходные данные и переупорядочивая их так, чтобы внешне казалось, что они выполняются последовательно.

Величина параллелизма, которую можно извлечь в суперскалярных проектах, ограничена количеством инструкций, которые планировщик может проверить на взаимозависимости. Изучение большего количества инструкций может повысить шанс найти инструкцию, которая может выполняться параллельно, но только за счет увеличения сложности самого планировщика. Несмотря на огромные усилия, конструкции ЦП с использованием классических RISC или CISC ISA вышли на плато примерно с тремя или четырьмя функциональными блоками.[нужна цитата ].

Дополнительную производительность можно добиться от систем, изучив инструкции, чтобы найти те, которые работают на разных типы данных и добавление модулей, предназначенных для такого рода данных; это привело к введению единицы с плавающей запятой а совсем недавно одна инструкция, несколько данных (SIMD) единиц. Недостатком этого подхода является то, что он делает ЦП менее универсальным; загрузка процессора программой, которая использует почти все инструкции с плавающей запятой, например, приведет к остановке FPU, в то время как другие модули будут бездействовать.

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

Новая ISA?

Точно так же, как задержки разговора с памятью при падении цены предполагают радикальное изменение ISA (Instruction Set Architecture) с CISC на RISC, разработчики рассматривают вопрос о том, требуют ли проблемы масштабирования параллелизма и увеличивающихся задержек разговора с регистрами еще одного переключения в базовом ISA.

Среди способов представить новый ISA - очень длинное командное слово (VLIW), типичные Itanium. VLIW перемещает логику планировщика из ЦП в компилятор, где у него гораздо больше памяти и более длительные сроки для проверки потока инструкций. Этот статическое размещение, статическая проблема Модель выполнения работает хорошо, когда известны все задержки, но при наличии задержек кэша заполнение командных слов оказалось сложной задачей для компилятора.[2] Инструкция, которая может занять пять циклов, если данные находятся в кеше, может занять сотни, если это не так, но компилятор не имеет возможности узнать, будут ли эти данные в кеше во время выполнения - это определяется общей загрузкой системы и другими факторами. которые не имеют ничего общего с компилируемой программой.

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

КРАЙ

Теория

Архитектура EDGE - это новый класс ISA, основанный на статическое размещение, динамическая проблема дизайн. Системы EDGE компилировать исходный код в форму, состоящую из статически выделенных гиперблоки содержащих множество индивидуальных инструкций, сотни или тысячи. Эти гиперблоки затем динамически планируются ЦП. Таким образом, EDGE сочетает в себе преимущества концепции VLIW поиска независимых данных во время компиляции с суперскалярной концепцией RISC выполнения инструкций, когда данные для них становятся доступными.

В подавляющем большинстве реальных программ связь данных и инструкций очевидна и явна. Программы разделены на небольшие блоки, называемые подпрограммы, процедуры или методы (в зависимости от эпохи и используемого языка программирования), которые обычно имеют четко определенные точки входа и выхода, через которые данные передаются или исходят. Эта информация теряется, поскольку язык высокого уровня преобразуется в гораздо более простую ISA процессора. Но эта информация настолько полезна, что современные компиляторы обобщили эту концепцию как "базовый блок ", пытаясь идентифицировать их в программах, пока они оптимизируют доступ к памяти через регистры. Блок инструкций не имеет управляющих операторов, но может иметь предиктивные инструкции. В график потока данных кодируется с использованием этих блоков, определяя поток данных от одного блока инструкций к другому или к некоторой области хранения.

Основная идея EDGE заключается в прямой поддержке и работе с этими блоками на уровне ISA. Поскольку базовые блоки получают доступ к памяти четко определенными способами, процессор может загружать связанные блоки и планировать их так, чтобы выходные данные одного блока передавались непосредственно в тот, который будет потреблять его данные. Это устраняет необходимость в глобальном файле регистров и упрощает задачу компилятора по планированию доступа к регистрам для программы в целом - вместо этого каждому базовому блоку предоставляются свои собственные локальные регистры, а компилятор оптимизирует доступ внутри блока, что значительно упрощает задача попроще.

Системы EDGE очень похожи на языки потока данных с 1960-х по 1970-е, и снова в 1990-е. Компьютеры потока данных исполняют программы в соответствии с «правилом запуска потока данных», которое предусматривает, что инструкция может выполняться в любое время после того, как ее операнды становятся доступными. Из-за изоляции данных, подобно EDGE, языки потоков данных по своей сути параллельны, и интерес к ним последовал за более общим интересом к массовому параллелизму как решению общих вычислительных проблем. Исследования, основанные на существующей технологии ЦП в то время, продемонстрировали, что машине с потоком данных будет сложно хранить достаточно данных рядом с ЦП для широкого параллелизма, и именно это узкое место могут решить современные технологии производства, разместив сотни ЦП и их память на одном кристалле.

Еще одна причина того, что системы потока данных так и не стали популярными, заключается в том, что компиляторам той эпохи было трудно работать с общими императивными языками, такими как C ++. Вместо этого в большинстве систем обработки данных использовались специальные языки, например Prograph, что ограничивало их коммерческий интерес. Десятилетие исследований компиляторов устранило многие из этих проблем, и ключевое различие между потоками данных и подходами EDGE заключается в том, что проекты EDGE предназначены для работы с широко используемыми языками.

Процессоры

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

При небольшом увеличении сложности планировщик может проверять несколько блоков, чтобы увидеть, подаются ли выходы одного в качестве входов другого, и размещать эти блоки в модулях, которые сокращают задержки их связи между модулями. Если современный ЦП исследует тысячу инструкций на предмет потенциального параллелизма, такая же сложность в EDGE позволяет ему исследовать тысячу гиперблоков, каждый из которых состоит из сотен инструкций. Это дает планировщику значительно больше возможностей без дополнительных затрат. Именно этот паттерн работы дает название концепции; «граф» - это цепочка блоков, соединенных потоком данных между ними.

Еще одно преимущество концепции EDGE - ее масштабируемость. Низкопроизводительный дизайн может состоять из одноблочного движка с планировщиком-заглушкой, который просто отправляет блоки, когда они вызываются программой. Вместо этого процессор EDGE, предназначенный для настольного использования, будет включать в себя сотни блочных механизмов. Важно отметить, что все, что меняется между этими проектами, - это физическая структура чипа и личная информация, которая известна только планировщику; программа, написанная для моноблочной машины, будет работать без каких-либо изменений в настольной версии, хотя и в тысячи раз быстрее. Масштабирование мощности также значительно улучшено и упрощено; блочные двигатели могут быть включены или выключены по мере необходимости с линейным влиянием на потребляемую мощность.

Возможно, самым большим преимуществом концепции EDGE является то, что она подходит для выполнения любой загрузки данных. В отличие от современных конструкций ЦП, где разные части ЦП предназначены для разных типов данных, ЦП EDGE обычно состоит из одного типа ALU -подобный блок. Пользователь настольного компьютера, запускающий несколько разных программ одновременно, получит столько же параллелизма, сколько научный пользователь, использующий только одну программу с плавающей запятой; в обоих случаях планировщик просто загружал каждый блок, который мог, в модули. На низком уровне производительность отдельных блоковых движков не будет соответствовать, например, производительности выделенного FPU, но будет предпринята попытка подавить любое такое преимущество за счет массивного параллелизма.

Реализации

ПОЕЗДКИ

В Техасский университет в Остине разрабатывал EDGE ISA, известный как ПОЕЗДКИ. Чтобы упростить микроархитектуру процессора, предназначенного для его запуска, TRIPS ISA налагает несколько четко определенных ограничений на каждый гиперблок TRIPS, они:

  • иметь не более 128 инструкций,
  • оформить не более 32 грузов и / или магазинов,
  • выпускать не более 32 операций чтения и / или записи регистрового банка,
  • иметь одно решение ветвления, используемое для обозначения конца блока.

Компилятор TRIPS статически объединяет инструкции в гиперблоки, но также статически компилирует эти блоки для работы на определенных ALU. Это означает, что программы TRIPS в некоторой степени зависят от конкретной реализации, для которой они скомпилированы.

В 2003 году они создали образец прототипа TRIPS с шестнадцатью блочными механизмами в сетке 4 на 4, а также мегабайтом локальной кеш-памяти и памяти для передачи. Однокристальная версия TRIPS, созданная IBM в Канаде, использующей процесс 130 нм, содержит два таких «механизма сетки» вместе с общим кешем 2-го уровня и различными системами поддержки. Четыре таких чипа и гигабайт оперативной памяти помещаются вместе на дочернюю карту для экспериментов.

Команда TRIPS поставила конечную цель - создать однокристальную реализацию, способную работать с устойчивой производительностью 1 терафлопс, что примерно в 50 раз превышает производительность высокопроизводительных стандартных процессоров, доступных в 2008 году (двухъядерный Xeon 5160 обеспечивает примерно 17 GFLOPS).

НАЛИЧНЫЕ

CMU с НАЛИЧНЫЕ это компилятор, который производит промежуточный код называется «Пегас».[3] CASH и TRIPS очень похожи по концепции, но CASH не нацелен на создание вывода для конкретной архитектуры и, следовательно, не имеет жестких ограничений на структуру блока.

WaveScalar

В Вашингтонский университет с WaveScalar архитектура по существу похожа на EDGE, но статически не помещает инструкции в свои «волны». Вместо этого специальные инструкции (фи, и ро) отметьте границы волн и разрешите планирование.[4]

Рекомендации

Примечания

  1. ^ Техасский университет в Остине, «ТАПИС: один триллион вычислений в секунду к 2012 году»
  2. ^ W. Havanki, S. Banerjia, T. Conte. «Планирование Treegion для процессоров с широким выпуском», в Материалы Четвертого Международного симпозиума по высокопроизводительным компьютерным архитектурам, Январь 1998 г., стр. 266–276
  3. ^ «Проект Феникс»
  4. ^ "WaveScalar ISA"

Библиография