Perl 5.24 стал быстрее

Темы:

Одним из улучшений в Perl 5.24 стало ускорение арифметических операций. Начиная с Perl 5.8.0, когда появилась поддержка 64-битных целых, скорость арифметических операций снизилась из-за необходимости проверки различных граничных условий. Теперь же проверяется общий случай, что снимает необходимость проверки всех частных случаев, что в целом оптимизирует производительность.

Синан Унур в своей статье продемонстрировал, что эта оптимизация даёт выигрыш в 30% по сравнению с Perl 5.20.2 в бенчмарке nbody, который использует большое число арифметических операций. Благодаря этому Perl 5.24 обогнал Python 3 в данном тесте.

Комментарии

 

Полезные трюки с микрооптимизацией

Темы:

В рассылке perl5-porters был задан вопрос, почему две операции сильно отличаются по скорости (в пользу do):

do { ; }
{ ; }

Zefram указал на то, что пустой блок рассматривается как цикл, который выполняется один раз, и для него формируется фрейм-контекст с поддержкой динамических операций вроде next. В то время как для do устанавливается только область видимости, что гораздо быстрее.

Кроме этого было замечено, что операция ; это отдельная операция, которая устанавливает номер строки. В противовес этому , не имеет подобного оверхеда. Например:

$x = 1; $y = 2; print "$x $y";
$x = 1, $y = 2, print "$x $y";

Оба выражения выполняют одно и то же, но вторая запись будет работать быстрее.

Эта информация сразу вдохновила Питера Рэбиттсона использовать этот простой трюк на практике. Он продемонстрировал коммит, который на 15% увеличивает производительность DBIx::Class просто заменив все ; на , в генерируемом коде для строкового eval. Этот прирост становится заметен на резалтсетах с ≥1000 рядов.

Комментарии

 

Улучшения в производительности Hash::Ordered

Темы:

Hash::Ordered — это модуль для создания упорядоченных хешей, ключи в которых хранятся в заданном порядке. Поскольку модуль написан на чистом Perl, а упорядоченные хеши --- это объекты, операции над которыми производятся с помощью методов, то подобный хеш работает медленнее, чем обычный хеш. Такова цена сохранения упорядоченности хеша.

Как сообщает Дэвид Голден в новой версии 0.009 сделана оптимизация, которая в некоторых случаях значительно ускоряет работу с упорядоченными хешами. Было проведено сравнение производительности между версиями Hash::Ordered 0.002 и 0.009. Для наглядности представлен график сравнения:

Бенчмарк Hash::Ordered

Виден рост по многим тестам, особенно выросла производительность при удалении в хеше с большим числом элементов. Практически не изменилась скорость замены элементов, несколько снизилась скорость добавления (за счёт проверки, что ключ — это строка, а не ссылка).

Комментарии