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

Проблемы, замеченные на случайных тестах #305

Closed
Mazdaywik opened this issue Jun 29, 2020 · 17 comments · Fixed by #328
Closed

Проблемы, замеченные на случайных тестах #305

Mazdaywik opened this issue Jun 29, 2020 · 17 comments · Fixed by #328
Assignees
Labels

Comments

@Mazdaywik
Copy link
Member

Mazdaywik commented Jun 29, 2020

При запуске компилятора на случайных тестах (autotests/positive-random-test) обнаружились две проблемы.

Во-первых, нашёлся тест, на котором компилятор падает с нехваткой памяти:

Во-вторых, нашёлся тест, на котором компилятор работает неадекватно долго:

Почему неадекватно? Потому что размер файла 8385 байт, а работает он 98 секунд.

Уточнение. Запуск обоих тестов имеет вид:

rlc-core --prelude=prelude-for-test.refi "test-5_29.06.2020_20-32-41,54.ref" -C -OA
rlc-core --prelude=prelude-for-test.refi "test-9_29.06.2020_20-32-41,54.ref" -C -OA
@Mazdaywik Mazdaywik added the bug label Jun 29, 2020
@Mazdaywik Mazdaywik self-assigned this Jun 29, 2020
@Mazdaywik
Copy link
Member Author

Уточнение. Первый тест прошёл с лимитом на память 100 000 000 узлов (по факту потребовалось 60 338 000) и ему потребовалось 1132.57800 секунд, т.е. примерно 20 минут.

@Mazdaywik

This comment has been minimized.

@Mazdaywik

This comment has been minimized.

@Mazdaywik

This comment has been minimized.

@Mazdaywik

This comment has been minimized.

Mazdaywik added a commit that referenced this issue Jul 2, 2020
@Mazdaywik
Copy link
Member Author

Скорость работы и объём памяти можно считать приемлемыми, автотесты проходят.

Дальнейшее их снижение возможно только при полном переписывании алгоритма, что в эту задачу не входит.

Задачу закрываю.

@Mazdaywik

This comment has been minimized.

@Mazdaywik

This comment has been minimized.

@Mazdaywik

This comment has been minimized.

Mazdaywik added a commit that referenced this issue Jul 5, 2020
Мне не хотелось переписывать код целиком, хотелось сохранить структуру
оригинальных алгоритмов. Но пришлось. Исходная реализация была громоздкой
и трудной для оптимизации. Написал более компактную, быструю и лаконичную.
@Mazdaywik

This comment has been minimized.

@Mazdaywik
Copy link
Member Author

Коммит 9acbd38 внёс ошибку, поэтому предыдущему комментарию верить нельзя.

@Mazdaywik
Copy link
Member Author

После исправления на этот тест требуется 7 552 118 шагов, тест выполнился за 11 секунд. Погрешность измерений здесь около секунды, так что сравнивать с ошибочным комментарием не стоит.

@Mazdaywik

This comment has been minimized.

@Mazdaywik

This comment has been minimized.

@Mazdaywik

This comment has been minimized.

Mazdaywik added a commit that referenced this issue Jul 15, 2020
Фунция OptTree-AutoMarkup-ExtractBasisVertexes выполняет обход графа
с поиском обратных рёбер. Алгоритм работает вроде правильно, проблема
не в обходе.

Проблема была в том, что корневое множество определялось как множество
функций, которые никто не вызывает. Если в графе таких функций нет
(т.е. корнями графа конденсации является система взаимно-рекурсивных функций),
то множество базисных вершин получается пустым и все функции помечаются
пригодными для прогонки.

Исправление заключалось в том, что теперь корневое множество подаётся извне
как множество entry-функций, функций инициализации и финализации и функций,
вызываемых по ссылке.

Автотест opt-tree-markup4-cycle.ref не был придуман, он был получен
в результате упрощения случайного теста test-7_14.07.2020_20-08-24,19.ref.
Случайный тест теперь тоже проходит.
@Mazdaywik
Copy link
Member Author

Проблема в комментарии #305 (comment) уже не воспроизводится — из-за отсутствия внешнего цикла (#320) этот случайный тест стал компилироваться быстро. Но тормоза в функции OptSentence-Aux воспроизводились при самоприменении (бенчмарк см. в #278 (comment)). Так что предыдущий коммит устранил эти тормоза.

@Mazdaywik
Copy link
Member Author

Ошибки на случайных тестах больше не выявляются.

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