Однажды дочь-школьница спросила, хороший ли у нас компьютер. Мне на такой вопрос полагалось ответить только утвердительно, что и было сделано. Но ведь детей XXI века на мякине проведешь. Подтверждением тому прозвучало:
— А в чем можно измерить наш компьютер?
— Да в чем угодно, — начал отбиваться я. — Хотя бы в известных по мультфильму попугаях.
На что дочь тут же потребовала выяснения:
— Тогда сколько же «попугаев» в нашем компьютере?
Попытавшись уйти от ответа на «убийственный» по своей прямоте вопрос, я заговорил об оценочнопроверочных тестах для компьютеров, квантах времени, тактах работы микропроцессора… И дочка, поскучнев, поспешила к поджидавшим ее сверстникам.
А я задумался. Действительно, не помешало бы заиметь какую-то относительную единицу типа мультфильмовского «попугая», одинаково пригодную для быстрого сравнения любых ЭВМ. По сути своей это должна быть «вычислительная мощность», характеризующая нечто сугубо компьютерное, выполненное за определенное время.
В этом качестве само собой просится количество пройденных ЦИКЛОВ. В теле цикла можно поставить какие-либо команды (например, сложить, умножить). А что взять за единицу времени? Каким способом из компьютера (независимо от его процессора, прерываний, всевозможных кэш и ускорителей) «вытащить» единицу времени?
Оказывается, все трудности вполне преодолимы, ведь в повсеместно распространенных IBM-компьютерах конфигурации *86 имеются специально выделяемые ячейки памяти, скорость изменения которых зависит от таймера (тактовая частота влияния на них не оказывает). Значит, можно «вытаскивать» единицу времени, измеряя изменение этих ячеек!
Время, за которое ячейка памяти в сегменте 40h со смещением 6Ch изменяет свое состояние на единицу, постоянно и равно примерно 50 мс. То есть значение байта растет от 0 до 255 каждые 50 мс, после чего все вновь повторяется. Выходит, первооснова для вычисления «попугаев» в компьютере есть. Нужна лишь соответствующая программа.
Ее удалось написать достаточно компактно на «Бейсике», который изучается в общеобразовательных школах. В 10-й строке этой мини-программы определяется сегмент памяти, очищается экран и обнуляется переменная m1, используемая для определения усредненного количества «попугаев». В строке 40 выбирается величина цикла, которая может быть любой, но не слишком маленькой, чтобы не было мельканий на экране. В строках 50—60 происходит синхронизация вычислительного процесса с работой таймера.
Вычислительный процесс зацикливается в 60-й строке. Причем до очередного изменения таймера. Переход же к следующим строкам программы происходит в момент изменения таймера (то есть начало интервала фиксируется в 50 мс). В 70-й строке записывается значение ячейки, а в 80-й происходит накопление данных, которые впоследствии и будут считаться «попугаями», определяемыми в области dn за 50-мс интервал, пока ячейка памяти опять не изменится.
В строках от 100 до 140 (включительно!) все подсчитанное количество единиц в переменной dn за интервал, равный 50 мс, называется «попугаями» и выдается на экран. Кроме того, осуществляется и выдача усредненного параметра благодаря использованию переменной m1. Ну а в строках 160—170 проверяется: не нажата ли клавиша пробела, чтобы остановить программу или начать работу заново.
При решении данной проблемы выявляются два основных препятствия. Первое обуславливается самим языком программирования. «Бейсик» — транслятор. Работа с ним идет медленно, поэтому и количественные показатели получаются невысокими. При оценке компьютеров типа Intel-80386 (а такие, судя по всему, еще долго будут у нас эксплуатироваться), выражающейся в 200— 300 «попугаях», с этим можно еще мириться.
5 REM Бейсик для IBM PC — qbasic.exe
10 DEF SEG = &H40: CLS : m1 = 0:
30 PRINT » Сколько ‘попугаев’ в компьютере ? «
40 FOR I = 1 ТО 10000
50 dn = 0: ds = PEEK(&H6C)
60 IF ds = PEEK(&H6C) THEN GOTO 60
70 ds = PEEK(&H6C):
80 dn = dn + 1: IF ds = PEEK(&H6C) THEN GOTO 80
100 LOCATE 3, 1: m1 = m1 + dn
120 PRINT » ‘Попугаев’ в компьютере = dn
140 PRINT » среднее количество измеренных = «; m1 / I
160 IF INKEY$ = CHR$(&H20) THEN END
170 NEXT I: GOTO 10
Программа для оценки вычислительной мощности компьютеров в «попугаях» (язык «Бейсик»)
Правда, названное препятствие позволяет лучше раскрыть возможности языков компилирующего типа. В частности, узнать, что «попугаев» получается значительно больше, если программирование ведется на «Паскале». Кроме того, владея несколькими языками программирования, легче их сравнивать по быстродействию исполняемых кодов. И любой пользователь сможет убедиться, что «Си++» не намного уступает «Паскалю» или даже «Ассемблеру», а незаслуженно умаляемый порой «Форт» идет со всеми если не впереди, то, во всяком случае, на равных.
Второе препятствие — прерывания многозадачного Windows. На платформе многозадачности данная программа работает с очень широким интервалом «попугаев». Оно и понятно: Windows имитирует области памяти DOSа и как бы останавливает процесс оценки компьютера на время работы других программ.
Однако это для учебного процесса тоже плюс. В Windows есть так называемая эмуляции DOSа, воспользовавшись которой, легко увидеть, что в однозадачном режиме «попугаи» в компьютере постоянны. А если исполнять много программ, то можно по количеству «попугаев» выявить, какой из процессов или программ выполняется быстрее.
«Попугайная» оценка приемлема и при анализе резидентных программ. Поскольку те работают мало, но достаточно эффективно, можно предложить программу, которая способна оперативно анализировать время, остающееся от названных 50 мс. В результате появится возможность косвенно отслеживать активность «резидентов» и набирать их статистику. А в случаях сильных изменений последней поднимать тревогу и своевременно принимать меры по наведению порядка в программном хозяйстве.
…Когда дочь снова спросила, сколько же «попугаев» в нашем компьютере, то я уже не оплошал. Не вникая в подробности, сказал о написанной мною программе, которую тут же ввел в компьютер, и — пожалуйста: результат на экране! Гордая тем, что наша домашняя ЭВМ не из «хилых», дочка унесла дискету с собой, чтобы выяснить, какой же из школьных компьютеров самый сильный. А потом по-взрослому сообщила:
— Знаешь, учебная база в школе не из лучших. Лидирует там «Пентиум», у которого всего лишь 595 тысяч «попугаев»!
А. ШАБРОНОВ, г. Новосибирск