2015-01-22 2 views
6

Настройка: Предположим, у меня есть достаточно подробное программное обеспечение (в июле), в котором задействовано взаимодействие нескольких модулей. Я чувствую, что он работает медленнее, чем нужно. Обычно first culprit to check for is type unstable functions, то есть функции, в которых компилятор не может заранее определить, каким будет тип вывода.Как обнаружить нестабильные функции типа в Julia

Вопрос: Как я могу обнаружить эти неустойчивые функции типа?

Что я сейчас делаю: Я использую инструменты для профилирования, например. пакет ProfileView.jl @tholy, для обнаружения узких мест, в предположении, что здесь появятся неустойчивые функции (из-за их чрезмерного времени выполнения). Но что было бы очень приятно - это какой-то инструмент отладки, который после запуска подпрограммы выплевывает список функций, где компилятор не смог определить тип вывода раньше времени. Это возможно?

ответ

6

Вы можете попробовать TypeCheck.jl на битах, которые профайлер говорит медленно.

Julia 0.4 имеет @code_warntype.

+0

Huh. Как-то я совершенно не знал о пакете TypeCheck и не обнаружил его в моем поиске. Это именно то, что я хочу :-) Большое спасибо! –

4

В дополнение к отличным предложениям IainDunning, julia с --track-allocation=user и анализируя результаты с помощью analyze_malloc пакета Coverage, это хороший способ быстро получить обзор высокого уровня. Принцип заключается в том, что нестабильность типа запускает распределение памяти, поэтому поиск строк кода с неожиданными большими распределениями - это хороший способ найти наиболее вопиющие экземпляры нестабильности типа.

Дополнительную информацию о track-allocationin the manual и еще более подробно об оценке эффективности described.

+0

Очень интересно. Большое спасибо. –

Смежные вопросы