Архитектура ТРИПС - TRIPS architecture

Процессор TRIPS.

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

Задний план

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

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

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

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

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

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

КРАЙ

TRIPS - это процессор, основанный на Явное выполнение графа данных (EDGE) концепция. EDGE пытается обойти определенные узкие места в производительности, которые стали доминировать в современных системах.[2]

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

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

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

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

ПОЕЗДКИ

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

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

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

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

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

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

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

использованная литература