Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Two-threads bidirectional A* #13789

Draft
wants to merge 14 commits into
base: master
Choose a base branch
from

Conversation

bykoianko
Copy link
Contributor

@bykoianko bykoianko commented Oct 7, 2020

Данный PR реализует прототип алгоритма A*, который работает в 2 потока

Детали реализации:

  1. Алгоритм работает в 2 потока прямая и обратная волна в своих потоках, а как только волны сходятся (первое касание) алгоритм начинает работать в одни поток, как и раньше, чтоб не ставить синхронизацию на большое кол-во структур данных;
  2. Очередь защищена мютексом. Вроде на ней особого расхода не было. Для получения входящих и исходящих ребер в классы графа внесены существенные изменения. Сделаны отдельные кеши для входящих и исходящих ребер, чтоб уменьшить объемы синхронизируемых данных;

Результаты тестов. Три прокладки подряд, с одними и теми же стартами и финишами:
MacOS:
Виден ощутимый прирост скорости. Было 17 сек стало 10 сек.
Москва - Тверь (200920) MacOS
55.750441, 37.617514; 57.036356, 34.965072 (bicycle)
В 2 потока ms
12342, 10769, 10678

В 1 поток ms
19641, 17767, 16435

Москва - Рязань (200920)
55.750441, 37.617514; 54.806649, 39.861445 (pedestrian)

В 2 потока
12682ms, 9309ms, 9156ms
10.7602 s, 9.31902 s, 9.34944 s

В 1 поток ms
15394, 14530, 14560
17.7066 s, 14.7042 s, 14.5302 s

Android s10e
Стало медленнее. Было 4 секунды, стало 5.
(55.796456, 37.536991; 55.592107, 37.673773) 200822
2 потока. Андроид.
4.88698 s
4.90258 s
4.80515 s

В 1 поток
4.11945 s
3.92234 s
3.97615 s

iPhone SE
Стало медленнее. Было 4 секунды, стало 5.
(55.860735, 37.436494; 55.621144, 37.743771) 200822
2 потока.
29.8465 s
27.3 s
27.8736 s
27.7563 s

В 1 поток
23.8147 s
21.8057 s
21.4761 s

Сейчас пробую убрать синхронизацию с обращения к графу дорог. На iPhone SE вместо 3 секунд получается проложить за 2.

Время прокладки маршрута можно определить при помощи поиска по:
~ScopedTimerWithLog() ***FindPath*** time:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant