опубликовано в журнале -= Cooler =-

Вступление

Почти двадцать лет назад нынешний CEO Transmeta Дэвид Дайзел (David Ditzel) в сооавторстве с Дэвидом Патерсоном (David Patterson) опубликовали известную статью - 'Необходимость RISC компьютеров' (The Case for a Reduced Instruction Set Computer). В ней они аргументировано обосновали излишнюю сложность традиционных процессоров и показали, что переместив избыточную функциональность из 'кремния' в область ПО, можно добиться повышения производительности при меньшем размере пластины, энергопотреблении и цене.

Сегодня, 20 лет спустя, RISC движение изменило саму архитектуру современных компьютеров. Современные ЦПУ содержат в себе схемы оптимизирующие и меняющие код 'на лету', предсказание ветвлений (branch prediction) и массу других ухищрений, которые призваны выжать максимум производительности из работающих приложений.

Где-то в прошлом году, в компьютерной прессе промелькнули несколько комментариев Дайзела, которые, после сегодняшнего анонса Трансметой нового процессора Крузо (Crusoe), можно рассматривать, как небольшой обзор работы Трансметы за последние пять лет: "Сегодня (в области RISC) у нас есть большие команды разработчиков и длительный циклы разработки", говорил он. "Вопрос о производительность звучит все острее и острее. Никто не смотрит на рамер пластины, т.к. это уже не имеет большого значения. В результате, сегодня мы имеем большое разнообразие сложных RISC процессоров. "Суперскалярность и неупорядоченное (out-of-order) исполнение является большой проблемой, от решения которой напрямую зависит производительность."[snip]"MIPS, R10000 и HP PA-8000 кажутся мне даже более сложными чем современные CISC системы, такие как Pentium II. Таким образом возникает вопрос, в чем же преимущество RISC архитектуры если чипы перестали быть простыми ?"

Как указывает Дайзел, современные ЦПУ являются более сложными, содержат больше 'железа' и выболняют больше задач, чем их более ранние RISC предшественники. Все это приводит к увеличению энергопотребления, что в свою очередь, приводит к разогреву ЦПУ.

Назад к чертежной доске: новые проблемы новые решения.

Конечно, колличество потребляемой энергии и выделяемого при этом тепла, не имеет принципиального значения, если мы говорим о серверах баз данных, графических станциях или домашних игровых системах. В таких случаях единственное, что нас интересует это производительность вычилительной системы. Athlon от AMD является прекрасным примером, того как жервуя транзисторами и электроэнергией, можно утолить потребности в скорости 'голодных' пользователей, да так, что дым из ушей повалит. Где дым там и пламя - на Атлоновском 'камне' можно жарить блины.

Не смотря ни на что, Athlon и его соперник PIII это хорошие решения для определенного курга задач. Определенно, обе команды дизайнеров от AMD и Intel испытывают сходные проблемы, которые возникают при попытке выжать еще больше производительности из устаревшей архитектуры x86. Преобладающей целью является чистая скорость и большинство решений принимается с учетом следующих факторов: совместимость с х86 и максимальная производительность приложений. Оба приведенных фактора являются ключевыми моментами для успешного продвижения x86 ЦПУ, нацеленных на рынок серверов и рабочих станций. А что если, команда разработчиков ЦПУ вернется к чертежной доске и запроектирует процессор 'с нуля', который будет ориентирован на принципиально другой рынок и будет решать другой круг проблем ?

Именно так поступили ребята из Трансметовской команды разработчиков Крузо. Они начали все заново, но на этот раз они спросили себя "не как БЫСТРО мы можем сделать это", а "как более ЭФФЕКТИВНО мы можем это сделать, сохранив совместимость с х86 приложениями?" Таким образом, создатели Крузо руководствовались двумя главными целями, которые повлияли на принимаемые решения при создании процессора: полная совместимость с х86, наименьшее возможное потребление энергии. При всем при этом, приложения должны еще работать с привычной для пользователя скоростью (читай - не тормозить) - это значит, что не стоит ожидать от Крузо новых рекордов по frameset под Q3, равно как не стоит использовать его для рендеринга в 3DSMAX и предсказаний погоды. Изначально он 'заточен' для работы со скромными (и не очень) до вычислиьельных ресурсов задач: офисные приложения, воспроизведение аудио и видео потоков, хождение по интернету, работа с e-mail, etc. Если быть более конкретным, то все это должно происходить в дороге, иными словами, быть мобильным. Создатели Крузо ответили на вопросы, которые они себе задали, такой впечатляющей смесью ПО и железа, что может удивить любого, интересующегося архитектурой ЦПУ и заставляет обратить на себя внимание. В продолжении этой статьи мы рассмотрим более детально технологии, которые легли в основу Крузо: Морфинг Кода (Code Morthing), VLIW ядро, Long Run энергосберегающая технология, и другие. Мы рассмотрим, как эти технологии работают и что они предлагают. В заключении мы попробуем представить, что же будет делать Трансмета со всем этим хозяйством и какие новые продукты, возможно, представит в будущем.

