Skip to content

Рефал-5λ, версия 3.0.1

Compare
Choose a tag to compare
@Mazdaywik Mazdaywik released this 06 May 07:20
· 581 commits to master since this release

Документация (#149)

Оптимизации (#194)

  • Незначительно оптимизирована библиотека Library: __Step-Drop для одношаговых обёрток, функции First, Last и Lenw переписаны на Си++.

  • Оптимизировано распределение памяти: время копирования повторных переменных ускорено примерно в 1,5–2 раза, линейное время построения результата — на 8 %.

  • Общее ускорение компилятора: использование более быстрой библиотеки, оптимизация в лексическом анализаторе. Кумулятивное ускорение в обычном режиме (без оптимизаций) составило 16 %.

    Был выполнен стандартный бенчмарк на коммите, помеченном как 3.0 и на коммите-предке для 3.0.1.
    Выполнялось 13 проходов с ключами RLC_FLAGS=-OC, RLMAKE_FLAGS=, BENCH_FLAGS=.
    Компьютер: Intel® Core™ i5-2430M 2,40 ГГц, ОЗУ 8 Гбайт.
    Операционная система: Windows 10 x64 1909.
    Компилятор C++: Borland C++ Compiler 5.5.1 (2000 года).
    Процент вычислялся для метрики Total program time,

    • до оптимизации: медиана 27,218 с, доверительный интервал 27,188…27,250 с,
    • после оптимизации: медиана 22,875 с, доверительный интервал 22,750…23,094 с.

    Прирост 4,3 с или 16,0 % является достоверным.

    Замеры:

  • Ускорение работы компилятора в некоторых режимах:

    • незначительное в режиме -OD: 5,5 %;
    • существенное в режиме -OR: примерно в 3 раза;
    • существенное в режиме --log=filename.log: примерно в 2 раза.

Флаги оптимизации

Добавлены пустые флаги: -OG (глобальная оптимизация) как задел на будущее, экспериментальные -Ox, -Oy, -Oz, которые нужны для удобства отладки (их можно поместить глобально в RLMAKE_FLAGS и вызывать makeself-s.*).

Улучшения отчёта профилировщика функций (#194)

  • Вывод единиц измерения времени для функций (ms).
  • Подсчёт относительной продолжительности шага функции (по отношению к продолжительности среднего шага). Величина много больше единицы означает, что функция работает медленно — содержит открытые, повторные или копируемые переменные, либо это функция ввода-вывода.
  • Для функций учитываются их области видимости — одноимённые локальные функции считаются раздельно. Теперь если в отчёте видно, что, скажем Map@3 выполняется долго, можно понять — из какой она единицы трансляции.

Исправлены ошибки

  • Не выполнялась прогонка и встраивание в аргументах косвенных вызовов функций (#277).
  • Мелкая ошибка в режиме -OS при специализации функций с условиями.
  • Мелкая ошибка анализе флагов оптимизации в командной строке.

Для установки на Windows скачайте и запустите файл setup-refal-5-lambda-3.0.1.exe.

Для установки на Linux и macOS выполните в терминале следующую команду:

curl -L https://bmstu-iu9.github.io/refal-5-lambda/setup.bash | bash

При этом на компьютере должен быть установлен компилятор GCC C++ или Clang.

Либо программу можно собрать из исходников (архивы bootstrap-refal-5-lambda-3.0.1.zip или bootstrap-refal-5-lambda-3.0.1.tar.gz)