повысить дух карма реальная производительность генератора

Я проверял работоспособность генератора бодрости духа, когда был несколько удивлен снижением производительности при использовании политики для реальных чисел.
Жить на Coliru

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

Как можно видеть, использование политики снижает производительность в 2-3 раза (в 10 раз). Это ожидаемое поведение?

Мои цифры:

Спринт: 0.367
Iostreams: 0,818
формат: 1.036

карма: 0,087
(строка): 0,152
карма (струна) с
политика: 0.396
карма (правило): 0,12
карма (прямая): 0,083
карма
(прямая) строка: 0,089
Строка кармы (прямая) с политикой: 0,278

Построен с x64 VC14

2

Решение

Это не регресс, если сравнивать яблоки и груши. В этом случае дважды.

Первая пара яблоко / груша

Вот fixed это яблоки, и scientific это груши.

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

важно scientific включает в себя принятие log10 из входных значений, чтобы установить величину числа в десятизначных цифрах перед десятичной точкой:

введите описание изображения здесь

По умолчанию real_policies вызывает «дешевый» вердикт:

    static int floatfield(T n)
{
if (traits::test_zero(n))
return fmtflags::fixed;

T abs_n = traits::get_absolute_value(n);
return (abs_n >= 1e5 || abs_n < 1e-3)
? fmtflags::scientific : fmtflags::fixed;
}

Таким образом, вы можете наблюдать, как разница исчезает, если вы выбираете формат, который в любом случае переключится на научный: 123456.123456 вместо 12345.12345…:

clock resolution: mean is 16.9199 ns (40960002 iterations)

benchmarking format_performance_direct_string
collecting 100 samples, 1 iterations each, in estimated 4.7784 ms
mean: 238.81 ns, lb 187.22 ns, ub 493.46 ns, ci 0.95
std dev: 507.559 ns, lb 5.36317 ns, ub 1111.94 ns, ci 0.95
found 11 outliers among 100 samples (11%)
variance is severely inflated by outliers

benchmarking format_performance_direct_string_with_policy
collecting 100 samples, 96 iterations each, in estimated 1699.2 μs
mean: 173.927 ns, lb 172.764 ns, ub 176.939 ns, ci 0.95
std dev: 8.33706 ns, lb 0.256875 ns, ub 16.9312 ns, ci 0.95
found 2 outliers among 100 samples (2%)
variance is moderately inflated by outliers

benchmarking format_performance_string
collecting 100 samples, 84 iterations each, in estimated 1705.2 μs
mean: 312.646 ns, lb 311.027 ns, ub 314.819 ns, ci 0.95
std dev: 9.42479 ns, lb 7.32668 ns, ub 15.2546 ns, ci 0.95
found 1 outliers among 100 samples (1%)
variance is moderately inflated by outliers

benchmarking format_performance_string_with_policy
collecting 100 samples, 31 iterations each, in estimated 1736 μs
mean: 193.572 ns, lb 192.257 ns, ub 200.032 ns, ci 0.95
std dev: 12.8586 ns, lb 0.322008 ns, ub 30.6708 ns, ci 0.95
found 4 outliers among 100 samples (4%)
variance is severely inflated by outliers

Как видите, пользовательская политика (предсказуема) намного быстрее

Как Интерактивная ссылка:

введите описание изображения здесь

Вторая пара яблок / груш

Это происходит, когда вы закрепили точность до 15 цифр.

Используя отдельный сравнительный тест двух политик, который дополнительно обеспечивает точность: http://paste.ubuntu.com/13087371/ Вы можете видеть, что это больше, чем теряет преимущество фиксации формата в scientific видно выше:

clock resolution: mean is 18.6041 ns (40960002 iterations)

benchmarking format_performance_direct_string_with_policy
collecting 100 samples, 1 iterations each, in estimated 1892.9 μs
mean: 228.83 ns, lb 179.9 ns, ub 471.84 ns, ci 0.95
std dev: 483.67 ns, lb 2.29965 ns, ub 1153.98 ns, ci 0.95
found 14 outliers among 100 samples (14%)
variance is severely inflated by outliers

benchmarking format_performance_direct_string_with_policy15
collecting 100 samples, 45 iterations each, in estimated 1858.5 μs
mean: 418.697 ns, lb 410.976 ns, ub 438.865 ns, ci 0.95
std dev: 58.0984 ns, lb 24.1313 ns, ub 115.549 ns, ci 0.95
found 6 outliers among 100 samples (6%)
variance is severely inflated by outliers

benchmarking format_performance_string_with_policy
collecting 100 samples, 87 iterations each, in estimated 1870.5 μs
mean: 262.057 ns, lb 254.73 ns, ub 269.354 ns, ci 0.95
std dev: 37.2502 ns, lb 31.1261 ns, ub 50.5813 ns, ci 0.95
found 17 outliers among 100 samples (17%)
variance is severely inflated by outliers

benchmarking format_performance_string_with_policy15
collecting 100 samples, 42 iterations each, in estimated 1898.4 μs
mean: 458.505 ns, lb 453.626 ns, ub 481.044 ns, ci 0.95
std dev: 45.5401 ns, lb 4.30147 ns, ub 108.045 ns, ci 0.95
found 4 outliers among 100 samples (4%)
variance is severely inflated by outliers

Или на графике: Интерактивная ссылка

введите описание изображения здесь

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector