Скорость в попугаях
Запуск древней программы на Паскале окончился «делением на ноль». Все божились, что эту программу никто не трогал и не перетранслировал уже лет десять. Да и дата EXE-файла это подтверждала. Какое там ещё может быть деление на ноль?
Пришлось вооружиться древним же отладчиком и проанализировать действия программы. Выяснилось две вещи.
-
Первое. Никакого деления на ноль не было и нет. Срабатывает совсем другое исключение: «непредставимое частное», т.е. при делении значения в паре регистров DX:AX на значение в CX получающееся частное не помещается в 16 разрядов. Совершенно непонятно, почему разработчики x86 не ввели другой номер исключений для такой ситуации, а совместили его с «настоящим» делением на ноль. Это просто вводит в заблуждение, как в данном случае.
-
Второе. Делением определялась скорость компьютера в самом начале (в прологе) программы, ещё до начала выполнения собственно операторов программы. Т.е. программа была вообще не причем. Виновата системная библиотека. А скорость определялась экзотическим способом. В период времени между системными «тиками » (не путать с тактами процессора), выполнялась эталонная последовательность команд и подсчитывалось число раз, которая эта последовательность успела выполниться. Затем полученное число раз делилось на число раз, показанное первой IBM-PC/XT. Таким образом, скорость считалась «в персоналках», т.е. практически действительно «в попугаях».
А закон Мура все эти годы продолжал действовать. И каждые два года скорость персоналок удваивалась. И, наконец, программу, содержащую определение никому не нужной скорости «в XT» запустили всего лишь на ноутбуке ThinkPad A31p. Но его скорость уже превысила скорость XT более чем в 65535 раз, и совершенно бесполезное определение скорости не позволило выполнить старую программу. Пришлось «выкусывать» прямо в EXE-файле это глупое деление.
Кстати, из любопытства я на "калькуляторе" разделил два эти числа и получил ускорение относительно XT в 118351 раз. Т.е. для обычных, доступных всем компьютеров, такое ускорение было достигнуто примерно с 1981 по 2002 год. Неплохо.
А скорость «в попугаях» лучше все-таки не мерить.
Автор: Д.Ю.Караваев.
Опубликовано: 2018.08.26, последняя правка: 2019.01.28 20:46
Добавить свой отзыв
Написать автору можно на электронную почту mail(аt)compiler.su
|