Концепция

Если вы следите за слухами, которые окружают Крузо, то вероятно, вы уже знаете, что его преподносят, как гибридный програмно-аппаратный ЦПУ. Во время презентации выступавшие неоднократно подчеркивали, тот факт, что многие из функций, которые традиционные процессоры х86 выполняют в "железе", новым процессором выполняются на уровне програмного слоя, названный ими Code Morphing Software(ПО Преобразования Кода)

В самом деле, это так, но если не разобраться в этом детально, то можно уйти немного в сторону от правильного понимания вопроса. Так или иначе все сводится к выполнению на аппаратном уровне, но ... Лучше давайте посмотрим на схемку. На следующей картинке представлена типичная блок диаграма 6-го или 7-го поколения х86 ЦПУ. Не стоит рассматривать ее как реальное расположение блоков на кристале, все части рисунка сугобо абстрактны.

На самом деле, современные ЦПУ такие как K6, K7 или PIII исполняют инструкции не совсем так - ЦПУ транслирует команды во внутренее, более компакное, унифицированное RISC-подобное представление. Для выполнения этой операции ЦПУ требуется дополнительный аппаратный блок (большой блок на картинке слева). Нижняя часть (на схеме) практически любого ЦПУ x86, PPC, Alpha, etc состоит из спец схем, которые занимаются предсказанием ветвления, оптимизацией кода и опережающим исполнением. Все это замечательное "железо" требует дополнительного места на пластине процессора и увеличивает энергопотребление. Теперь давайте взглянем на блок-схему Крузо, как она была представлена Трансметой.

Блоки, окрашенные в синий цвет, это "железо", желтые - софт. Аппаратная часть Крузо меньше, потому что все эти трансляции, предсказания ветвления и опережающее исполнение с оптимизацией, вынесены за пределы пластины процессора и выполняются теперь програмно в реальном времени в качестве спец-программы по мере выполнения основных приложений. Однако давно известно, где раздают бесплатный сыр - халявы не будет ! Вынос функций ЦПУ за его пределы не означает, что их не придется исполнять. VLIW ядро (подробности дальше) делает все то же самое, что и К7, но только без специальных схем, выделенных для этого. Это означает, что за отсутствием таких схем, ПО, реализующее эти основные функции, делит вычилительные ресурсы ЦПУ с остальными х86 приложениями, ОС и всем остальным. На следующей картинке показано реальное положение вещей:

Как и на предыдущем рисунке, желтым цветом выделены функции ЦПУ, как : предсказание, ветвлений, переименование регистров, упорядочивание инструкций, etc. Красный цвет это ОС и пользовательские приложения. Все это работает одновременно. Таким образом, как и было сказано раньше, Крузо занимается все тем же : переименовывает регистры, тасует инструкции и транслирует х86 команды во внутренее представление, как и любой другой процессор. Все отличие заключается в отсутствии аппараных блоков для выполнение всего этого. В самом деле, все это выполняется на том же "железе", которе исполняет инструкции, складывает, вычитает, умножает, и.т.д. Как вы уже наверно догадались, перенос всего этого в софт может малость замедлить систему. Тем не менее, Трансмета провела большую работу для сведения этих потерь к минимуму.

Ядро

