За счет непосредственного исполнения байт-кода Java, процессор MicroJava устраняет необходимость в JIT-компиляторе (ниже будет подробно описано, каким образом удается обеспечить производительность центрального процессора и в чем состоит оптимизация). В результате этот процессор достигает значительно лучшего показателя цена/производительность по сравнению с другими, не рассчитанными на "понимание" байт-кода Java, как пояснил Дхавал Аймера, директор по маркетингу в Sun Microelectronics.

Так, например, согласно утверждениям Sun, прототип MicroJava 701 с частотой 200 МГц показал результат 13,332 при испытании на предложенном компанией Pendragon Software тесте под названием CaffeineMark 3.0. Компьютер с процессором UltraSPARC с частотой 200 МГц, оперативной памятью объемом 128 Мбайт, Solaris 2.5.1, HotJava 1.0, а также JDK 1.1 с JIT-компилятором (версия 1.1.1) показал на этом же приложении результат 13,911.

При этом 200-мегагерцевый Pentium Pro с оперативной памятью 32 Мбайт под Windows NT 4.0 SP3 с Internet Explorer 3.02, работая с JIT-компилятором, "выступил" куда более скромно - 4,242.

Харлан Маккан, менеджер по маркетингу в Sun Microelectronics, заявил, что для того, чтобы повысить производительность, компания не только наделила процессор непосредственной поддержкой байт-кода Java, но и реализовала аппаратную поддержку наиболее распространенных алгоритмов сборки мусора. Это дало возможность ускорить выполнение требующих продолжительного времени операций сборки мусора, не жертвуя гибкостью и позволяя Sun изменять алгоритмы не теряя совместимости.

Sun не объявила о цене нового устройства, но можно предположить, что она будет сопоставима со стоимостью Pentium Pro. Пока MicroJava 701 втрое превосходит Pentium Pro по показателю цена/производительность при выполнении Java-приложений. Впрочем, многое еще может измениться до конца года.

Для того чтобы обеспечить выполнение множества популярных приложений, написанных не на Java, компания расширит функциональные возможности MicroJava с тем, чтобы процессор выполнял откомпилированный код C/C++ с удовлетворительной производительностью.

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

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

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

Благодаря сотрудничеству производителей программного аппаратного обеспечения в центральные процессоры были включены команды, используемые при разработке компиляторов C для выработки оптимального кода микропроцессора MicroJava.

Выпуск MicroJava 701 большими партиями запланирован на вторую половину 1998 года.

Курс молодого бойца: оптимизация под вопросом

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

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

Допустим, строка программы выглядит примерно так:

getinput(inputvar,standard_input);

Вот этот же фрагмент, позволяющий вводить некую информацию в переменную с именем inputvar в машинных кодах:

0A 4B 9C AF B6 D3 51 36 F1... и т.д.

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

Вместо этого программа говорит процессору примерно следующее: "Перенеси содержимое внутреннего регистра в другой внутренний регистр под названием ax. Затем умножь содержимое регистра ir на AF. Перенеси результат в область памяти D3B6". Ну и так далее.

Другими словами, байт-код, исполняемый центральным процессором, представляет собой низкоуровневые команды, которые в некотором роде расширяют высокоуровневый язык, дабы компьютер выполнил сформулированную последним задачу. Процессор не понимает высокого уровня. Он не понимает C, он не понимает Java. Он понимает только машинные коды, которые поступают к нему от компиляторов или интерпретаторов.

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

Скорость, с которой процессор исполняет команды C, целиком зависит от машинных кодов, выработанных компилятором.

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

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

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

Чем более точные команды выбирает компилятор языка C для выполнения того или иного оператора, тем больше возрастет производительность приложений.

C what you can C

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

Но есть все же один случай, когда процессор оказывается на первом плане, а оптимизация компилятора - на втором. Это касается Sun и ее микропроцессора MicroJava. Пока процессор только разрабатывается, команда программистов, создающая компилятор, может объединить усилия с теми, кто работает над аппаратурой, для создания оптимального сочетания компилятор/центральный процессор.

Именно эта форма сотрудничества использовалась при разработке MicroJava. Было бы неправильно утвержать, что процессор отпимизирован для C. Скорее, процессор компании Sun и компилятор C компании Sun оптимизированы для работы друг с другом.

Just-In-Time против Java-процессоров

