straktor: benders (Default)
[personal profile] straktor
Решил пощупать, как оно там в Расте со сложными структурами данных, типа ориентированного графа.
Закодил топологическую сортировку, тупой "в лоб" вариант, с тупыми "в лоб" векторами и хэшмапами; борров чекера порешал клонами. Нашёл набор графов, выбрал в 50К, 300К и 1.7М рёбер.

Запускаю, 50К за 2 минуты, 300К будет явно часы. Много или мало? Нарисовал рядом тривиальный перевод на джавке. Быстрее в 6 раз. Мал-мало оптимизнул с хешкодом-равно-финалы-параллель, валит в 11 раз быстрее. Ну, может у меня клешни с растом? Сделал без клона стрингов, индексами -- стало побыстрее. На 1.7М запускаю, джавка 1.5 часа, раст в 20 раз медленнее. ЧТО? КАК?
Более того, само чтение 22 Мб на явке 200 мс, в расте 1.8 с. Явка при этом в уникод переводит.

В стековерфлоу коллегам советуют: а пробаните -O оптимизацию. Пробую. Ёжики! Чтение 180мс, сортировка 1.7М за 47 минут. Что ж ты, падла, фуфло сразу гнала?

Из неожиданных находок. Оказывается, полная итерация по хэшмапу в 1.7М + удаление из него 10 элементов МЕДЛЕННЕЕ, чем то же по списку-массиву. Удаление из массива, Карл!
Ещё находка: удаление из массива тупо 10 раз по 1 штуке (копирует в среднем половину) быстрее, чем removeAll(hashSet(list10)). Никогда бы не подумал.

Profile

straktor: benders (Default)
straktor

May 2025

S M T W T F S
    123
45678910
1112131415 16 17
18192021222324
2526272829 3031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 12th, 2025 07:43 am
Powered by Dreamwidth Studios