Обзоры
Transmeta Crusoe
0

Transmeta Crusoe

Появление первого процессора компании Transmeta связано с тайнами, скандалами и сенсациями (о самом представлении продукта мы не так давно писали). Долгое время все подробности разработки тщательно скрывались, а интерес к ней усердно подогревался. "Невероятные инновации", предложенные не менее "невероятным сочетанием специалистов", стали сюрпризом для компьютерной общественности. В числе непосредственных участников и Дэйв Тэйлор (Dave Taylor), соавтор знаменитой игры Quake, и Линус Торвальдс, родоначальник операционной системы Linux. Что касается скандала, то по информации некоторых источников, он грядет, поскольку Борис Бабаян (из не менее нашумевшего российского проекта Elbrus) якобы недавно высказался в том духе, что Transmeta позаимствовала некоторые интересные идеи у его команды, работающей над процессором E2k. Действительно, основатель компании, а именно Дэйв Дитцел (Dave Ditzel), работал в свое время в Sun и отвечал за связи с московским "Эльбрусом". Transmeta также числится среди компаний, работающих в кооперации с россиянами. В свое время Бабаян написал ряд интересных научных материалов в области оптимизации работы VLIW-процессоров. В частности, им была предложена оригинальная схема обработки исключительных ситуаций, которые являются серьезной проблемой для эмуляторов x86 архитектуры. Но рассмотрим мы ее позднее, в свой черед, а пока…

Первый и основной принцип построения Crusoe — гибкое разделение "труда" между аппаратным и программным обеспечением. Для начала рассмотрим традиционные схемы организации работы процессоров трех основных классов — CISC, RISC и VLIW. В случае CISC набор команд строится исходя из точки зрения разработчика: сложность элементарной инструкции является сбалансированным компромиссом между сложностью понимания ее действия человеком и функциональностью, ее смысловой наполненностью. Программа, написанная на ассемблере CISC-процессора, обладает довольно высокой читаемостью и ясностью алгоритмических конструкций. Увы, параллелизация вычислений как наиболее простой способ повышения эффективности работы ЦП не приемлет подобных высокофункциональных команд. Микропроцессор, как известно, состоит из набора независимых устройств, связанных общей шиной. Чтобы в равной мере загружать работой все его элементарные блоки, требуются простые, одношаговые команды, которые смогут выполняться одновременно — каждая на своем устройстве. Поэтому современные суперскалярные процессоры вынуждены разбивать CISC-инструкции на элементарные действия-команды, а затем пытаться скомпоновать их таким образом, чтобы ни одно устройство не простаивало. Сделать это на ходу, учитывая сложную логику программы, очень трудно, поэтому эффективность подобной схемы невелика. Концепция RISC решает все проблемы в славянском стиле — одним махом. Инструкции максимальным образом приводятся в соответствие с внутрипроцессорными командами-лилипутами. Теперь их значительно легче компоновать для одновременного выполнения, да и в компилятор можно изначально встроить процедуры оптимизации кода. Из рабочего цикла выпадает ставший лишним этап перевода инструкций из "человекообразных" в "машинообразные". Но Боже мой, как неудобны эти элементарные команды, как их много и сколько памяти они занимают! Да и RISC-процессоры, которые были столь аскетичны в самом начале своей карьеры, сегодня умудрились поднабрать "жирка", обрастая сложными механизмами предсказания ветвлений, оптимизации и т. д. и т. п. На это уходят мегагерцы и ватты. Отлично! — воскликнул инженер. — Вам по-прежнему с трудом удается "сосватать" инструкции таким образом, чтобы получались гармоничные "семейства", — вот готовое решение. И предложил методику сверхдлинных команд (VLIW — Very Long Instruction Word). Согласно этой схеме компилятор изначально группирует процессорные команды в пакеты, каждый из которых может быть выполнен за один такт. Чрезвычайно удобная схема, но как и RISC не совместима с x86 архитектурой. Увы — это равнозначно смерти для дебютанта на рынке персональных компьютеров. Единственный, кто может себе позволить сделать подобное, — Intel, и она уже, как гигантский крокодил, поджидающий всякого, кто вознамерится пересечь реку, выбрала удобный момент для "нападения" на пользователя: переход на 64-разрядную архитектуру. Все равно для эффективного ее использования придется перекомпилировать программное обеспечение, так почему бы не сделать сразу два дела. IA-64 является VLIW-ориентированной платформой.

