Обзоры
Прагматичные процессоры
17

Прагматичные процессоры

Все попытки автора оставить вне внимания тему "новых" микропроцессорных
архитектур, созданных в последнее время действительно новых серийных процессоров,
оказались тщетными. Увы, избежать обвинений в симпатиях к еще одной технологической
ветви не удалось, ведь речь пойдет опять… о стековых машинах и (в какой-то мере)
наследнице лавров великой системы программирования FORTH — Java.

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

Lectrice

Уже в 1994 г. разработчики всерьез задумывались о создании портативных узкоспециализированных систем, если так можно выразиться, "пользовательской ориентации". Проект Lectrice, прообраз современных e-books, к 1996 г. воплощенный в "одноименном металле", является одним из самых ярких представителей очень удачных разработок этого направления, значительно обогнавших свое время. По сути, тривиальный в аппаратной части (простенькая вычислительная машинка) и исполнении (практически ничем не отличающемся от современных web-pad) Lectrice поражал и поражает сложностью ПО — операционная система Unix, канонически ресурсоемкая графическая подсистема X Window и, наконец, мощные, сложные и "тяжелые" программные комплексы Virtual Paper и Virtual Book — до сих пор не имеющие аналогов пользовательские программы, созданные для высококачественного отображения легкочитаемых текстов. Короче говоря, Lectrice представлял собой очень совершенную электронную книгу, оснащенную по последнему слову техники, — в нем были и сетевой интерфейс (10BT), и аудиоподсистема, и слоты расширения PCMCIA, и очень неплохая видеоподсистема с разрешением XGA (1024 x 768). И, что исключительно важно в контексте статьи, — все это программно-аппаратное чудо приводилось в движение… смехотворно низкой тактовой частотой центрального процессора — аналога MIPS R3000. Всего лишь 25 MHz позволяли Lectrice очень хорошо делать то, что она должна была делать, — выполнять непростую, нетривиальную и "прожорливую" задачу рендеринга сглаженного текста, представленного в компактном формате. В том, что подобная задача отнимает немало ресурсов даже у современных процессоров, может убедиться любой желающий, замерив на своей машине "расход производительности" при отображении pdf-файла программой Adobe Acrobat Reader.


Lectrice

Удивительные "способности" Lectrice убеждают нас в одном: высокая тактовая
частота процессора — это далеко не главная составляющая производительности, оцениваемой
по пользовательским критериям. Тем более в "массовых" и "повседневных"
приложениях. Здесь большую роль играют энергопотребление, определяющее массу,
габариты и продолжительность работы при батарейном питании завершенной конструкции,
стоимость и доступность компонентов, формирующие спрос одновременно и со стороны
производителей, и со стороны потребителей, и, наконец, "пригодность к программированию".
Последний термин, не имеющий точного определения, на практике оказывается неожиданно
болезненно ощущаемым, особенно при разработке машинно-зависимого и системного
ПО, совершенство которого так необходимо при рачительном отношении к ограниченным
вычислительным ресурсам (а они всегда ограничены — будь то 25 MHz, будь то 1
GHz процессор).

Безадресные машины

Успешная реализация Lectrice убедительно доказывает: дешевые процессоры с достаточной производительностью необходимы и актуальности не теряют. Совсем "свежие" события, буквально недельной давности, а именно портирование гигантом Sony ОС Linux на платформу PlayStation 2, добавляют красок к картине из прошлого — узкоспециализированные устройства (такие, как игровая консоль), оказывается, могут "легким движением руки" приобретать неожиданную функциональность. Впрочем, задумайтесь сами — еще недавно пригодная исключительно для убийства времени, недорогая PlayStation 2 превратилась в мощный графический терминал X Window с акселерированной OpenGL-подсистемой и используемым в качестве дисплея бытовым телевизором. Разве это плохо? Это просто замечательно (хотя бы потому, что появляется возможность строить нормальные многофункциональные домашние сети), и тенденция расширения функциональности и спектра предложений на рынке "бывших специализированных" вычислительных устройств, несомненно, будет доминирующей в ближайшее время. И совершенно не важно, каким ОС отдадут предпочтение производители — QNX, Linux, NetBSD или Windows CE. Главное другое — "новая волна" настоятельно требует аппаратной поддержки — дешевой, простой в освоении разработчиками, не требовательной к технологическим нормам полупроводникового производства и обладающей (вспомним Lectrice) достаточной вычислительной мощностью. Одним словом, прагматичной.

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

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

