Как наиболее точно оценить временную производительность кода в переполнении стека?

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

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

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

3

Решение

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

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

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

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

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

4

Другие решения