Плюсы / минусы статического и динамического приборостроения - PullRequest
2 голосов
/ 11 января 2010

Существует много статических и динамических инструментов. Soot - это инструмент статического инструментария для байт-кода Java. Pin и Valgrind являются инструментами динамического инструментария для двоичных файлов.

Каковы плюсы и минусы статических и динамических инструментов? Я думаю, что статические инструментальные средства лучше с точки зрения производительности во время выполнения, тогда как динамические инструменты более мощные. Пожалуйста, сравните их с точки зрения способности и производительности.

Плюс, чем отличаются инструментальные средства от написания прохода LLVM?

Ответы [ 2 ]

2 голосов
/ 23 августа 2015

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

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

AFAIC, проходы LLVM используются для статического инструментирования, потому что сгенерированный код находится во время компиляции и уже записан в окончательном двоичном файле и наверняка включает в себя все плюсы и минусы методов статического инструментария.

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

2 голосов
/ 03 февраля 2010

Я предполагаю, что необходимо найти код, который занимает значительное время и который вы могли бы оптимизировать, чтобы сэкономить это время. Это другая цель, отличная от времени.

Я скептически отношусь к статическим анализаторам, потому что все зависит от набора входных данных.

Динамический инструментарий пытается измерить свойства функций, такие как: собственное время и общее время, абсолютное, среднее и процентное соотношение. Также учитывается количество вызовов и роль каждой подпрограммы в графе вызовов.

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

В наши дни (ИМХО) вам нужен профилировщик выборки, который производит выборку стека вызовов, а не только счетчик программы. Это должно сэмплироваться по времени настенных часов, а не только по времени процессора. Образцы не должны быть взяты на высокой частоте. Он должен подавлять выборку, когда приложение ожидает ввода данных пользователем. Он должен давать вам информацию на уровне строки или инструкции, а не только на уровне функций. Самая важная статистика, которую она должна предоставить для строки кода, - это процент выборок, в которых она содержится, поскольку это наиболее прямая мера времени, которую можно сохранить, если оптимизировать эту строку.

Это могут сделать несколько профилировщиков, в частности Oprofile и RotateRight / Zoom.

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