Однако - и это свойство всех интерпретируемых языков - дополнительный шаг требует времени. Если к каждой команде добавлять дополнительный шаг, дожидаться выполнения большой сложной программы придется бесконечно долго. Этого можно избежать, добавив компилятор Just-In-Time (JIT). Эта система стремится выполнить преобразование или интерпретацию байт-кода Java в машинно-ориентированные команды задолго до того, как начнется выполнение команд Java (в лучшем случае, это преобразование завершается к моменту загрузки Java-программы).

Есть и другой способ - предложить центральный процессор, который понимал бы байт-код Java. В этом случае JIT становится совершенно не нужен. Именно этого эффекта Sun добилась в процессоре MicroJava.

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


Java-процессоры выходят в большой свет

Молодая и удачливая компания Sun Microelectronics выпускает микропроцессор, предназначенный специально для работы с языком Java. На Микропроцессорном форуме компания обнародовала свои планы по выпуску первого так называемого Java-процессора. Однако она отнюдь не одинока. Тем временем компания Patriotic Scientific Group приспосабливает операционную систему JavaOS для своего собственного Java-процессора, PSC1000. В состав JavaOS входит виртуальная машина Java Virtual Machine, обеспечивающая совместимость приложений и базовые функции ОС - загрузку, управление потоками и обработку прерываний.

"Мы надеемся в самое ближайшее время завершить перенос JavaOS и до конца этого года наладить серийное производство процессоров", - сказал Фил Мореттини, вице-президент Patriot по сбыту и маркетингу. Patriot уже готовится продемонстрировать опытный образец сетевого компьютера на базе нового процессора.

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

Ничего сверхнового в сочетании Java-процессора и JavaOS нет: процессор обеспечивает высокую производительность приложений, а ОС выполняет низкоуровневые функции, необходимые для их работы. Patriot даже пробует ряд операционных систем на роль альтернативы JavaOS.

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

Процессоры основаны на технологии picoJava, разработанной Sun Microelectronics. Написанное Java-приложение транслируется в формат байт-кода Java. Для его выполнения необходим интерпретатор или компилятор, преобразующий байт-код в команды конкретного микропроцессора. Процессор picoJava способен выполнять непосредственно сам байт-код, что должно ускорить работу программ. Лицензия на архитектуру процессора была продана пяти или шести компаниям.

SME продает и свою собственную серию процессоров на основе picoJava под названием microJava. Изготавливать их для SMЕ будут независимые производители. В конце 1998-ГО или в 1999 году SME представит также процессор старшего класса, ultraJava, в основе которого лежит другая, более совершенная, чем picoJava, технология.

IBM реализует двойную стратегию в отношении Java-процессоров. По сообщению представителя IBM Microelectronics Division Билла О'Лери, компания уже поставляет процессор PowerPC со специальными функциями для JVM. Процессоры используются в подразделении по сетевым компьютерам. Кроме того, IBM Microelectronics Division встраивает в свои процессоры Java-ускорители. Результат будет известен в начале будущего года.

Rockwell Avionics and Communications - один из владельцев лицензии на Java - заявила недавно о создании первого Java-процессора. Однако ни даты начала поставок, ни других подробностей представители Rockwell не сообщают; известно лишь, что она тестирует процессор в составе авиационного оборудования.

В своих разработках Patriot использует технологию, приобретенную около двух лет назад. По утверждению руководства компании, конструкция процессора по счастливой случайности оказалась удивительно согласованной с архитектурой Java. "Мы сможем продавать процессор не больше чем за 10 долл. в оптовых партиях. Intel Pentium вы за столько нигде не купите, - сказал Мореттини. - Мы надеемся, что наш Java-процессор будет самым быстрым".

Пока неясно, возьмут ли производители систем на вооружение Java-процессоры даже для сетевых компьютеров на основе Java. На сегодня большинство производителей сетевых компьютеров используют сопроцессоры общего назначения - StrongARM компании Digital или даже Intel Pentium. "Мы следим за разработкой Java-процессоров, но не знаем, будет ли их производительность сравнима с производительностью RISC-процессоров общего назначения? - спрашивает Джеймс Фултон, директор маркетинга Network Computer Devices. - И появятся ли приложения, для которых необходимы именно Java-процессоры?"

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

Их уверенность основана на том, что JVM подверглись серьезному усовершенствованию. Как сообщил менеджер по маркетингу SME Харлан Макгахан, Sun встроила в JVM много новых функций.

- Джон Кокс, Марк Сонгини,

Network World, США

Поделитесь материалом с коллегами и друзьями