Архитектура TRIPS

редактировать
TRIPS процессора.

TRIPS было Архитектура микропроцессора , разработанная группой из Техасского университета в Остине совместно с IBM, Intel и Sun Microsystems. TRIPS использует архитектуру набора команд, разработанную t o легко разбиваться на большие группы инструкций (графиков), которые можно запускать на независимых элементах обработки. Дизайн собирает связанные данные в графики, пытаясь избежать дорогостоящих операций чтения и записи данных и сохраняя данные в высокоскоростной памяти рядом с обрабатывающими элементами. Прототип процессора TRIPS содержит 16 таких элементов. TRIPS надеялся достичь 1 TFLOP на одном процессоре, поскольку документы публиковались с 2003 по 2006 год.

Содержание
  • 1 Предпосылки
  • 2 EDGE
  • 3 TRIPS
  • 4 Ссылки
Предпосылки

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

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

Появление все более быстрых микропроцессоров и дешевой, но более медленной динамической ОЗУ кардинально изменило это уравнение. На современных машинах выборка значения из основной памяти может занять тысячи циклов. Одним из ключевых достижений в концепции RISC было включение большего количества регистров процессора, чем в более ранних проектах, обычно несколько десятков, а не два или три. Инструкции, которые ранее предоставлялись в ячейках памяти, были удалены, заменены на те, которые работали только с регистрами. Загрузка этих данных в регистр была явной, необходимо было выполнить отдельное действие загрузки, а результаты явно сохранить обратно. Можно улучшить производительность, исключив как можно больше этих инструкций памяти. Эта методика быстро достигла своих пределов, и с 1990-х годов современные процессоры увеличивают объем кеш-памяти ЦП для увеличения локального хранилища, хотя кэш работает медленнее, чем регистры.

С конца 1990-х годов прирост производительности в основном достигается за счет использования дополнительных «функциональных блоков», которые позволяют некоторым инструкциям выполняться параллельно. Например, две инструкции сложения, работающие с разными данными, могут выполняться одновременно, что фактически удваивает скорость работы программы. Современные процессоры обычно имеют десятки таких единиц, некоторые для целочисленной математики и логической логики, некоторые для математики с плавающей запятой, некоторые для слов с длинными данными и другие для работы с памятью и других домашних дел. Однако большинство программ не работают с независимыми данными, а вместо этого используют выходные данные одного вычисления в качестве входных данных для другого. Это ограничивает набор инструкций, которые могут выполняться параллельно, до некоторого фактора в зависимости от того, сколько инструкций процессор может проверять на лету. К середине 2000-х уровень параллелизма инструкций быстро стабилизировался.

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

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

EDGE

TRIPS - это процессор, основанный на концепции Explicit Data Graph Execution (EDGE). EDGE пытается обойти определенные узкие места производительности, которые стали доминировать в современных системах.

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

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

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

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

TRIPS

Техасский университет в Остине реализует концепцию EDGE - это процессор TRIPS, надежная интеллектуально адаптивная система обработки данных Tera-op. ЦП TRIPS создается путем повторения одной базовой функциональной единицы столько раз, сколько необходимо. Использование в конструкции TRIPS гиперблоков, которые загружаются массово, позволяет добиться значительных успехов в спекулятивном исполнении. В то время как в традиционном дизайне может быть несколько сотен инструкций для изучения на предмет возможного планирования в функциональных блоках, в дизайне TRIPS есть тысячи, сотни инструкций на гиперблок и сотни проверяемых гиперблоков. Это приводит к значительному улучшению использования функциональных единиц; масштабируя свою производительность до типичного суперскалярного проекта из четырех задач, TRIPS может обрабатывать примерно в три раза больше инструкций за цикл.

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

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

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

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

Сочетание этих двух эффектов изменения конструкции значительно улучшает производительность системы. Цель состоит в том, чтобы к 2012 году создать однопроцессорную систему с производительностью 1 терафлопс. Однако по состоянию на 2008 г. графические процессоры от ATI и NVIDIA уже превысили барьер в 1 терафлоп (хотя и на специализированные приложения). Что касается традиционных процессоров, современный (2007 г.) Mac Pro, использующий 2-ядерный Intel Xeon, может выполнять только около 5 гигафлопов в отдельных приложениях.

В 2003 году команда TRIPS приступила к реализации прототипа микросхемы. Каждая микросхема имеет два полных ядра, каждое из которых имеет 16 функциональных блоков, расположенных по четыре ширины и четыре по глубине. В текущей реализации компилятор конструирует «гиперблоки» по 128 инструкций в каждом и позволяет системе одновременно поддерживать восемь блоков «в полете», всего 1024 инструкции на ядро. Базовая конструкция может включать до 32 соединенных между собой микросхем, что приближается к 500 ГФЛОПС.

Ссылки
Последняя правка сделана 2021-06-09 06:19:09
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте