Какой самый точный способ оценить производительность кода на C++?
Я пишу код C++, который работает на Ubuntu. Я также использую pthreads. Я делаю свое исследование в области производительности алгоритма.
У меня есть этот алгоритм, который я улучшил, он мог работать в течение 6~ 10 часов. Но измерения времени, которые я беру, также включают очень мелкие вещи, как в мс.
Кроме того, на компьютере, на котором я его запускаю, также выполняются другие процессы, поэтому как мне убедиться, что измеренное время не включает обработку времени для других процессов.
1 ответ
Не существует единого "наиболее точного пути". Как и в случае любого измерения, вам сначала нужно определить, что вы хотите измерить. Если вы просто хотите измерить время выполнения, целесообразно повторять одно и то же задание и останавливать время.
Если вы хотите измерить время, в течение которого центральный процессор (ы) фактически занят работой над вашей задачей, top
может быть интересной для вас программой.
Если вам нужно узнать, сколько времени тратится на какую подпрограмму, пакет linux-utils содержит perf
, который может измерять индивидуальное время звонка.
Часто задержки без CPU доминируют во время выполнения. Например, не имеет смысла просто измерять время, затрачиваемое процессором, когда вы ожидаете сетевой ввод или данные с жесткого диска.
Итак: ваш вопрос на самом деле является вопросом для себя: что вы хотите измерить? "Алгоритм производительности" предполагает, что вы занимаетесь информатикой, и в этом случае вы должны иметь доступ к обширной литературе, которая объясняет, что может представлять интерес. Нет единого "решения" вопроса "что является наиболее точным измерением", если только вы не определите "измерение" более близко; это ваша работа, и обычно это сложная часть измерения вещей.