Основная версия Бейсика для УКНЦ – очень быстрый «вильнюсский Бейсик», условно называемый «полукомпилятором» (хотя по скорости выполнения программ он намного ближе к интерпретаторам, чем к настоящим компиляторам). Этот вид Бейсика может использоваться с УКНЦ в любой конфигурации – он загружается с дисковода, магнитофона, картриджа ПЗУ или по локальной сети. Работает он примерно так: сразу после подачи команды RUN транслятор довольно быстро (за несколько секунд или десятков секунд, в зависимости от длины программы) преобразует исходную программу в так называемый «шитый» код, представляющий собой адреса подпрограмм, выполняющих соответствующие команды Бейсика, арифметические операции и т.д., после которых идут данные для работы этих подпрограмм (например, адреса переменных или числовые константы, преобразованные к внутреннему представлению). То есть «полукомпилятор» один раз выполняет «трансляцию» Бейсик-программы в некий внутренний код, после чего запускает выполнение уже этого кода. Выигрыш в скорости достигается благодаря тому, что в «шитом» коде все арифметические выражения преобразованы в так называемую обратную бесскобочную («польскую») запись, которая быстро исполняется без дополнительных преобразований, все константы переведены из текстового вида во внутреннее представление (с которым непосредственно работают процедуры целочисленной или вещественной арифметики), в командах переходов и вызова подпрограмм вместо номеров строк подставлены соответствующие адреса в памяти и т.д. Всё это даёт преимущество над интерпретаторами примерно в 2-3 раза при использовании вещественной арифметики и до 10-15 раз при целочисленных операциях. Впрочем, чем сложнее выполняемые функции, тем меньше разница между интерпретаторами и полукомпиляторами – как видим, в тесте ВМ8 вильнюсский Бейсик оказался даже заметно медленнее классического интерпретатора Бейсик-11, имеющего более эффективные процедуры вычисления сложных функций. Аналогичная ситуация и при выводе графики – скорость исполнения команд рисования линий, окружностей, спрайтов, закраски областей и т.д. практически не зависит от типа транслятора, поэтому при работе с графикой полукомпиляторы зачастую также не имеют заметного преимущества над обычными интерпретаторами.
Как видно из таблицы, по средней скорости всех тестов вильнюсский Бейсик на УКНЦ значительно опережает все остальные ПК, включая и модели на базе почти 32-разрядного процессора 68000. Однако сравнивать его напрямую с классическими интерпретаторами, конечно, некорректно, поскольку интерпретаторы, имея другой принцип работы, должны заметно уступать по скорости «полукомпиляторам». А вот сравнение с другими «полукомпиляторами» вполне уместно и, как мы видим, УКНЦ опережает ближайшего преследователя – БК-0010 – в среднем на 32%, 8-битные шведские ПК ABC 800 (имеющие чрезвычайно быстрый транслятор Бейсика, особенно по скорости арифметики с плавающей запятой) – на 53% и бельгийский DAI PC – ровно в 2 раза (хотя последний измерялся с установленным ускорителем для операций с плавающей запятой).
Другой вариант Бейсика, иногда использовавшийся на УКНЦ – стандартный Бейсик-11 (Basic-11/RT-11) для операционной системы RT-11 (или её аналогов), применявшийся на многих компьютерах, совместимых с архитектурой PDP-11. Это как раз типичный, классический интерпретатор, и его показатели вполне можно сравнивать с другими ПК. И, как мы видим из таблицы, по средней скорости в тестах ВМ1-ВМ8 он тоже показывает выдающийся результат, уступая лишь таким ПК, как Amiga-500 и HP Integral PC (оба на основе процессора 68000). Однако, как видно по отдельным результатам тестов, Бейсик-11 вовсе не отличался какой-то выдающейся скоростью, скорее наоборот – например, циклы FOR/NEXT (а это одни из наиболее часто востребованных операторов) у него выполняются заметно медленнее, чем у Бейсиков большинства других ПК (у BBC Micro тест ВМ1 работает в 4 раза быстрее!). Соответственно и другие тесты, задействующие FOR/NEXT (ВМ6 и ВМ7), тоже выполняются сравнительно медленно (а результаты ВМ6 и ВМ7 очень сильно влияют и на общий средний результат). Причём дело здесь явно не в медлительности самого ПК, так как эти тесты довольно неторопливо выполняются и на однозначно в разы превосходящем все ПК по скорости PDP-11/83 (ВМ1 на нём работает почти с такой же скоростью, как на BBC Micro, хотя PDP-11/83 имеет в 9 раз бОльшую частоту процессора, 16-разрядную архитектуру и даже специальный ускоритель для операций с плавающей запятой). Если бы, скажем, тесты ВМ6 и ВМ7 выполнялись на УКНЦ со скоростью BBC Micro, то средний показатель ВМ1-ВМ8 был бы уже порядка 10,5 (а не 12,9). Впрочем, у Бейсика-11 есть и большое достоинство – сложные вычисления (тест ВМ8) он выполняет заметно быстрее не только остальных ПК из таблицы, но даже быстрее вильнюсского Бейсика на том же УКНЦ. Кроме того, будучи обычным интерпретатором, Бейсик-11 гораздо экономнее использует оперативную память, чем вильнюсский Бейсик, и максимальный размер программ у Бейсика-11 примерно в 2 раза больше.
Итак, однозначно можно сказать, что УКНЦ был одним из самых быстрых ПК среди недорогих моделей 80-х годов. Причём, сравнивая его результаты с другими ПК, нужно учитывать, что его центральный процессор К1801ВМ2 работал далеко не на полную мощность – из-за сильнейшего торможения контроллерами памяти (а оно связано, в том числе, с наличием второго процессора и довольно сложного видеоконтроллера) его «эффективная частота», судя по всему, не превышала 3 МГц (при «формальной» тактовой частоте целых 8 МГц). Т.е. можно сказать, что основной процессор УКНЦ фактически работал примерно на той же частоте, что и типичные процессоры 8-битных ПК на основе Z80 и КР580ВМ80А, и мы хорошо видим, какое преимущество он имеет относительно среднего уровня упомянутых 8-битных ПК – в большинстве тестов УКНЦ быстрее в 2-3 раза, а в сложных вычислениях (ВМ8) – примерно в 5 раз!
Таким образом, если судить по скорости работы интерпретаторов Бейсика, УКНЦ превосходил средний уровень 8-битных ПК примерно в 3 раза, то есть 16-битная архитектура процессора К1801ВМ2 давала 3-кратное преимущество в скорости в условиях близкой эффективной тактовой частоты. И это несмотря на значительно большее число тактов, необходимое для выполнения одной команды (от 8 тактов, у 8-битных процессоров - от 2-4-х тактов) и далеко не самый быстрый интерпретатор Бейсика.
Ещё один интересный вывод, который можно сделать на основании таблицы – советские оригинальные процессоры серии К1801 (не имеющие прямых американских прототипов) с системой команд PDP-11 ничуть не уступали самым мощным американским моделям по эффективности архитектуры – их производительность на единицу эффективной тактовой частоты не меньше, чем у самого продвинутого из PDP-11-совместимых американских микропроцессоров DEC J-11: процессоры К1801ВМ1 и К1801ВМ2 (в БК-0010 и УКНЦ), имея примерно в 6-9 раз меньшую эффективную частоту процессора, работают в 5,5-7,5 раз медленнее, чем PDP-11/83 (причём протестированный PDP (а это самая быстрая модель из всей линейки PDP-11) был оснащён даже специальным ускорителем для вычислений с плавающей запятой, которого у БК и УКНЦ, естественно, не было).
[свернуть]