В данный момент доступно не слишком много информации о ядре Крузо. Так что придестя немного потеоретизировать. Не волнуйтесь, вам будет понятно что известно точно, а что нет. Итак, нам известно что ядро Крузо является реализацией VLIW концепции с исполнением четырех операций за такт. Исполняющее ядро состоит из следующих частей : 1. FPU отвечает за операции с плавающей точкой. Сейчас точно не известно точность вычислений - одинарная или двойная (есть основания пологать, что этовсе-таки двойная) 2. ALU арифметико-логическое устройство. Этот блок выполняет целочисленные операции (сложение, вычитание, умножение, деление). Он же отвечает за логические действия (И, ИЛИ, НЕ, etc.) , побитовый сдвиг и.т.д 3. Блок загрузки/сохранения (Load/Store LSU). На него возложена работа по доступу к памяти. Возможно он так же занимается преобразованием адресов, хотя в тех. документации об это не сказанно. 4. Блок ветвлений (Branch Unit BU). Этот блок отвечает за исполнение инструкции ветвления.
В добавок к этому, в Трансметовских документах сказано, что у Крузо 64 битные целочисленные регистры. Code Morphing частично использует их для хранения текущих инструкций х86, а оставшуюся часть под всякие внутренние дела , типа переименования регистров и.т.д. Этой поверхностной информации вполне достаточно для ответа на некоторые вопросы, однако она порождает новые. В течении следующих недель, по мере поступления новой информации, о некотрых вещах можно будет говорить более определенно, а сейчас можно заняться общими положениями.

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

VLIW vs. суперскалярная архитектура

Перед тем как начать подробно рассматривать Code Morhing более подробно, стоит вспомнить основные отличия между VLIW (Very Long Instruction Word) архитектурой и обычной суперскалярной реализацией.

При традиционной суперскалярной реализации, программист пишет набор последовательных инструкций на языке высокого уровня (кто пишет в опкодах ? поднимите руку. опустите.) и компилирует ее в машинный код. Этот код также является последовательным и блокам ЦПУ, которые занимаются планировкой и оптимизацией приходится перетасовывать инструкции для их параллельного исполнения. Также планировщик занимается проверкой кода на предмет выявления внутренних зависимостей и перестраивает код к моменту реального исполнения. В результате всех этих преобразований, инструкции последовательного кода, который был первоначально загружен в ЦПУ, исполняются параллельно и неупорядоченно (out- of-ordert). Вся эта "кухня" по "причесыванию" кода, добавляет ЦПУ много работы и часто не так уж и эффективно с точки зрения экономии транцисторов или циклов синхронизации.

В случае с "традиционной" VLIW машиной все распаралеливание и оптимизация происходит на уровне ПО. Для большей конкретности, скажем, что в таких VLIW системах, как Интеловском IA-64 этим ПО является компилятор. Именно он занимается всей тонкой работой по созданию оптимизированного VLIW-кода, который будет выполняться подряд с максимальной скоростью. (От себя хочу добавить, что основные простои возникают когда требуется перегрузить конвеер команд внутри ЦПУ. Типичный пример, когда трезультат текущей инструкции вызывает ветвление на команду, которая не сидит ни в cache, ни заранее исполнена и т.д. вот тут-то все и начинает тормозить.-прим. переводчика)

Решение Крузо, однако, отличается как от одного так и другого из преведенных выше подходов


Code Morphing

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

Некоторые люди могут сказать, что они видели все это и прежде. И начнут сравнивать Крузо с Alpha'вской FX!32 (кстати работает только для NT - прим. переводчика) или с SoftWindows. Так вот делать такое сравнение, все равно что сравнивать Тополь-М и пробку из под Шампанского. Поверьте, Code Morphing это Круто !

Как бы там ни было, если вспомнить структурные диаграмы Крузо, то желтые части относятся как раз к прослойке Code Morphing. Прослойка Code Morphing'а написанна на родном VLIW'овском языке Крузо и сидит между ЦПУ и ОС с BIOS. Сама программа Code Morphing'а хранится на специальной ROM и первым делом грузится в систему при включении питания. После загрузки этого слоя, могут быть загружены все остальные програмы включая ОС.

x86 приложение и код ОС поступают в слой Code Morphing, который берет группу инструкций х86 и фрмирует "трансляцию". Трансляция это кусок кода х86, переведенный в родные иструкции VLIW Крузо. Такая трансляция выполняется только один раз, т.к. Крузо сохраняет оттранслированные куски кода в специальном cache. Таким образом, Крузо не требуется транслировать код каждый раз по новой, он просто берет и достает его из cache. Размер этого cache устанавливается во время загрузки и может быть изменен, если это потребуется, во время работы. Уже этого достаточно, чтобы назвать Code Morphing "крутой штучкой". Но и это еще не все! Всего за 30 рублей !... Oops... Code Morphing имеет возможность собирать статистику о частоте исполнения того или иного фрагмента кода и затем производить еще более глубокую оптимизацию часто используемых блоков. Таким образом, программа начинает исполняться бысрее раз от раза. В дополнении ко всему этому, Code Morphing отслеживает частоту исполнения кода в точках ветвления, и производит опережающее исполнение для наиболее вероятной ветви. Если ни одна из ветвей не имеет большего преимущества перед другой, то Крузо исполняет их обе. Сравните это с обычном ЦПУ, где ограничения на размер аппартных буферов с историей, приводит к не столь эффективному исполнению кода с опережением. Поскольку Code Morphing хранит историю исполнения внутри программы, то это приводит к более точному описанию исполняемой программы, что позволяет с наибольшей эффективностью применить методы оптимизации к наибольшему фрагменту кода.

