Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Прочее

Скорость в попугаях

Запуск древней программы на Паскале окончился «делением на ноль». Все божились, что эту программу никто не трогал и не перетранслировал уже лет десять. Да и дата EXE-файла это подтверждала. Какое там еще может быть деление на ноль?

            Пришлось вооружиться древним же отладчиком и проанализировать действия программы. Выяснилось две вещи.

  • Первое. Никакого деления на ноль не было и нет. Срабатывает совсем другое исключение: «непредставимое частное», т.е. при делении значения в паре регистров DX:AX на значение в CX получающееся частное не помещается в 16 разрядов. Совершенно непонятно, почему разработчики x86 не ввели другой номер исключений для такой ситуации, а совместили его с «настоящим» делением на ноль. Это просто вводит в заблуждение, как в данном случае.
  • Второе. Делением определялась скорость компьютера в самом начале (в прологе) программы, еще до начала выполнения собственно операторов программы. Т.е. программа была вообще не причем. Виновата системная библиотека. А скорость определялась экзотическим способом. В период времени между системными «тиками » (не путать с тактами процессора), выполнялась эталонная последовательность команд и подсчитывалось число раз, которая эта последовательность успела выполниться. Затем полученное число раз делилось на число раз, показанное первой IBM-PC/XT. Таким образом, скорость считалась «в персоналках», т.е. практически действительно «в попугаях».
            А закон Мура все эти годы продолжал действовать. И каждые два года скорость персоналок удваивалась. И, наконец, программу, содержащую определение никому не нужной скорости «в XT» запустили всего лишь на ноутбуке ThinkPad A31p. Но его скорость уже превысила скорость XT более чем в 65535 раз, и совершенно бесполезное определение скорости не позволило выполнить старую программу. Пришлось «выкусывать» прямо в EXE-файле это глупое деление.

            Кстати, из любопытства я на "калькуляторе" разделил два эти числа и получил ускорение относительно XT в 118351 раз. Т.е. для обычных, доступных всем компьютеров, такое ускорение было достигнуто примерно с 1981 по 2002 год. Неплохо.

            А скорость «в попугаях» лучше все-таки не мерить.

Автор: Д.Ю.Караваев.

Последняя правка: 2018-10-12    12:26

Оцените

Написать отзыв

Написать автору можно на электронную почту mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Каким должен быть язык программирования?

Анализ и критика

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Двадцать тысяч строк кода, которые потрясут мир?

Почему владение/заимствование в Rust такое сложное?

Масштабируемые архитектуры программ

Почему Хаскелл так мало используется в отрасли?

Бесплатный софт в мышеловке

Исповедь правового нигилиста

Русской операционной системой должна стать ReactOS

Почему обречён язык Форт

Программирование без программистов — это медицина без врачей

Электроника без электронщиков

Статьи Дмитрия Караваева

●  Идеальный транслятор

●  К вопросу о совершенствовании языка программирования

●  О реализации метода оптимизации при компиляции

●  О реализации метода распределения регистров при компиляции

●  О распределении памяти при выполнении теста Кнута

●  Опыты со стеком или «чемпионат по выполнению теста Кнута»

●  Сколько проходов должно быть у транслятора?

●  Чтение лексем

●  Экстракоды при синтезе программ

●  Об исключенных командах или за что «списали» инструкцию INTO?

●  Типы в инженерных задачах

●  Непрерывное компилирование

●  Об одной реализации специализированных операторов ввода-вывода

●  О русском языке в программировании

●  Формула расчета точности для умножения

●  Права доступа к переменным

●  Скорость в попугаях

●  Крах операции «Инкогнито»

●  Предопределенный результат

Компьютерный юмор

Прочее

Последние комментарии

2018/11/12 14:18 ••• Попов Михаил
✎ Программирование без программистов — это медицина без врачей

2018/11/11 23:39 ••• Автор сайта
✎ Изменение длины объекта в стеке во время исполнения

2018/11/11 14:29 ••• Александр Коновалов aka Маздайщик
✎ Помеченные комментарии

2018/11/11 14:01 ••• Александр Коновалов aka Маздайщик
✎ Нерабочий код

2018/11/11 13:39 ••• Александр Коновалов aka Маздайщик
✎ О русском языке в программировании

2018/11/11 12:57 ••• Александр Коновалов aka Маздайщик
✎ Об одной реализации специализированных операторов ввода-вывода

2018/11/03 22:43 ••• rst256
✎ Непрерывное компилирование

2018/11/02 23:23 ••• Неслучайный читатель
✎ Сколько проходов должно быть у транслятора?

2018/11/01 19:10 ••• Автор сайта
✎ Об исключенных командах или за что «списали» инструкцию INTO?

2018/10/31 06:01 ••• kt
✎ Чтение лексем

2018/10/30 18:30 ••• Александр Коновалов aka Маздайщик
✎ Экстракоды при синтезе программ

2018/10/29 13:17 ••• Автор сайта
✎ Каким должен быть язык программирования?