Структура процессора TFP
Заключение

В безумной гонке за достижением наивысшей производительности среди RISC-микропроцессоров, гонке, в которой лишь небольшой разрыв в показателях на тестах SPEG отделяет победителя от побежденного, последняя ставка фирмы Mips - процессор TFP (сокращение от Tremendous Floating-Point) - возвращает ее в первую шеренгу лидеров. Когда несколько лет назад компания Mips обсуждала свои ближайшие планы, то основной упор делался на консорциум АСЕ и на возможность осуществления массированного проникновения на рынок настольных систем, связанную с надеждами на ОС Windows NT. Единственным серьезным конкурентом считалась фирма Intel. При этом делалось довольно смелое заявление, что интеловский 486-ой процессор будет последним кристаллом этой фирмы, которому суждено сыграть существенную роль в данной области компьютерного рынка.

Время показало полную несостоятельность этих прогнозов. Windows NT только начинает проникать на рынок настольных систем, а компьютеры на основе Pentium'a быстро заменяют более слабые машины на базе 486-го процессора. Многие полагали, что это поражение должно окончательно выбить Mips из этой области рынка, но все изменилось после того, как компания была приобретена Silicon Graphics Inc. (SGI).

Другие производители RISC-микропроцессоров, особенно корпорация Digital Equipment со своим процессором Alpha и консорциум IBM/Motorola с PowerPC, стремятся расширить свое присутствие на рынке настольных систем, где пока доминируют традиционные персональные компьютеры. Успехи PowerPC связываются прежде всего с его использованем в новых компьютерах Роч erMac фирмы Apple. Что же касается процессора Alpha, то его перспективы на этом рынке определяются тем, насколько широкое распространение получит ОС Windows NT.

Опора на SGI позволила фирме Mips вернуться на привычный для нее рынок высокопроизводительных рабочих станций. Что же касается самой SGI, то она развивается как в этой области рынка, так и на рынке дешевых рабочих станций. Например, ее модели серии Indy сравнимы по стоимости с ПК старшего класса.

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

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

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

Считается, что повышать производительность RISC-процессоров можно двумя способами, между которыми трудно установить четкую границу. В первом случае используется один или несколько слабосвязанных конвейеров для целочисленных и плавающих вычислений (многоконвейерный подход). При этом архитектура кристалла остается простой, что позволяет повышать производительность за счет увеличения тактовой частоты. Компании DEC с процессором Alpha и HP с процессорами семейства Precision Architecture следуют именно этому способу. Такой же подход практиковала и сама компания Mips при разработке своих предыдущих семейств микропроцессоров.

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

Структура процессора TFP

TFP имеет два целочисленных и два плавающих конвейера, которые при адекватном программировании могут работать одновременно. Благодаря этому, при тактовой частоте всего 75 МГц, процессор может достичь пиковой производительности 300 MIPS и 300 MFLOPS. Структурная схема TFP приведена на рисунке 1. Она хорошо отражает достаточно сложную архитектуру данного устройства. Следует обратить внимание на четыре отдельных целочисленных устройства в верхней части схемы и два устройства плавающей арифметики - в нижней части. Именно эти устройства и обеспечивают микропараллелизм, позволяющий TFP достичь столь высокой производительности.

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

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

Стремление минимизировать число обращений к внешней памяти (к данным, не находящимся в кэш-памяти) является одним из основных конструктивных достоинств любой RISC-архитектуры. Для его реализации в TFP используется два уровня кэш-памяти: первый уровень - накристальная кэш-память и второй уровень - внешняя, или, как ее еще называют, вторичная кэш-память, причем максимальный объем вторичного кэша может достигать 16 МБайт. Эффективное управление кэш-памятью имеет огромное значение, поскольку основное ОЗУ как мощных станций, так и дешевых ПК практически ничем не отличается (имеется в виду, что в обоих случаях используются практически одни и те же микросхемы памяти).

Отдельные накристальные кэш-памяти данных и команд имеют размер по 16 КБайт каждый, а буфер опережающей выборки при передачах - TLB (Transition Lookaside Buffer), использующийся для установления ссылок на страницы памяти, содержит 384 значения и способствует минимизации накладных расходов при обращении к виртуальной памяти большого объема.

