Есть программа, для реализации функционала которой существует множество алгоритмов с множеством параметров. Все алгоритмы работают в однопоточной среде. Необходимо оценить быстродействие каждого из них.
Тут полагается вспомнить, что каждой среде свои методы замера времени: где-то это QueryPerformanceFrequency/GetSystemTime, где-то clock_gettime/gettimeofday/boost::timer/clock. На некоторых платформах срабатывает
rdtsc/
HPET. Для каждого случая из этих функций переизобретается велосипед.
Ожидается синтаксис по принципу юнит-тестов:
TEST(DecompessTest, 100, 10) {
CASE (Compressor1) {
decompress(data1, TYPE_ONE);
}
CASE (Compressor2) {
decompress(data2, TYPE_TWO);
}
}
После запуска каждый CASE теста прогоняется 1000 раз, причём время замеряется для каждой сотни прогонов. В конце определяется среднее арифметическое времени выполнения каждого CASE и стандартное отклонение и выводится на стандартный поток вывода.
DecompessTest:
Compressor1: 52100 ns (±150 ns)
Compressor2: 67500 ns (±205 ns)
Обычные профайлеры в этом случае не интересуют: тут не стоит задача нахождения слабого звена в программе путём контроля времени выполнения всего подряд на всех уровнях вложенности. Интересует лишь среднее время выполнения участка со стандартным отклонением, на сборке с полной оптимизацией без отладочных символов.
Есть ли какое-нибудь кроссплатформенное готовое решение для реализации вышеописанного?