Самый последний "писк" моды на микропроцессорные архитектуры, обещавший чуть ли не радикальное изменение и производительности, и сложности реализаций, — VLIW (процессоры со сверхдлинным командным словом) — оказался на деле действительно писком, несмотря на гром пресс-релизов. Но рациональное зерно — сокращение сложности процессора за счет перемещения большей части сложной функциональности с аппаратного уровня на уровень системного ПО — от признания этого факта привлекательности не теряет. Хотя бы потому, что идея далеко не нова. Предыдущие модные веяния, как-то перевод CISC (процессоров со сложным набором команд) на внутреннюю организацию RISC (простая система команд, ориентированная на операции "прочитать/записать"), стали уже обыденностью и ожидаемых сверхвысоких дивидендов не принесли — процессоры действительно стали намного быстрее, но и их сложность и энергоемкость выросли астрономически. В целом же, ни внутренние RISC-модернизации и реализации гарвардской архитектуры (раздельно адресуемые пространства памяти команд и данных), упрятанной за кэш-памятью, ни попытки внутреннего распараллеливания исполнения команд, ни достигшая немыслимых количеств ступеней конвейеризация, ни, наконец, могучая аппаратно-программная интеллектуальная система анализа исполняемого кода "на лету" (для предсказания ветвлений и т. п.) не привели к главному — к созданию сбалансированной архитектуры. Множество конвейеров практически всегда превращает в ад разработку системного ПО реального времени, внутренняя гарвардская архитектура ведет к деградации производительности (не на единицы процентов — в несколько раз) при обработке массивов данных, "не помещающихся" в кэш, распараллеливание подходит только для весьма специфичных операций, а сложная логика анализа (например, как у CPU Alpha 21264 — с глубиной в 80 команд!) превращает современный процессор в очень неплохой обогревательный прибор.

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

Итак, знакомьтесь — вот они, новые стековые машины третьего тысячелетия.

Кремниевые наследники Forth

В июле 1999 г. компании Rockwell Collins, Sun Microsystems и Centaur Technologies создали проектную группу, нацеленную на разработку совершенно нового микропроцессора, предназначенного для чувствительных к потребляемой мощности, производительности и пригодности к программированию сегментов рынка. И вот, всего менее чем за два года ставшая компанией aJile Systems производит и продает два процессора, фактически представляющих собой аппаратные Java-машины стековой архитектуры. В основе достижений aJile лежат патентованные разработки Rockwell, в частности технология микропроцессора JEM 1 — первой в мире выполняющей непосредственно Java- байт-код вычислительной машины. Правда, с момента приобретения патента на JEM 1 разработчики aJile не теряли времени и создали новое, улучшенное ядро аппаратной Java-байт-машины JEM 2, способное осуществлять атомарные операции байт-кода за один такт.

JEM 2 содержит очень большой для безадресных машин объем сверхбыстрой памяти, организованной по принципу стека, — 32 KB (для канонических стековых машин даже 128 байт стека считается более чем достаточным показателем). Многопортовая организация этой памяти позволяет, например, одновременно загружать несколько операндов (из "верхней" ячейки памяти стека и находящихся "под ней" ячеек) в однотактное АЛУ (Арифметико-Логическое Устройство) и очень быстро (за один-два такта) выполнять достаточно сложные операции со стеком. Аппаратный генератор микрокоманд управления стеком, АЛУ и счетчиком команд доступен программисту, но с одним маленьким ограничением — только на этапе "холодного старта" (после аппаратной команды Reset) микропроцессора. В это время в него можно загрузить микропрограмму, реализующую… новую систему команд и даже изменяющую архитектуру вычислителя. Такая возможность — отличительная черта практически всех современных стековых машин. В "арсенале" производителей обычно имеются уже отработанные модели какого-нибудь "ходового" микропроцессора невысокой разрядности (например, Zilog Z80), позволяющие в некоторых случаях заменять устаревшие микросхемы с низким быстродействием на их новые высокоскоростные "имитации" без изменений хранящегося в долговременной памяти программного кода. Кроме того, фактически обязательной является и микрокомандная реализация системы байт-команд Java, команд Forth-машины и, наконец, даже виртуальной трехстековой модели, идеально подходящей для компиляции программ, написанных на классических языках типа C и Pascal.


Процессор
aJ-100

В отличие и от самых эффективных эмуляторов Java-машины, и от лучших JIT-компиляторов
(осуществляющих трансляцию Java-кодов в коды целевой платформы в ходе загрузки
задачи), аппаратные стековые машины привлекательны не только (и не столько) очень
высокой производительностью, хотя их быстродействие впечатляет. Так, при потреблении
в 5 раз (!) меньшей мощности они уверенно — почти в 2 раза — обходят своих далеко
не самых медленных конкурентов из регистрового мира RISC: классическая стековая
машина "выдает" на тестах CM (CaffeineMark) 1900 единиц против 1000
единиц очень удачного процессора ARM7TDMI при тактовой частоте 100 MHz (для сравнения,
этот показатель соответствует уровню производительности процессора Intel Pentium
150 MHz или даже Pentium Pro 200 MHz — в зависимости от качества реализации виртуальной
машины Java). При этом следует учесть, что тесты CM комплексные, и полученная
оценка является интегрированной, включающей и интенсивные вычисления с плавающей
точкой, которые обычно производителями стековых машин аппаратно не поддерживаются!
Но все же главная привлекательность безадресных архитектур кроется в исключительно
высоких показателях скорости переключения между задачами/потоками в многозадачных/поточных
программных системах. Каноническим регистровым машинам в таких случаях надо сохранить
текущий контекст в стеке, размещающемся в некоторой области оперативной памяти.
Так как контекст современных процессоров достаточно объемен (обычно у них много
регистров), а операции записи во внешнюю память относительно медленны, то и время
переключения получается (в терминах процессора) очень продолжительным. Стековым
машинам такие операции не нужны — их контекст уже хранится в стеке, поэтому переключение
обычно осуществляется за один такт. Чтобы понять порядок величин, следует привести
такой пример: переключение между потоками даже в весьма неплохих ОС реального
времени, написанных на компилируемых языках и тщательно оптимизированных, отнимает
одну-две миллисекунды процессорного времени. Для процессора aJ-100 и программы,
написанной на Java, переключение между двумя потоками занимает строго 1 микросекунду.
Такая разница (на три порядка!) означает, что процессору легче "справляться"
со множеством разных задач, что исключительно важно уже не только для "настольных"
машин, но и для самых разнообразных персональных устройств.