Crusoe также основан на принципе сверхдлиных инструкций, однако благодаря гибкости технологии CodeMorphing специалистам Transmeta удалось добиться совместимости с набором команд x86. Оригинальная структура процессора определяет алгоритм его работы. Аппаратное 128-разрядное ядро существенно проще и компактнее типичных решений Intel. Сравнить размеры кристаллов микросхем серии TM и мобильных чипов Pentium, можно обратившись к таблице.

Фактически, помимо кэша, ядро содержит только одно устройство обработки чисел с плавающей точкой (FPU), два — целочисленных АЛУ (арифметико-логическое устройство), блок управления памятью (Load-Store Unit), блок предсказания ветвлений, обслуживающий выполнение команд условного перехода (Branch Unit), 64 целочисленных регистра, именуемых r0 — r63, и 32 регистра для чисел с плавающей точкой. Под стать и набор команд: VLIW-инструкция длиной 128 или 64 разряда, называемая "молекулой", может состоять из двух или четырех "атомов" по 32 разряда — элементарных команд. Максимальное количество "атомов" диктуется количеством независимых устройств процессора: FPU, ALU, Load-Store Unit, Branch Unit. Естественно, все "атомы" в "молекуле" должны быть адресованы различным устройствам. Следовательно, даже полностью укомплектованная "молекула" исполняется за один такт. Однако процессор с параллельными конвейерами, основанный на спекулятивном выполнении инструкций x86, не может работать без блоков предсказания ветвлений, переупорядочивания команд, переименования регистров. Все эти функции, впрочем, как и трансляция чуждого Crusoe набора команд, возлагаются на специальное программное обеспечение, записанное в микросхемах ROM, — CodeMorphing software. Этот своеобразный эмулятор полноценного процессора загружается сразу после включения питания, предваряя инициализацию BIOS и операционной системы. Для повышения быстродействия ПО эмуляции сразу копируется из ППЗУ в ОЗУ. CodeMorphing играет ту же роль, которая возлагается на интерпретатор языка Java: на лету преобразовывая поступающие извне инструкции CISC во внутренние VLIW-"молекулы". Таким образом, образуется двухуровневая система, подобная концепции микроядра: операционная система и BIOS функционируют, даже не подозревая о существовании внутреннего изолирующего программного слоя. Можно возразить, что подобной схемы придерживаются все современные разработчики процессоров: применяют для "внутреннего использования" исключительно RISC-подобные микрокоманды, организуя трансляцию в рамках аппаратного ядра. При этом схемы разрастаются до миллиардов транзисторов, а потребляемая мощность исчисляется десятками ватт. Crusoe полностью свободен от этих недостатков. Для примера, его создатели приводят диаграммы температуры, по которым ясно видно: при воспроизведении видео MPEG-2 Pentium III разогревается до 105 °С, а Crusoe делает то же самое, но при нагреве лишь до 48 °С.

Диаграммы нагрева мобильного процессора Pentium III и Transmeta Crusoe

 

