Состояние бенчмарка Google.PauseTiming() и state.ResumeTiming() занимают много времени
Я провожу некоторые тесты производительности с помощью API бенчмарка Google. Я использую state.PauseTiming() и state.ResumeTiming(), чтобы избежать ненужных сегментов кода, проходящих через путь перфорации. Я приложил образец кода ниже
while (state.KeepRunning()) {
state.PauseTiming();
state.ResumeTiming();
state.PauseTiming();
state.ResumeTiming();
}
Эти функции сами заняли 323 нс за 2 паузы и возобновления.
hiRun on (16 X 3196.36 MHz CPU s)
2019-06-19 11:21:06
---------------------------------------------------------------
Benchmark Time CPU Iterations
---------------------------------------------------------------
Benchmark_Test1 323 ns 324 ns 2158319
Это ошибка в API тестов Google или есть какие-то обходные пути для этого?
0 ответов
У меня был аналогичный вариант использования, и я заметил, что пауза и возобновление имеют много накладных расходов, это также упоминается в их документации.
Обходной путь для этого - еще одна функция Google Benchmarks. Вручную измерьте время выполнения части кода внутри цикла for. Вы можете сделать это с помощью ручных таймеров (https://github.com/google/benchmark).
Вы берете временные метки хронографа до и после сегмента кода, для которого вы хотите время выполнения, а затем устанавливаете его в состояние на каждой итерации, используя SetIterationTime
.
Когда вы вызываете этот тест, вам нужно добавить ->UseManualTime();