Состояние бенчмарка 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();

Другие вопросы по тегам