Однако мы по своему опыту знаем — программные интерпретаторы не могут обеспечить необходимый уровень производительности по сравнению с аппаратными. Яркий тому пример — эмулятор PC для Mac, который не прижился и был успешно вытеснен процессорными платами расширения. Как для Java появились компиляторы-по-требованию, так и специалисты Transmeta пришли к этой идее. ПО CodeMorphing, помимо собственно интерпретации кода, занимается еще и его постепенной оптимизацией. Благодаря тому что внешнее размещение механизмов распараллеливания вычислений относительно процессорного ядра позволяет снять ограничения по использованию памяти, транслятор может накапливать весь необходимый ему набор данных, запоминать историю выполнения, выявляя наиболее вероятные пути ветвления и наиболее часто встречающиеся алгоритмические конструкции. При первом проходе оптимизации фактически не происходит, CodeMorphing просто старается наиболее качественным образом упаковать "молекулы", мало отличаясь при этом от стандартных микропрограммных решений, зашитых в тот же Pentium III. Но с каждой следующей итерацией и накоплением "опыта" система пытается улучшить код. При этом используются широкие возможности программной интерпретации, большое количество внутренних регистров и гибкий механизм их переименования. ПО запоминает единожды оттранслированные команды и последовательности команд, а затем, встретив аналогичную конструкцию снова, просто использует заготовленный оптимизированный шаблон. Таким образом, наиболее часто выполняющиеся участки программы подвергнутся наиболее тщательной обработке, в то время как малоиспользуемый код останется вне поля зрения эмулятора. Подобный подход дает определенные преимущества перед традиционными компиляторами, вынужденными постоянно разрешать дилемму распределения ограниченного времени трансляции между различными участками кода. Однако разработчики Transmeta пошли еще дальше: они ввели операции Load-and-protect и Store-under-alias-mask. Это означает, что загружая в регистры данные из памяти или выполняя обратную процедуру сохранения, процессор запоминает не только данные, но адрес и количество ячеек памяти, вовлеченных в операцию. Очень часто при распараллеливании кода встречается ситуация, когда крайне выгодно было бы поменять местами операции чтения и записи. Но что произойдет, если вдруг проявится их зависимость и программа попытается считать ту ячейку памяти, которая уже была перезаписана инструкцией, выполненной гораздо раньше срока (спекулятивное выполнение), или наоборот? Тем не менее самонадеянный Crusoe ловко избегает неминуемой катастрофы с помощью очереди команд загрузить/записать и защитить. Как только он устанавливает, к примеру, команду чтения впереди команды записи, обычная инструкция Load заменяется на Load-and-protect. Сверяя затем адреса всех записываемых ячеек памяти с запомненными, процессор легко выявит опасное наложение и сразу же сгенерирует ошибку. Управление перейдет к обработчику ошибок, который каким-либо способом исправит ситуацию. Однако ошибки или, говоря иначе, исключения (exeptions), являются опасным подводным камнем для любого, кто попытается смело перепаковывать команды x86. Когда вдруг возникает ошибка, например "сбой страницы памяти" (page fault), то процессору-"капитану" необходимо точно узнать, где именно пробита обшивка корабля, прежде чем остановить машины и начать откачивать воду. Но что поделать, если схема судна не соответствует реальному расположению команд-отсеков и вода свободно заливает весь трюм — программа уже рекомпилирована и разделить ее на отдельные инструкции в первоначальном порядке задача непростая. Однако хитроумный Crusoe всегда держит наготове так называемую теневую копию (shadow copy) своих рабочих регистров, которая создается в момент начала трансляции. Для программы, написанной под Intel-архитектуру, как раз эта теневая копия выступает "хамелеоном"-заменителем стандартных x86-регистров, а все прочие регистры микропроцессора ей просто недоступны. Как только возникает ошибка, теневая копия записывается в рабочие регистры, и работа начинается сначала, но на этот раз в пошаговом режиме отладки. Если трансляция завершилась без эксцессов — теневая копия обновляется текущим содержимым рабочих регистров. Процедуры обновления и восстановления организованы наиболее оптимально с помощью специальных скоростных шин. Описанный выше метод позволяет также избавляться от некоторых повторяющихся операций загрузки из памяти, возникающих вследствие невозможности предсказать вероятность изменения содержимого определенной ячейки в промежутках между чтениями.

Сравнение структурных схем классической архитектуры процессоров x86 и Crusoe

 

Теперь следует вспомнить слова Бориса Бабаяна и его вариант решения проблемы. В ходе спекулятивного выполнения нескольких ветвей программы, чтобы определить критичность ошибки, российский ученый предлагает к результату операции, приведшей к исключительной ситуации, прибавлять маркерный бит. Этот бит, как при игре в "салочки", переходит к значениям, полученным с использованием "осаленных" данных. Закончив выполнение группы команд и сведя все ветви к общему результату, процессор проверяет его на наличие злополучного бита. И только тогда решает — делать откат или нет. Как выносит свой вердикт господин Crusoe, доподлинно еще никому не известно, так что оставим этот спор Дитцу и Бабаяну.

