Архитектура процессора и ее влияние на производительность суперЭВМ

АРХИТЕКТУРА ПРОЦЕССОРА И ЕЕ ВЛИЯНИЕ НА ПРОИЗВОДИТЕЛЬНОСТЬ СУПЕРЭВМ

Н.И. Дикарев, Б.М. Шабанов

Производительность суперЭВМ повышается стремительно, отражаясь в ТОР500 - списке систем наивысшей производительности, установленных в мире, который обновляется каждый год примерно на 60 %. Однако повышение производительности скалярных многопроцессорных суперЭВМ, которые составляют более 95 % списка, происходит в основном за счет совершенствования технологии изготовления используемых в них микропроцессоров. Как следствие, растет их тактовая частота, а повышение степени интеграции позволяет еще и увеличить число процессорных ядер на кристалле. Что же касается архитектуры, то производительность одного скалярного процессора (ядра) достигла 4 команд в такт и дальше практически не растет.

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

Производительность скалярных микропроцессоров

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

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

граммного обеспечения. Однако реализация суперскалярного режима при числе команд, выдаваемых в такт, К>4 наталкивается на труднопреодолимые препятствия. Поскольку каждая 6-7 команда в программах научно-технических задач является командой перехода, то в блоке из К команд, выбираемых из кэша команд за каждый такт, команда перехода с ростом К встречается все чаще, причем следующие за ней команды, прочитанные в тот же такт, зачастую не выполняются. Кроме того, при неверном предсказании направления ветви у команды условного перехода все команды, которые читались из кэша после команды перехода и до момента обнаружения ошибки, приходится аннулировать. В результате число команд, которые действительно должны выполняться в среднем за такт, имеет нелинейную зависимость от числа команд, читаемых из кэша в такт, и с ростом К число выполняемых команд быстро входит в насыщение и даже может начать уменьшаться. В то же время аппаратные затраты в схеме динамической оптимизации с ростом пропускной способности конвейера команд К увеличиваются пропорционально К2, что приводит к росту потребляемой мощности и снижению производительности процессора из-за увеличения времени такта. В результате лишь в одном суперскалярном микропроцессоре IBM Power4, выпущенном в 2002 г., пропускную способность конвейера команд удалось поднять до 5 команд в такт. Причем эта же пропускная способность осталась и в микропроцессоре IBM Power5, выпущенном в 2005 г., что лишь подтверждает труднопреодолимый характер встретившихся препятствий.

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

Схема предсказания для команд условного перехода вводится в состав процессора, с тем чтобы обойти присущий фон-неймановской архитектуре недостаток и попытаться компенсировать около 10 тактов времени, необходимых для продвиже-

ния команды от головы конвейера (счетчика команд) до ступени проверки условия в команде условного перехода. Задача решается тем, что схема предсказания запоминает предысторию выполнения команд перехода в программе и загружает адрес следующей за переходом команды в счетчик команд из предположения, что будет выбрана ветвь, которая чаще всего выполнялась в ближайшем прошлом. При этом вероятность правильного предсказания во многом зависит от алгоритма программы и обрабатываемых ею данных. Так, для циклов с большим числом итераций схема будет почти всегда правильно предсказывать направление перехода, а при сравнении случайных чисел в алгоритме сортировки вероятность неправильного предсказания может приближаться к 50 %. Снижение производительности процессора из-за неверного предсказания перехода может быть весьма значительным.

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

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

перехода, либо аннулируются уже вычисленные у них результаты.

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

Схема динамической оптимизации управляет выполнением команд в большом числе конвейерных исполнительных устройств. Каждое из них может читать операнды и записывать результат каждый такт через независимые порты в регистровом файле большой емкости. При этом физический адрес регистра результата, сопровождающий результат с каждого исполнительного устройства, сравнивается с адресами операндов команд на каждой станции резервирования, обновляя биты готовности тех операндов, адрес которых совпал с адресом результата. На станциях резервирования возникают команды с готовыми операндами, причем число компараторов, осуществляющих сравнение, как и число линий связи, передающих адрес регистра результата, определяется из принципа соединения каждый с каждым, что приводит к квадратичному росту от числа исполнительных устройств. Число исполнительных устройств должно быть пропорционально пропускной способности конвейера команд К, что и определяет рост аппаратных затрат в схеме динамической оптимизации от К как К2. Аналогично увеличиваются аппаратные затраты в регистровом файле и в буфере ROB от числа портов в этих запоминающих устройствах. Таким образом, схема динамической оптимизации представляет собой сложную и нерегулярную схему с большим числом длинных линий связи, что увеличивает время такта в процессоре и его рассеиваемую мощность, так как больше энергии тратится на перезарядку емкостей этих длинных линий при переключении уровня напряжения передаваемых по ним сигналов.

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

как отношение емкости ROB к ширине конвейера команд. Например, у процессора PowerPC 970, на котором построена суперЭВМ МВС-15000, при емкости ROB 100 команд, ширине конвейера 5 команд в такт и времени выполнения арифметических команд с плавающей запятой 6 тактов максимальная задержка выборки данных из памяти, еще не приводящая к остановке конвейера команд, составляет 14 тактов.

Если учесть, что время выборки из L2 кэша в PowerPC 970 равно 13 тактам, то промах в кэш данных уровня L1 и попадание в L2 кэше еще не останавливает конвейер команд, но при появлении промаха в L2 кэш отсутствующую строку приходится подкачивать из оперативной памяти с временем выборки более 100 тактов, что приводит к длительной остановке конвейера команд и существенному снижению производительности процессора. При обработке больших массивов данных промахи при обращении в L2 кэш встречаются достаточно часто, и реальная производительность процессора оказывается существенно ниже его пиковой производительности.

