Ответ на пост «А когда то и 32 Кбайта считалось роскошью)»1
Прочитал пост и вспомнил вот такую историю про Фортран — и про времена, когда деревья были выше, трава зеленее, а программисты всерьёз заботились об оптимизациях...
***
Как-то раз в бородатом детстве в 1993-ом кажется году мы решили писать компьютерную игрушку и для этого решили сравнить производительность трёх языков, на которых умели писать. Borland C++ 4.0, Turbo Pascal 7.0 и Fortran 77. Тестировались две нужные нам задачи — Умножение вектора на матрицу и отрисовывание треугольника стандартными инструментами в режиме EGA.
Довольно быстро выяснилось, что рисование у C и Pascal шло с одинаковой скоростью, потому как использовало одну и ту же библиотеку egavga.bgi, Расчёты на С были примерно вдвое быстрее, за счёт разнообразных проверок на переполнение, которые в Паскале по умолчанию были включены, а в C по умолчанию выключены. Но это можно было исправить директивами компилятора. А вот с фортраном началось самое интересное:
Первый замер был про умножение на матрицу. Когда фортран показал результат в 10000 раз быстрее у нас закралось подозрение. Сначала мы пытались найти ошибку, но потом сдались. Дизасемблирование показало, что отимизатор смекнул, что результаты вычислений внутри цикла не используются и посчитал умножения и суммирования только один раз, для значения переменной цикла в последнем цикле.
Тогда вместо того чтобы внутри цикла делать просто умножения и сложения мы заставили его ещё и суммировать переменную цикла. Когда фортран показал результаты в 10000 раз быстрее, мы сразу полезли в дизасемблер и к величайшему нашему удивлению обнаружили, что фортран суммирование переменной цикла в цикле успешно заменил на формулу подсчёта арифметической прогрессии. Сказать, что мы были в шоке — ничего не сказать.
Следующие пол часа ушли на подбор такой формулы для замеров, в которой оптимизатор фортрана ничего не смог бы упростить. Задачка оказалось нетривиальной, потому что на глазах у удивлённых школьников фортран выносил общий множитель за скобку, заранее умножал друг на друга константы и делал ещё несколько не менее интеллектуальных операций потрясая наше воображение. Когда мы таки смогли его обмануть выяснилось, что по скорости он от C по скорости не отличается.
Когда мы заставили фортран нарисовать закрашенный треугольник 256 цветами, и он показал результаты ровно в 16 раз лучше egavga.bgi мы уже даже не удивились. В EGA было всего 16 цветов. Рисование цветом 17 было то же самое, что рисование цветом 1. Уж не знаю как Fortran77 дозрел до этой идеи, но он треугольник перерисовал только 16 раз разными цветами, и на этом покинул цикл. Пришлось каждый следующий треугольник рисовать сдвигая одну из вершин на 1 пиксель. Результаты оказались примерно такие же как у конкурентов.
В общем по результатам всей этой истории у меня осталось два выводы:
1) Нет большой разницы на каком из нормальных компиляторов писать, если не лениться.
2) Оптимизатор в фортране написан сошедшими на землю богами.
***
Источник: комментарий на Хабрахабре от 2015 года (https://m.habr.com/en/post/261201/comments/#comment_8480183). История, конечно, — «не баян, а классика», но на Пикабу такого поста не было, я проверил :)
Программа StarCalc 5.73
Программа StarCalc 5.73
StarCalc - это быстрая астрономическая программа-планетарий для Windows 9x/ME/NT/2000/XP, которая позволяет получать изображения звездного неба для любого момента времени и любой точки земного шара как для всей небесной полусферы целиком, так и для её увеличенной части. Картинку можно увеличивать, уменьшать, поворачивать, распечатывать на принтере. Кроме того, StarCalc имеет множество других функции по расчету и изображению небесных объектов.
Расширяемость: программа основана на едином "Plugin - интерфейсе к каталогам и группам объектов", что позволяет добавлять к StarCalc новые модули, выполненные в виде плагинов, которые расширяют возможности программы по поддержке астрономических каталогов и во многом другом.
Высокое быстродействие: быстрые алгоритмы позволяют за доли секунды рассчитывать изображение неба даже на весьма медленных компьютерах.
Удобство в использовании: StarCalc имеет простой интерфейс, большинство операций выполняется с помощью мыши. Программа построена по принципу WYSIWYG, т.е. полученное изображение можно распечатать на принтере в таком же виде, как оно выглядит на экране монитора.
Мне хочется поблагодарить всех кто помогал мне в создании этой программы - Господа Бога за предметную область и идею, фирму Microsoft за операционную систему, фирму Borland за компилятор, друзей и знакомых за сочувствие, а особенно всех, кто посылал мне письма - без вашего участия новая версия StarCalc вряд ли бы появилась на свет! Заранее извините за возможные огрехи и ошибки в программе. Мне будет очень приятно если вы напишите мне письмо с Вашим отзывом о StarCalc.
Всего наилучшего,
Александр Завалишин.
e-mail: zalex@relex.ru
Последние изменения и дополнения
03.07.2006 StarCalc версии 5.73 с поддержкой управления телескопами через ASCOM:
23.08.2003 Добавлен новый плагин, предназначенный для подключения звездного каталога USNO-A2. Прямая ссылка на файл здесь.
09.05.2003 Важное исправление ошибки. Изображения Солнца и Луны показывались немного неправильно, в результате чего при наблюдении прохождений Меркурия и Венеры по диску Солнца получалась серьезная разница во времени по сравнению с реальным событием. Исправленная программа выложена как новая версия StarCalc (5.72) здесь: sc572ru.zip. Также можно скачать исправленный исполняемый файл программы отдельно: sc572ruexe.zip.
Также исправлены плагины "Солнечные затмения" и "Лунные затмения". (Исправления касаются не вычислений, а исключительно процедур изображения объектов.) Если вы используете эти плагины, не забудьте скачать обновленные версии!
29.11.2002 Выложена слегка обновленная версия StarCalc (5.71). Это не является полноценным релизом новой версии, главное в ней - исправление найденных ошибок (особенно стоит обратить внимание на эту версию пользователям Windows ME).
13.10.2002 Новая версия плагина "Астероиды и кометы" (2.3). Прямая ссылка на файл: orbits.zip.
Кроме того, обновлен файл базы данных для астероидов и комет.
03.09.2002 Новая версия плагина "NGC 2000" (2.1). Прямая ссылка на файл здесь.
03.09.2002 На русскую страничку с файлами вернулась давно "потерявшаяся" ссылка на SDK для StarCalc
07.04.2002 Новый плагин "Млечный путь". Добро пожаловать в "файлы", раздел "Прочие плагины".
04.02.2002 Исправлен небольшой глюк в плагинах "Лунные затмения" и "Линия эклиптики". Новые версии выложены на странице файлы.
25.12.2001 Выложена новая версия программы: StarCalc 5.7!
О том что нового появилось в этой версии вы можете прочитать здесь.
25.12.2001 Изменен дизайн страницы