Плюсы / минусы статического и динамического приборостроения
Существует много статических и динамических инструментов. Soot - это инструмент статического инструментария для байт-кода Java. Pin и Valgrind являются динамическими инструментальными средствами для двоичных файлов.
Каковы плюсы и минусы статических и динамических инструментов? Я думаю, что статические инструментальные средства лучше с точки зрения производительности во время выполнения, тогда как динамические инструменты более мощные. Пожалуйста, сравните их с точки зрения способности и производительности.
Кроме того, чем отличаются инструментальные средства от написания LLVM pass?
2 ответа
Я предполагаю, что нужно найти код, который занимает значительное время и который вы могли бы оптимизировать, чтобы сэкономить это время. Это другая цель, отличная от времени.
Я скептически отношусь к статическим анализаторам, потому что все зависит от микса входных данных.
Динамический инструментарий пытается измерить свойства функций, такие как: собственное время и общее время, абсолютное, среднее и процентное соотношение. Также учитывается количество вызовов и роль каждой подпрограммы в графе вызовов.
Динамический инструментарий (a la gprof) был стандартом де-факто на протяжении десятилетий, но это далеко не последнее слово. Во-первых, важно понимать, что в большинстве статистических данных, которые он вам дает, не хватает смысла с точки зрения ваших первоначальных потребностей.
В наши дни (ИМХО) вам нужен профилировщик выборки, который производит выборку стека вызовов, а не только счетчик программ. Это должно сэмплироваться по времени настенных часов, а не только по времени процессора. Образцы не должны быть взяты на высокой частоте. Он должен подавлять выборку, когда приложение ожидает ввода данных пользователем. Он должен давать вам информацию на уровне строки или инструкции, а не только на уровне функций. Самая важная статистика, которую она должна предоставить для строки кода, - это процент выборок, в которых она содержится, поскольку это наиболее прямое измерение времени, которое можно сохранить, если оптимизировать эту строку.
Это могут сделать несколько профилировщиков, в частности Oprofile и RotateRight/Zoom.
Плюсы статического приборостроения в том, что анализ не зависит от входных данных. Анализ происходит по оригинальному коду и включает все пути к коду. Полный охват. Этот тип инструментов обычно переписывает двоичный файл, который готов к выполнению без необходимости во время выполнения другого процесса. Это также означает, что код будет работать быстро, с единственными накладными расходами, приходящимися на введенный код. Недостатком статического инструментария является недостаточно подробный анализ, который вызван отсутствием информации во время выполнения, и из-за этого иногда очень трудно достичь ваших целей.
С другой стороны, динамическое инструментарий включает в себя все детали и информацию во время выполнения кода. В большинстве случаев инструменты, которые выполняют динамическое инструментирование, легко написать. С другой стороны, не удается достичь полного покрытия кода из-за того, что путь выполнения зависит от заданных входных данных. Также тот факт, что существует необходимость в подключении внешнего процесса и его использовании, делает процесс более медленным.
AFAIC, проходы LLVM используются для статического инструментирования, потому что сгенерированный код находится во время компиляции и уже записан в конечном двоичном файле и наверняка включает в себя все плюсы и минусы методов статического инструментирования.
В заключение, это вопрос того, что вам нужно. Вы должны выбрать правильный инструмент для вашей работы.