Выгода от использования CodeMorphing очевидна. Даже полное изменение идеологии конструкции процессора не влечет за собой полной перекомпиляции всех прикладных программ и операционных систем. Необходим только соответствующий эмулятор. Возникает новое понятие — апгрейд компьютера через Internet. Вы загружаете обновленную версию CodeMorphing и записываете ее в ППЗУ своего ПК — все! Более того, исчезают различия между ПО, предназначенным для различных платформ. Вам безразлично, какая это версия программы — Mac, PC или Sun, главное, чтобы был соответствующий вариант CodeMorphing. Возможно, уже в ближайшем будущем поклонники соперничающих ОС и программного обеспечения смогут сравнить как удобство, так и производительность своих любимцев на единой тестовой платформе. Но инженеры Transmeta предостерегают от поспешных выводов о результатах тестирования с помощью традиционных синтетических пакетов. Такие программы измеряют среднюю производительность процессора, предлагая ему обработать как можно более широкий спектр инструкций. Это автоматически сводит на нет любые попытки оптимизировать подобный код. В обычных, а тем более типичных офисных приложениях, на которые ориентирован Crusoe, такая ситуация практически никогда не встречается. Следовательно, для правильного определения быстродействия процессоров Transmeta необходимы тесты, базирующиеся на реальных приложениях.

Функциональная схема процессоров Transmeta

Тут следует заметить, что прежде всего Crusoe ориентирован на использование в мобильных компьютерах. Конечно, высокая производительность, присущая традиционным процессорам, недостижима при разделении функций между аппаратным и программным компонентами. Но в мире мобильных устройств больше ценится малое энергопотребление, нежели исключительное быстродействие. И тут у Transmeta есть свои секреты — технология LongRun. Как известно, в последнее время производители быстрых и "прожорливых" процессоров обращаются к методике изменения тактовой частоты. Когда устройство работает от стационарной сети электроснабжения, такой процессор функционирует на самой высокой своей частоте, но когда ему предлагают "сухой паек" питания от батарей — он понижает свою частоту. Возможно, именно этим объясняется столь высоко поднятая планка производительности (600 MHz) для мобильных ПК в спецификациях PC 2001. LongRun предписывает процессору не только динамически изменять частоту в зависимости от потребностей выполняемого приложения (!), но и одновременно регулировать напряжение питания (меньше частота — меньше напряжение). Таким образом, потребление энергии относительно частоты изменяется в кубе. Crusoe, снижая частоту на 10%, добивается 30%-ной экономии электроэнергии. Просто, но эффективно. Диапазон рабочих частот лежит между 700 и 200 MHz, а напряжение варьируется в пределах от 1,65 В до 1,1 В. А если учесть, что 700-мегагерцевый вариант процессора в нормальном режиме работы потребляет только 1 Вт, то это просто фантастика!

И наконец, самый невероятный вывод проистекает из того, что отсутствует фиксированная линия раздела обязанностей между CodeMorphing и аппаратным ядром. Стоит ее сместить в сторону — и мы получим новые варианты процессоров с совершенно иными характеристиками эффективности и производительности. В связи с этим Александр Клайбер (Alexander Klaiber) в документе "The Technology Behing Crusoe Processors" грозится: "Freed to render their ideas in a combination of hardware and software, and to evolve hardware without breaking legacy code, Transmeta microprocessor designers may produce one surprise after another in the new millennium" ("Обладая полной свободой воплощения своих идей в комбинации аппаратного и программного обеспечения и совершенствуя аппаратную часть без нарушения совместимости со старым кодом, разработчики Transmeta смогут еще не раз нас удивить в новом тысячелетии"). Например, благодаря компактности логических схем уже стало возможным размещение северного моста системного чипсета (контроллеры памяти и шины PCI) и микропроцессора на одном кристалле. Как вы, наверное, уже поняли из таблицы, в данный момент закончено проектирование двух чипов серии: TM3120 и TM5400. Первый предназначен для компактных, простых устройств доступа к Web, использующих мобильную версию ОС Linux. Его максимальная тактовая частота составляет 400 MHz. Под Crusoe в данной статье подразумевался как раз более мощный вариант — TM5400, оснащенный емким кэшем. Оба процессора имеют встроенные последовательный порт, PCI-контроллер и контроллер памяти, но если TM3120 поддерживает только микросхемы SDRAM на рабочих частотах от 66 до 133 MHz, то TM5400 может взаимодействовать с DDR SDRAM, начиная с частоты 100 MHz и вплоть до 166 MHz. Последовательный порт используется при загрузке программ CodeMorphing из ROM. Младший представитель семейства уже готов к производству на заводах IBM, а более мощный TM5400 начнет изготавливаться только в середине этого года.

