Первый советский домашний компьютер БК-0010 всегда считался, скажем так, небыстрым ПК. И на то был ряд серьёзных причин: ещё с 80-х годов хорошо известно, что процессор БК сильно тормозится контроллером ОЗУ и дисплея (примерно на 1/3), из-за чего для выполнения простейших команд ему требуется целых 12 тактов (у 8-битных ПК в 3-6 раз (!) меньше – обычно 2 такта (процессоры 6502 и 6809) или 4 такта (процессоры Z80, КР580ВМ80А, ИМ1821ВМ85А и подобные)) и максимальное его быстродействие составляет всего лишь 250 тысяч операций в секунду. На фоне самых быстрых 8-битных ПК, выполняющих до 1 миллиона простых операций в секунду, эти показатели БК выглядят откровенно слабо. Вполне укладываются в это русло и показатели быстродействия большинства распространённых трансляторов для БК – и стандартный для БК-0010 Фокал, и перенесённый на БК простейший 8-килобайтный Бейсик с компьютеров ДВК работают чрезвычайно медленно. Даже вильнюсский Бейсик-полукомпилятор для БК-0010-01, имея отличную скорость при работе с целыми числами, показывал откровенно грустные результаты при вычислениях с плавающей запятой.
Но есть у БК одна особенность, сильно отличающая его от привычных в 80-е годы 8-битных ПК – 16-битный процессор К1801ВМ1 (плюс 16-битные ОЗУ и ПЗУ) с совсем другой, более совершенной, архитектурой, чем у 8-битных моделей. И эта «незначительная деталь» полностью меняет реальное «соотношение сил»: во-первых, процессор БК может обрабатывать сразу два байта вместо одного (например, пересылать из одной области памяти в другую, сдвигать, сравнивать, выполнять логические операции, складывать, вычитать и т.д.), что во многих случаях уже само по себе даёт преимущество в два раза при прочих равных условиях; во-вторых, процессор БК располагает шестью универсальными 16-битными регистрами, каждый из которых может быть аккумулятором, индексным регистром и т.д. (у 8-битных процессоров, как правило, роли регистров разделены – есть один-два «аккумулятора» и один-два «индексных» регистра); в-третьих, архитектура процессора БК позволяет использовать во всех командах любые регистры (включая указатель стека и счётчик команд) и любые способы адресации (а их набор намного шире, чем у таких 8-битных процессоров, как Z80 и КР580ВМ80А). В результате, несмотря на кажущуюся медлительность процессора (большое число тактов на команду), 16-битный К1801ВМ1 зачастую легко обходит 8-битные модели за счёт того, что для выполнения одних и тех же функций требует намного меньшего количества команд. К примеру, для копирования данных из одной области памяти в другую для К1801ВМ1 достаточно выполнять в цикле одну команду (скажем, MOV (R1)+,(R2)+), причём копируется сразу по 2 байта; а для процессора КР580ВМ80А (примерно аналогично и у 6502) в стандартном случае (без использования стековых операций) требуется циклическое выполнение уже 4-х команд (скажем, MOV A,M/STAX D/INX H/INX D), которые копируют лишь по одному байту. При этом максимальная скорость копирования у БК-0010 составляет 150 тысяч байт в секунду (без учёта затрат времени на команды организации циклов), а, например у «Вектора-06Ц» (имеющего такую же тактовую частоту, как у БК – 3 МГц) – всего 93 тыс. байт/с. И это при том, что «Вектор» имеет втрое более высокий показатель максимального быстродействия, чем БК-0010 – 750 тыс. операций в секунду против 250 тысяч. Похожая ситуация и с другими типичными задачами – сдвигом областей памяти, поиске совпадений, наложении данных логическими операциями и т.д. – везде вместо одной команды у БК на 8-битных процессорах требуется исполнение до 8 команд.
Убедиться в преимуществах 16-битной архитектуры позволяет самая простая версия вильнюсского Бейсика, предназначенная для загрузки с магнитофона в ОЗУ БК-0010 (её объем – всего 9 килобайт). Этот Бейсик не поддерживает двойную точность вычислений и работает с вещественными числами в разы быстрее обычного 24-килобайтного Бейсика в ПЗУ БК-0010-01, показывая результаты, близкие к стандартному Бейсику УКНЦ! Причём эти Бейсики (9-килобайтный «вильнюсский» на БК и 27-30-килобайтный «вильнюсский» на УКНЦ) имеют совершенно одинаковую точность вычислений, что явно указывает на то, что в них использованы одинаковые алгоритмы вычислений с плавающей точкой (тем более, учитывая, что у них одни и те же авторы из Вильнюсского госуниверситета). Поэтому есть все основания считать, что БК был очень близок по скорости к быстрейшему из недорогих ПК 80-х – УКНЦ. Как видно из таблицы, в тестах «полукомпиляторов» БК -0010 отстаёт от УКНЦ по общему среднему результату (тесты ВМ1-ВМ8) всего на 25%, а по тестам ВМ1-ВМ7 – всего на 17%. А ближайшего иностранного ПК – очень быстрого ABC 800, имеющего очень эффективный «полукомпилятор» Бейсика, БК опережает на 16% (ВМ1–ВМ8) либо на 45% (ВМ1-ВМ7).
То есть, в общем-то, мы вполне можем сделать вывод: БК-0010 опережал средний уровень 8-битных ПК по скорости работы сложных программ (вроде трансляторов Бейсика) в 2 с лишним раза! А самых быстрых 8-битных на основе процессора Z80 – примерно на 30%. При этом, надо заметить, что при выполнении многих простых программ в машинных кодах, особенно не требующих использования многоразрядных (более 8 бит) чисел, БК мог и уступать типичным 8-битным компьютерам, поскольку на таких программах преимущества 16-битной архитектуры и большой набор методов адресации могли быть просто не востребованы.
Кстати, ещё несколько слов о «странном» 24-килобайтном Бейсике БК-0010-01. По среднему показателю в тестах ВМ1-ВМ8 он действительно оказался ближе к концу рейтинга, немного уступая MSX (SVI-328) и заметно опережая ZX Spectrum. При этом хорошо видно, что «тянет вниз» его в основном тест ВМ8 (вычисление сложных функций), а остальные выполняются очень быстро (средний показатель ВМ1-ВМ7 – на уровне самых быстрых 8-битных ПК). Причиной такой низкой скорости этого Бейсика является очень странный способ работы с вещественными числами: поскольку он поддерживает не только целые числа и числа с плавающей запятой одинарной точности (4 байта), но и числа с двойной точностью (8 байт), для упрощения транслятора все вычисления над всеми вещественными числами (не только 8-байтными, но и 4-байтными!) производятся одними и теми же процедурами двойной точности; при этом числа одинарной точности приходится ещё предварительно преобразовывать в числа двойной точности, а после совершения арифметической операции или вычисления функции делать обратное преобразование (из двойной точности в одинарную). Понятно, что числа двойной точности обрабатываются гораздо медленнее, чем одинарной (требуется примерно вдвое большее количество сложений, умножений и т.д.), поэтому и скорость работы с вещественными числами у этой версии вильнюсского Бейсика намного ниже, чем у трансляторов, работающих только с числами одинарной точности или имеющих раздельные процедуры вычислений для чисел одинарной и двойной точности. Аналогичную неприятную особенность имеют и компьютеры MSX (SVI-328), что также сильно снижает их показатели. У стандартного Бейсика БК-0010-01 есть и ещё один недостаток – он не только медленно работает с вещественными числами в целом, но и особо медленно вычисляет сложные функции (логарифмические и тригонометрические), поэтому тест ВМ8 резко снижает его общий средний показатель. С другой стороны, такие ПК, как БК-0010-01 и MSX имеют и большое достоинство – чрезвычайно высокую точность вычислений в режиме двойной точности (17 знаков), что позволяет использовать их для весьма сложных и серьёзных расчётов (ошибка вычислений будет минимальна даже при длинной цепочке операций или большом количестве повторений цикла). И надо заметить, что трансляторы, поддерживающие только одинарную точность (а таких, пожалуй, большинство среди 8-битных ПК, они имеют точность 6-7 знаков) или «упрощённую» двойную точность (как у «Корвета», 7-8 знаков для сложных функций), во многих случаях дают огромную ошибку в вычислениях, неприемлемую на практике (а вот средний вариант, с 40-битными числами, использовавшийся во многих зарубежных ПК очень интересен - он и достаточно быстр, и точность на хорошем уровне - 9 знаков).
[свернуть]