Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Рефакторинг и оптимизация OptTree-Drive.ref
• Рефакторинг — переименование функции. • Рефакторинг — не используется замыкание для ускорения копирования. Тело функции представлено как значение, а не как замыкание, возвращающее значение. • Оптимизация — были найдены места, где значение (а) копируется, (б) сравнивается на равенство. И это малозаметные повторные переменные в присваиваниях. И эта оптимизация дала неплохие результаты. • Общее время Рефала достоверно снизилось с 64,811 с [64,628…65,168] до 54,201 с [53,894…55,031] — 16,3 %. • Время копирования контекста снизилось с 2,276 с [2,126…2,357] до 2,038 с [1,977…2,146], условно достоверно на 10 %. • Время сопоставления с повторными t-переменными вне циклов по открытым e-переменным достоверно упало с 6,180 с [6,053…6,276] почти до нуля! Из 9 замеров ненулевыми оказались только 5, четыре из них имеют значение 0,015 с, что соответствует кванту измерения времени. • Время копирования t- и e-переменных упало с 20,482 с [20,282…20,531] до 15,234 с [15,002…15,368] — достоверное ускорение на 25,6 %. Время сопоставления с повторными переменными упало на ≈6,180 с, копирования переменных — на 5,248 с. Поскольку оптимизация касается одних и тех же переменных, получается, что сопоставление с повторными переменными в актуальной реализации медленнее копирования переменных той же длины примерно на ≈15 %. Однако, время по порядку величины сравнимое. Оптимизации построения результатных выражений (в том числе, распределения памяти) посвящены задачи #196 и #247. В первой, при недостатке памяти вызывается longjmp() вместо кода возврата, во второй находятся (пока) размышления о сборке мусора. Цель обоих — ускорить выделение памяти из списка свободных узлов. Вспомнил о них, чтобы коммит привязался к заявке и можно было приложить замеры времени. Они будут приложены в #196.
- Loading branch information