Блог пользователя Totktonada

Автор Totktonada, 11 лет назад, По-русски

Доброго времени суток! Подскажите, пожалуйста, как измерить время работы процесса в С++? Конкретнее: хочу наиболее "чисто" сравнить время выполнения двух решений одной задачи на практике. Слышал что-то о GetProcessTimes(), но так и не разобрался. Просто если юзать clock(), то уж слишком большой разброс получается.

  • Проголосовать: нравится
  • +9
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

А что с GetProcessTimes() не так? Она возвращает два значения lpKernelTime и lpUserTime — это время, проведённое программой в системных вызовах, и время, потраченное собственно на вычисления. Их надо просто сложить.

Здесь сказано, как преобразовать результаты в long long: http://msdn.microsoft.com/en-us/library/windows/desktop/ms683223.aspx

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

»
11 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

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

»
11 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Просто для замера времени выполнения исполняемого файла (aka .exe) можно использовать внешние утилиты. Например runexe поддерживаемая в том числе MikeMirzayanov. Качаешь, запускаешь, получаешь чистое процессорное время.

Если хочешь именно вставить замер в своё решение: код открыт, так что можешь оттуда куски понавыдирать.

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