Интересная особенность в работе кэша состоит в том, что устройства плавающей арифметики обращаются непосредственно по вторичной кэш-памяти. Это обусловлено тем, что при вычислениях с плавающей точкой, как правило, производится загрузка и сохранение больших массивов данных, для которых объем накристальной кэш-памяти данных - 16 КБайт - слишком мал.

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

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

Разрешение конфликтов в расслоенной кэш-памяти

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

Давайте рассмотрим расслоение более подробно. Именно этот пример может хорошо проиллюстрировать, каких узких мест может избежать программист, если будет действовать более аккуратно.

Предположим мы имеем цикл типа того, что приведен ниже:

for (i=0; i++; i

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

При правильной генерации кодов на этапе компиляции этого конфликта можно избежать. Например, известно, что обращения к A(i) и A(i+1) будут происходить к разным банкам кэш-памяти. Однако его эффективность ограничена нехваткой информации о конкретной программе. Проблема усугубляется, когда подпрограмма с внутренним циклом обращается к различным массивам А и В, которые являются формальными параметрами, и поэтому от вызова к вызову их выравнивание по адресам памяти может изменяться. Поскольку компилятор не знает базовых адресов массивов, то он не может отследить ситуацию, когда A(i) и B(i) попадут в один банк.

Для предотвращения таких ситуаций TFP включает в себя специальное устройство задержки адреса. По существу, это одноступенная очередь, использующаяся на этапе формирования адресов при обращении к внешней кэш-памяти. Это устройство располагается непосредственно на выходе целочисленного конвейера и состоит из коммутатора, сортирующего четные и нечетные обращения, и регистра, обеспечивающего задержку адреса. Без устройства задержки адреса за один такт будет выполняться только половина обращений к расслоенной кэш-памяти. При этом конвейер будет простаивать каждый второй такт, а эффективность работы процессора упадет до 50%. Устройство задержки адреса слегка изменяет порядок обращений, так что становится возможным одновременное обращение по четному и нечетному адресу. Например, вторая четная ссылка после прохождения через устройство объединяется в пару с первой нечетной ссылкой из следующего такта, и так далее. Таким образом, задержка адреса решает проблему локальной невыровненности, а компилятор отвечает лишь за глобальную проблему сочетания четных и нечетных адресов.

Предсказание ветвлений

Ветвления для RISC-процессоров является одним из наиболее узких мест. Сначала время, затрачиваемое на переход, никак не использовалось. Именно Mips была одной из первых фирм, кто стал использовать задержанные ветвления, введя понятие слота. Однако в некоторых последних процессорах, например, Power фирмы IBM, слоты задержек отсутствуют, поскольку они сложны в реализации, а если и используются, то, в основном, для обеспечения совместимости с предшествующими моделями.

Назначение логики предсказания ветвлений состоит в правильном выборе направления условного перехода. Для того чтобы обеспечить максимальное быстродействие TFP, необходимо выбирать по 4 команды за каждый такт. Если же неизвестно, по какому пути происходит ветвление в какой-то отдельный момент, то поток команд будет прерван.

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

В TFP используется довольно простая схема, включающая в себя отдельную кэш-память предсказания ветвлений, в которой хранится один бит на 4 команды, свидетельствующий о том, должно произойти ветвление или нет. Используя такой кэш, имеющий достаточно большой объем (1024 слова), TFP способен точно предсказать ветвления, а благодаря своей простой архитектуре, он может делать это настолько быстро, что поток команд при этом не нарушится.

Изменения в наборе команд

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

Во-первых, были добавлены команды одновременного сложения/умножения вещественных чисел, выполняемые на аппаратном уровне. Догадаться об этом можно было, хотя бы исходя из упомянутой выше пиковой производительности в 300 MFLOPS при 75 МГц. Такая производительность достижима в двух плавающих конвейерах только в том случае, если сложение и умножение выполняются одновременно. Реализация этих команд - такая же, как и в архитектуре Power. В частности, промежуточный результат таких команд имеет двойную точность, тем самым обеспечивая эффективное и точное выполнение команд деления и извлечения квадратного корня.

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

В третьих, были добавлены команды условных передач (conditional move), которые заменили некоторые ветвления, представляющие из себя простые последовательности типа "if-then-else", одной командой. Механизм предсказания ветвлений, описанный выше, нарушается там, где несколько переходов располагаются близко друг от друга. И эти новые команды условных передач должны будут, при соответствующей поддержке со стороны компилятора, избавить в большинстве случаев от этих неприятностей.

И наконец, устройство плавающей арифметики не является полностью совместимым с FPU предыдущих процессоров фирмы Mips. Прежде всего, отброшены прерывания по точности вычислений. Процессоры Mips серий R3000 и R4000 использовали отработанную технику препроверки экспонент на предмет раннего выявления команд с плавающей точкой, которые должны вызвать переполнение. По получении предупреждения о таком событии конвейер временно прекращал работу, так что переполнение происходило в точно определенное время. А поскольку такие ситуации возникали редко, то и снижение производительности оказывалось незначительным.

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

Другим "отступлением" по сравнению с предыдущими семействами является исключение поддержки такой опции, как последовательное уменьшение числа значащих битов (gradual Renderflow). Эта особенность, требуемая стандартом IEEE, допускает последовательное снижение точности очень малых величин, позволяет, по мере возможности, избавиться от использования чисто нулевого значения. Метод дополнения до нуля, использовавшийся в устройствах вещественной арифметики до появления стандарта IEEE, дает нулевой результат сразу по потере значащего бита и намного проще в релизации (метод последовательного уменьшения числа значащих битов может потребовать дополнительных стадий обработки помимо конвейера).

Такое изменение, с точки зрения стандарта, является серьезным нарушением. Более того, это не позволяет использовать уже имеющееся программное обеспечение. Но, конечно, решающее слово за рынком: будет ли спрос на такое изделие? Из последних RISC-процессоров одни, как Power фирмы IBM, честно придерживались стандарта IEEE, другие, как, например, i860 фирмы Intel с его нестандартными форматами результатов при выполнении операции деления, принялись "срезать углы". В результате, i860 не удовлетворяет полностью стандарту, но зато имеет высокую производительность. Однако, хорошо это или плохо, именно производительность является главным критерием для большинства людей.

Заключение

Новый суперскалярный 64-разрядный микропроцессор TFP, или, как его еще называют, R8000, разработан MIPS в сотрудничестве с корпорациями Weitek и Toshiba. Высокая сложность устройства вынудила разработчиков разбить процессор на 2 микросхемы: одна из них содержит устройства управления и целочисленной арифметики, а вторая устройства плавающей арифметики. Первая микросхема содержит 2.6 миллиона транзисторов, вторая сравнима с ней по сложности. Обе микросхемы содержат кристаллы размером 17.3 х 12.2 мм, выполненные по технологии HS0.8 с тремя слоями металлизации, разработанной фирмой Toshiba. Кристаллы упакованы в одинаковые керамические корпуса с матричным расположением выводов.

Микропроцессор TFP - кристалл с чрезвычайно высокой производительностью. Среди микропроцессоров, имеющих сравнимую тактовую частоту, он занимает особое место и обладает самой высокой производительностью на многих тестовых программах. Упоминание о "сравнимой тактовой частоте" является существенным. Первые кристаллы TFP, использующиеся в станциях Power Challenge фирмы SGI, имеют относительно невысокую тактовую частоту - 75 МГц. Если появится 500-мегагерцевый процессор Alpha DEC, то, несомненно, он будет работать быстрее. Однако сравнивать реально существующий и гипотетический кристаллы было бы неправильно.

Так или иначе, по утверждениям одного из директоров SGI Петера Ян-Тек Су (Yan-Tek Hsu), производительность нового микропроцессора на вычислениях с плавающей точкой должна быть в 2-3 раза выше, а на вычислениях с фиксированной точкой - примерно такая же, как у процессора R440, работающего на частоте вдвое большей - 150 МГц (показатели R440 на тестах SPEC следующие: SPECfp92 - 97, SPECint92 - 94).