Сколько «попугаев» в эвм?
в один раз дочь-школьница задала вопрос, хороший ли у нас компьютер. Мне на таковой вопрос надеялось ответить лишь утвердительно, что и было сделано. Но так как детей 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 тысяч «попугаев»!
А. ШАБРОНОВ, г. Новосибирск