Второй представитель стековых машин нового поколения — процессор со странным названием Cjip (которое на самом деле правильно произносится почти как "чип") — детище шведской компании Imsys. Как и aJ-100, Cjip представляет собой настраиваемую микрокомандами безадресную 16-битовую машину, в которой реализованы сразу несколько подходов к повышению производительности. Во-первых, у Cjip два стека небольших (по сравнению с aJ-100) размеров — 256 байт, во-вторых, Cjip является не совсем чистым воплощением стековой архитектуры — кроме двух стеков, он содержит 8 регистровых банков (32 регистра) для ускорения переключения контекста.

Очень интересная особенность стековых машин последнего поколения, как aJ-100, так и Cjip, которую можно смело назвать уникальной, — микропрограммная поддержка встроенного "сборщика мусора" (GC) — программы, следящей за правильностью процедур выделения и освобождения оперативной памяти. Так, наличие GC позволяет запускать несколько виртуальных машин Java на одном процессоре и гибко определять правила управления памятью для каждой такой машины. Прямым следствием данной возможности является принципиальная способность систем на основе этих процессоров обслуживать запросы от внешних устройств за гарантированное время.

Третий участник битвы за будущее — наследник серийно производившегося более пяти лет и потому уже знаменитого процессора PSC1000 — стековая машина IGNITE. Ее разработчики в подтверждение термина "безадресная архитектура" даже присвоили новое наименование классу подобных машин — ROSC (Removed Operand Set Computer, компьютер с безоперандным набором команд). Это каноническая 32-битовая ROSC-машина с очень высокой производительностью и плотностью упаковки команд, прекрасно исполняющая байт-коды Java, Forth и сгенерированные компиляторами языков C/C++ бинарные программы. В отличие от своих более старших собратьев, IGNITE не поддерживает изменения системы команд с помощью микрокода и обладает значительно менее обширным перечнем встроенных "периферийных" устройств — его разработчики из компании Patriot Scientifics решили "вынести" всю дополнительную функциональность на вспомогательный кристалл.

К американским и шведским производителям серийных стековых машин присоединяются и россияне: в IV квартале этого года завод "Микрон" в Зеленограде начнет выпуск 16- и 32-битовых моделей ROSC-машин, разработанных ИТФ "Технофорт". Возможно, успешный опыт создания стековых компьютеров предыдущих поколений (в частности, "Эльбрус") и не может определять "геоархитектурные" симпатии, но системное и инструментальное ПО (включая компиляторы языков C/C++, TCP/IP-стек и основные Internet-сервисы) для шведского Cjip также разработано российской командой программистов компании "Астрософт".

Что дальше?

Когда больше полутора лет назад писалась первая статья из невольно получившегося цикла, посвященного избранной (пусть даже субъективно) компьютерной архитектуре и идее, стоящей у ее истоков, — языку Forth, на мировом рынке существовал фактически единственный серийный производитель аппаратных стековых машин — компания Patriot Scientific. За прошедшее время были выпущены совершенно новые продукты, "выпадающие" из традиционно принятой сегодня схемы лицензирования интеллектуальной собственности, основанные исключительно на собственных разработках. В мире микропроцессоров такое случается не часто, появление каждой новой архитектуры — это событие. И тем более — событие, когда речь идет о потребляющих 0,1—0,2 Вт чипах с быстродействием около 100 MIPS, низкой ценой и абсолютной нетребовательностью к производственной базе. Большинство стековых машин из-за очень малого числа транзисторов (простота — отличительное свойство всех стековых архитектур) успешно выпускается на оборудовании с технологическими нормами 0,35 мкм, а разработка их доступна даже сравнительно небольшим компаниям.

Возможно, кого-то разочарует невысокая производительность на уровне "всего
лишь" пары сотен MIPS. Но давайте вспомним процессор, на котором успешно
была реализована Lectrice, — R3000 с тактовой частотой 25 MHz. Все его показатели
фактически на два порядка ниже, чем у современных 32-битовых стековых машин, работающих
на частотах от 100 до 200 MHz, но даже его хватало для решения задач нужных, полезных
и вовсе не отличающихся нетребовательностью к ресурсам. Так что для дешевых, быстрых
и питающихся от обычной батарейки ROSC-компьютеров нового поколения, вероятнее
всего, найдется множество интересных применений.


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

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