2015-08-28 3 views
3

Я пишу код C++, который работает на Ubuntu. Я также использую pthreads. Я занимаюсь исследованиями в области производительности алгоритма.Каков самый точный способ оценить временную производительность кода в C++

У меня есть этот алгоритм, который я улучшил, он может работать в течение 6-10 часов. Но измерения времени, которые я принимаю, также включают в себя вещи, которые очень маленькие, например, в мс.

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

ответ

4

Нет единого «наиболее точного пути». Как и при любом измерении, вам нужно будет определить, что вы хотите измерить в первую очередь. Если вы просто хотите измерить время выполнения, то повторное выполнение одной и той же задачи и прекращение времени является подходящим.

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

Если вам нужно знать, сколько времени тратится на какую-то подпрограмму, пакет linux-utils содержит perf, который может измерять отдельные времена разговора.

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

Итак: ваш вопрос на самом деле является вопросом для вас: что вы хотите измерить? «Производительность алгоритмов» предполагает, что вы занимаетесь информатикой, и в этом случае вы должны иметь доступ к обширной литературе, которая объясняет, что может представлять интерес. Не существует единого «решения» вопроса «что является самым точным измерением», если вы не уточните «измерение» более близко; это ваша работа, и, как правило, это труднее всего измерить.