Векторная обработка в микропроцессорах

Поскольку в суперскалярных процессорах практически невозможно поднять пропускную способность конвейера команд, а повышение тактовой частоты ведет к увеличению потребляемой мощности, то все большее распространение получает переход на использование сложных команд. В отличие от простых скалярных команд, когда одна команда выполняет одну операцию, например одну операцию с плавающей запятой (флоп), сложная команда позволяет выполнить сразу несколько операций. Так, в процессорах IBM PowerPC используются сдвоенные арифметические команды с плавающей запятой типа ((A*B)+C). Другой тип сложных команд используется в последних процессорах Intel Woodcrest (серия 51хх семейства Xeon), система команд которого дополнена векторными командами, оперирующими над короткими векторами (по 128 бит), в том числе состоящими из двух 64-разрядных чисел с плавающей запятой. Причем как Woodcrest, так и PowerPC 970 могут выполнять две сложные арифметические команды в такт, и их пиковая производительность составляет 4 флоп в такт.

Сравним микропроцессор Intel Woodcrest с последней версией микропроцессора IBM PowerPC 970 - PowerPC 970МР, поскольку оба микропроцессора являются наиболее высокопроизводительными процессорными кристаллами, содержащими по два процессорных ядра, и наиболее часто используются в вычислительных узлах кластерных суперЭВМ. Каждое ядро в этих процессорных кристаллах представляет собой современный суперскалярный процессор с темпом выдачи команд 4 и 5 команд в такт соответственно.

В процессоре PowerPC 970MP используется такая же максимально сложная схема динамической оптимизации, позволяющая принимать до 5 команд в такт, как и в PowerPC 970. Для повышения тактовой частоты такой сложной схемы приходится использовать разбиение процесса выполнения команды на большее число ступеней, которое в PowerPC 970MP достигает 25. При этом проверка истинного значения направления перехода у команд условного перехода происходит на более дальней ступени от головы конвейера команд, и при неверном предсказании перехода приходится аннулировать большее число команд, что снижает реальную производительность процессора. Соответственно, и при выборе схемы предсказания необходимо применять более сложное аппаратное решение, чтобы снизить вероятность неверного предсказания.

Что же касается реализации процессорного ядра в кристалле Intel Woodcrest, то здесь ширина конвейера команд выбрана не максимально возможной, как в PowerPC 970MP, а более умеренной - 4 команды в такт. Таким образом, учитывая квадратичный рост аппаратных затрат в схеме динамической оптимизации от ширины конвейера команд, объем аппаратных затрат этой схемы в Woodcrest должен составлять 2/3 от аппаратных затрат в PowerPC 970MP. То же самое можно сказать и о схеме регистрового файла для чисел с плавающей запятой. Аппаратные затраты в этой схеме быстро растут от числа портов N, а именно, пропорционально N2, а число портов у рассматриваемого регистрового файла в PowerPC 970MP больше из-за необходимости чтения трех операндов вместо двух для выполнения сдвоенных команд с плавающей запятой. Таким образом, и регистровый файл для чисел с плавающей запятой в PowerPC 970MP оказывается более сложным и менее быстрым, чем в Woodcrest.

В результате упрощения аппаратуры вышеперечисленных схем число ступеней в конвейере команд Woodcrest значительно меньше по сравнению с PowerPC 970MP (14 ступеней вместо 25), частота синхронизации выше (3 ГГц против 2.5), потребляемая мощность меньше (80 Вт против 125). Справедливости ради следует отметить, что более высокая тактовая частота и меньшая потребляемая мощность в Woodcrest отчасти объясняются тем, что кристаллы PowerPC 970MP изготавливаются по технологии 90 нм, а Woodcrest -по технологии 65 нм.

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

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

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

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

вектора с двух 64-хразрядных чисел до четырех или, может быть, даже восьми. Дальнейший рост производительности векторной обработки в микропроцессоре ограничен тем, что все элементы вектора должны находиться в пределах одной строки в кэш, что нужно пропорционально наращивать пропускную способность тракта между кэшем и оперативной памятью и, наконец, производительности скалярной и векторной обработки в процессоре должны быть сбалансированы. А именно, производительность векторной обработки в процессоре нецелесообразно увеличивать более чем в 10 раз по отношению к скалярной производительности, поскольку в этом случае время работы скалярного блока на невекторизуемых участках программы будет доминировать во времени выполнения программы (следствие закона Амдала). Что же касается скалярной производительности, то возможность ее повышения, как было показано выше, в процессоре с фон-неймановской архитектурой ограничена 5 командами в такт.

СВЯЗЬ МОДЕЛЕЙ ПРОГРАММИРОВАНИЯ И АРХИТЕКТУРЫ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ

П.Н. Телегин, Б.М. Шабанов

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

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

Параллелизм по данным

В модели c параллелизмом по данным (называется также параллелизм данных, data parallel) используется «естественный параллелизм», возникающий при обработке по одним и тем же формулам регулярных структур данных, в первую очередь массивов. Так, цикл обработки массивов можно записать одной векторной операцией: A(1:N)=B(1:N) * C(1:N)+D(1:N).

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

Из-за простоты программирования модель получила широкое распространение. Элементы модели параллелизма по данным были введены даже в последовательном языке Фортран-95, в частности, в конструкциях FORALL - для организации параллельных циклов и WHERE - для задания условий при операциях над массивами. В качестве примеров параллельных языков, построенных на основе данной модели, назовем CM FORTRAN, C*, HIGH PERFORMANCE FORTRAN (HPF2).

Модель параллелизма по данным использовалась при создании вычислителей класса SIMD, та-