Производительность

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

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

В Крузо поддерживаются две копии х86 регистров. Одна "рабочая" копия и одна "теневая" копия. Обе копии формируются во время загрузки оттранслированного блока кода. Во время выполнения изменяется только рабочая копия. Вслучае возникновения исключения, Крузо загружает теневую копию и запускает код по новой, что бы выявить ошибочную инструкцию. Таким образом теневая копия это своеобразный back-up регистров на случай возникновения исключений. Так же Крузо содержит специальный аппаратный блок для предварительной загрузки. Перед исполнением LOAD перед STORE, которая потенциально может перезаписать загруженные данные, Крузо преобразует инструкцию LOAD в специальную команду "загрузить-и-защитить". Так же STORE преобразуется в "сохранить-под-маской-алиаса". В нежелательной ситуации, когда STORE пытается перезаписать данные, возникает исключение и ошибка корректируется. В результате всего это Крузо может переупорядочивать операции LOAD, а его возможность отслеживать изменения в коде, позволяют отслеживать возникающие ошибки и исправлять их без больших потерь.

Long Run (энергосбережение)

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

Уже было немного сказано о малом размере пластины Крузо и о малом энергопотреблении, теперь пришло время для некоторых конкретных цифр. Самый быстрый в линейке Крузо это 700MHz ЦПУ, выполненный по технологическому процессу 0.18 микрон. Он потребляет 1 Ватт электроэнергии. Сравните это с 34 Ваттами для К7 700MHz 0.18 микрон. Почувствовали разницу ?

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

Эти черты делают Крузо идеальным решением для мобильного рынка. Можно ожидать, что на его основе вскоре появятся многочисленные вебпады, наладонники, лаптопы и прочие мобильные устройства. Таким образом, глядя на физические характеристики, можно сказать, что новый ЦПУ будет работать эффективно. Трансмета предприняла несколько шагов, чтобы быть полностью уверенной в экономичности Крузо. Возможно вы уже знаете, что Интел анонсировал новую технологию энергосбережения для мобильных прцессоров. Она позволит понижать частоту работы ЦПУ до 100MHz, когда он не воткнут в розетку. Крузо развивает эту идею еще дальше. Он самостоятельно решает сколько "лошадиных сил" требуется для выполнения текущей задачи и изменяет свою частоту и напряжение питания на лету. Таким образом, если в данный момент не требуются все 700MHz, а всего лишь 400MHz, то Крузо понизит частоту и напряжение до соответсвующего уровня, без каких-либо видимых изменений для пользователя.

Еще одна хитрость, призванная сохранять энергию, заключается в интеграции DDR и SDRAM контроллеров на одной пластине с ядром ЦПУ. Не смотря на то, что это добавляет транзисторов на пластину, в общем и целом, это приводит к снижению электропотребления. Такая интеграция может быть расширена и на другие устройства: графика, звук и что-нибудь еще, что Трансмета сочтет нужным добавить, для еще большего понижения расходов на свет.

Соперничество

Отстранимся теперь от технических аспектов Крузо и попытаемся взглянуть на общую картину того, что же на самом деле добилась Трансмета и, что можно ожидать от нее в дальнейшем. Прежде всего, нужно отметить, что Code Morphing не ограничен только исполнением х86 инструкций, возможно Alpha или PPC более сответсвуют идеологии ядра Крузо и их реализация позволит достичь большей производительности. Наверняка подобные решения будут доступны в недалеком будущем.

С теоретичесокй точки зрения, опираясь на тот факт, что вся трансляция происходит в ПО Code Morphing, вполне логично предположить появление трансляторов, которые сделают возможным одновременное исполнение приложений, изначально скомпилированных для различных платформ. (Круто! Эдакая VMware для процессоров - прим. переводчика). Однако это только предположение.