Ложка дегтя

Напоследок окинем критическим взглядом остров, на котором высадился этот "робинзон-нового-тысячелетия".

Уникальность Crusoe главным образом заключается в его способности справляться с выполнением x86 набора инструкций на предположительно высокой скорости, потребляя небольшую мощность. Однако мир мобильных вычислений уже давно не ориентируется на совместимость с настольными ПК. Здесь воцарились многочисленные клоны MIPS- и ARM-процессоров, которые зачастую могут похвастаться куда более сбалансированным набором характеристик. А на основе нижеизложенного вы сможете убедиться в том, что, вероятнее всего, Transmeta угораздило попасть в аккурат между двумя стульями: высокопроизводительных ПК-блокнотов и миниатюрных монофункциональных PDA.

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

В сложности программной составляющей тоже скрываются серьезные недостатки. ПО CodeMorphing занимает само по себе около 512 KB, для полноценной работы ему может потребоваться до 2 MB. При этом следует учесть наличие буфера для трансляции и оптимизации x86-кода, его размер будет варьироваться от 4 до 16 MB в зависимости от решения OEM-производителя. Помимо того что подобно любому оборудованию, основанному на архитектуре UMA, Crusoe будет поглощать значительные объемы основного ОЗУ компьютера, но и сами по себе процедуры свопинга кодов и данных могут предъявить чрезмерно высокие требования к пропускной способности памяти. Избрав в качестве основного партнера по изготовлению чипов фирму IBM с ее технологией Embedded DRAM, специалисты Transmeta сделали верный шаг, поскольку, вероятно, удастся разместить необходимый объем памяти на одной подложке с процессором. Простота аппаратной части также заставляет серьезно сомневаться в возможности сделать интерпретацию SSI- и 3DNow!-инструкций более или менее приемлемой с точки зрения производительности. А эмуляция архитектуры Sun практически невозможна, поскольку чипы UltraSPARC имеют большее число регистров. Вообще в микропроцессорной индустрии весьма скептически оценивают потенциал быстродействия подобной схемы. Ведь реально на каждую инструкцию x86 приходится как минимум несколько выполненных VLIW-команд эмулятора, а метки, которые будут разбрасываться по тексту интерпретируемой программы, предназначенные для идентификации типичных алгоритмических конструкций, точек ветвления и участков заблокированного кода (дабы избежать проблем с самомодифицирующимися приложениями), будут поглощать как память, так и пропускную способность шин компьютера. Оптимизация даст хороший эффект, но только в случае, если будет что улучшать. Тщательно скомпилированная программа не оставит Crusoe ни единого шанса. Быть может, искусственные тесты "не нравятся" процессору как раз по этой причине? Однако опасения некоторых специалистов, что современные трехмерные игры будут плохо сочетаться с технологией эмуляции, напрасны. Недаром в компании работает Тэйлор, упоминавшийся в самом начале статьи. Именно шутеры от первого лица будут работать очень хорошо — лучше, чем Windows с множеством одновременно запущенных приложений, поскольку компактные (обычно не более 500 KB) ядра-движки таких игр идеально отвечают идеологии эмулятора.

Алгоритм работы модуля CodeMorphing

Подведем черту. Достоинства технологии Transmeta очевидны и растиражированы в многочисленных пресс-релизах, статьях, репортажах. О недостатках пока можно сказать только одно — они есть. Насколько они существенны? Ответа нет и не может быть, пока на столах тестовых лабораторий не появятся первые образцы систем с наклейками "Crusoe Inside". Звучит немного жутковато, но это единственный способ узнать истину. Сомневающимся предлагаю вспомнить историю с "достаточно быстрым" языком Java.


Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: