Как контролировать точное количество тестов для запуска с помощью штангенциркуля

Я пытался понять, как правильно контролировать количество прогонов: триал или повтор? Это сбивает с толку: я запускаю тест с --trial 1 и получаю результат:

0% Сценарий{vm=java, пробная версия=0, тест=SendPublisher} 1002183670,00 нс; Ï=315184,24 нс при 3 испытаниях

Похоже, было проведено 3 испытания. Что это за испытания? Что такое повторы? Я могу управлять значением rep с помощью параметров --debug и --debug-reps, но каково значение при запуске без отладки? Мне нужно знать, сколько раз точно вызывался мой тестируемый метод.


person ash1    schedule 04.02.2013    source источник


Ответы (1)


Между Caliper 0.5 и 1.0 немного изменилась терминология, но это должно объяснить это для обоих. Имейте в виду, что в 0.5 все было немного неясно, поэтому большинство изменений, внесенных в 1.0, должны были сделать вещи более ясными и точными.

Калипер 0,5

Один вызов Caliper представляет собой запуск. Каждый запуск имеет определенное количество испытаний, что представляет собой еще одну итерацию всей работы, выполняемой в ходе выполнения. В рамках каждого испытания Caliper выполняет определенное количество сценариев. Сценарий – это комбинация виртуальной машины, эталонного теста и т. д. Время выполнения сценария измеряется временем выполнения некоторого количества повторений — числа, которое передается вашему методу эталонного теста во время выполнения. Многократные повторения, конечно, необходимы, потому что было бы невозможно получить точные измерения для одного вызова в микротесте.

Суппорт 1.0

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

Сценарий примерно определяется тем, что вы измеряете (хост, виртуальная машина, тест, параметры), а инструмент — это код, который выполняет измерение и как он был настроен. Идея заключалась в том, что если бы идеально воспроизводимый эталон был функцией формы f(x)=y, Caliper был бы определен как instrument(scenario)=measurements.

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

Во время выполнения Caliper планирует свое выполнение, вычисляя некоторое количество экспериментов, которые представляют собой комбинацию инструмента, теста, виртуальной машины и параметров. Каждый эксперимент выполняется --trials раз и сообщается как отдельное испытание с собственным идентификатором.

Как использовать параметр reps

Традиционно лучший способ использовать параметр reps — включить в код теста цикл, который выглядит примерно так:

for (int i = 0; i < reps; i++) {…}

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

person gk5885    schedule 04.02.2013
comment
Я не уверен, как правильно продолжить тему - я сделал это странным образом и добавил больше вопросов в другой ответ самому себе. - person ash1; 05.02.2013
comment
Я добавил немного больше деталей о параметре повторений. По сути, отказ от повторений — очень плохая идея. Кроме того, если ваши операции действительно занимают порядка секунд, инструмент микротестирования Caliper, вероятно, не будет работать для вас очень хорошо. Мы обсудили инструмент макробенчмарка, но пока у нас нет твердых планов на его счет. - person gk5885; 05.02.2013