Далее, есть мнение, что Трансмета не претендует на сегмент рынка мобильных устройств, который сейчас занят Интелом. Это не правильно. Этот рынок рассматривается как наиболее перспективный с точки зрения роста в ближайшие 10-20 лет. Если вы вышли на него со встраиваемы мобильными решениями, то вы будете соперничать с Интел. Более того, Интел и Трансмета будут напрямую конкурировать на рынке лаптопов, о чем говорит постоянное сравнение Крузо с Pentium во время презентации Трансметы.

Таким образом конкурентная борьба между Трансметой и Интелом очевидна. Что менее очевидно, так это возможная конкуренция Интел в недалеком будущем со стороны AMD,Compaq (Alpha) и Sun на рынке hi-end серверов и рабочих станций. Если обратиться к речи Линуса на COMDEX, то можно узнать, что он рассматривает эту ОС как бесконечно масштабируемой и работающей везде где угодно - от сотовых телефонов то серверов БД (Java sucks ! Linux+C Forether ! - прим. переводчика). Линус говорит, что функциональность будет добавляться в ядро по мере необходимости, в зависимости от платформы.

Это отнюдь не случайность, что Линус работает на Трансмету. Без сомнений они раделяют точку зрения на свою линию продуктов. Несколько выдержек из Трансметовской документации подтверждают это. Читаем на странице 3: "Для первых моделей Трансметы TM3120 и TM5400 ключевыми моментами являются минимальные размеры и энергопотребление. В то время как вынос некоторой функциональной части за пределы аппаратных схем позволил уменьшить число транзистров приблизительно на три четверти и уменьшить размеры пластины и энергопотребления, в будущих продуктах возможна отличная реализация этих функциональных блоков в соответствии с измененными критериями дизайна и производительности"

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

Теперь обратимся к другому фрагменту документации: "В своих первоначальных продуктах Трансмета провела линию между железом и ПО, которое занимается сложными задачами по декодированию х86 инструкций и генерации распараллеленных молекул, которые исполняются на очень простом, высоко скоростном VLIW ядре. Однако цель может быть изменена и линия железо-софт будет направлена на реализацию другого типа продуктов, скажем hi-end ЦПУ для серверов"

Как видно, Code Morthing имеет сильно выраженную модульную структуру. И это позволяет Трансмете реализовывать любую из чатей аппаратно для достижения любого уровня производительности. (Ясное дело, что уже не мобильный рынок. - прим. переводчика). На данный момент Крузо стоит рассматривать как доказательство концепции, а не как результат 5-ти летней работы коллектива Трансметы. Крузо представляет один из полюсов широкого спектра устройств, которые простираются от "сделай-это-на-минимуме-железа" до "зашей-все-это-в-силикон" У Трансметы есть работоспособная технология и, пройдя наиболее сложный путь по выносу 2/3 вентилей в область ПО, этим ребятам будет гораздо легче двигаться в обратном направлении, увеличивая размер аппартной части.

Более того, т.к. между внутренним представлением и кодом приложений находится дополнительная простойка ПО, то Трансмета может свободно усиливать исполнительное ядро или другую любую часть не особо заботясь за обеспечение обратной совместимости. Все, что требуется в такой ситуации это рекомпиляция Code Morphing

В нынешней ситуации доступны два продукта в линейке чипов. Каждый имеет несколько отличное от другого ядро (чип для Windows содержит ряд инструкций для ускорения работы этой программы), но оба они совместимы с х86. (Второй чип "заточен" под Mobil Linux и стоит где-то в два раза дешевле (до 100 долларов) ! - прим.переводчика. Нет ни каких ограничительных факторов, которые могли бы не позволить добавить в эти чипы новые возможности (как насчет SIMD?), что бы помочь увеличить производительность по мере необходимости.

Это всего лишь вопрос времени пока мы не услышим о новой линейке продуктов от Трансметы. Но это уже будет не Крузо, а нацеленные на рынок серверов и рабочих станций х86 ЦПУ, которые будут работать под Linuix и напрямую конкурировать с Интеловским IA-64. Подождем увидим.

Ресурсы о Крузо и Трансмете

Оригинальный текст этой статьи лежит здесь http://arstechnica.com/cpu/1q00/crusoe/crusoe-1.html
Официальный сайт Трансметы 'http://www.transmeta.com'
Действительно очень интересный FAQ по Трансмете и по Крузо в частности http://www.transmeta.com/about/faq.html

Перевел статью Dim Zegebart aka Keks e-mail