Как получить согласованные контрольные показатели критериев или интерпретировать результаты разных прогонов?

Я пытаюсь оптимизировать некоторый код, используя критерий, чтобы попытаться сравнить, например, эффект добавления прагмы INLINEк функции. Но я обнаружил, что результаты не совпадают между компиляциями/запусками re -.

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

Подробности моего конкретного случая

Это ортогонально моим основным вопросам выше,но пара вещей может вызвать несоответствие в моем конкретном случае:

  1. Я пытаюсь сравнить действия IOс использованием whnfIO, потому что метод с использованием whnfв этом примере не сработал.

  2. мой код использует параллелизм

  3. У меня открыто много вкладок и дерьма

Пример вывода

Оба они взяты из одного и того же кода, скомпилированного одинаковым образом. Я сделал первый запуск непосредственно ниже, внес изменения и провел еще один тест, затем вернулся и снова запустил первый код, скомпилировав его с:

ghc --make -fforce-recomp -threaded -O2 Benchmark.hs

Первый запуск:

estimating clock resolution...                                      
mean is 16.97297 us (40001 iterations)                              
found 6222 outliers among 39999 samples (15.6%)                     
  6055 (15.1%) high severe                                          
estimating cost of a clock call...                                  
mean is 1.838749 us (49 iterations)                                 
found 8 outliers among 49 samples (16.3%)                           
  3 (6.1%) high mild                                                
  5 (10.2%) high severe                                             

benchmarking actors/insert 1000, query 1000                         
collecting 100 samples, 1 iterations each, in estimated 12.66122 s  
mean: 110.8566 ms, lb 108.4353 ms, ub 113.6627 ms, ci 0.950         
std dev: 13.41726 ms, lb 11.58487 ms, ub 16.25262 ms, ci 0.950      
found 2 outliers among 100 samples (2.0%)                           
  2 (2.0%) high mild                                                
variance introduced by outliers: 85.211%                            
variance is severely inflated by outliers                           

benchmarking actors/insert 1000, query 100000                       
collecting 100 samples, 1 iterations each, in estimated 945.5325 s  
mean: 9.319406 s, lb 9.152310 s, ub 9.412688 s, ci 0.950            
std dev: 624.8493 ms, lb 385.4364 ms, ub 956.7049 ms, ci 0.950      
found 6 outliers among 100 samples (6.0%)                           
  3 (3.0%) low severe                                               
  1 (1.0%) high severe                                              
variance introduced by outliers: 62.576%                            
variance is severely inflated by outliers

Второй запуск, ~в 3 раза медленнее:

estimating clock resolution...
mean is 51.46815 us (10001 iterations)
found 203 outliers among 9999 samples (2.0%)
  117 (1.2%) high severe
estimating cost of a clock call...
mean is 4.615408 us (18 iterations)
found 4 outliers among 18 samples (22.2%)
  4 (22.2%) high severe

benchmarking actors/insert 1000, query 1000
collecting 100 samples, 1 iterations each, in estimated 38.39478 s
mean: 302.4651 ms, lb 295.9046 ms, ub 309.5958 ms, ci 0.950
std dev: 35.12913 ms, lb 31.35431 ms, ub 42.20590 ms, ci 0.950
found 1 outliers among 100 samples (1.0%)
variance introduced by outliers: 84.163%
variance is severely inflated by outliers

benchmarking actors/insert 1000, query 100000
collecting 100 samples, 1 iterations each, in estimated 2644.987 s
mean: 27.71277 s, lb 26.95914 s, ub 28.97871 s, ci 0.950
std dev: 4.893489 s, lb 3.373838 s, ub 7.302145 s, ci 0.950
found 21 outliers among 100 samples (21.0%)
  4 (4.0%) low severe
  3 (3.0%) low mild
  3 (3.0%) high mild
  11 (11.0%) high severe
variance introduced by outliers: 92.567%
variance is severely inflated by outliers

Я заметил, что если я масштабирую по «оценочной стоимости вызова часов», два эталона довольно близки. Это то, что я должен сделать, чтобы получить реальное число для сравнения?

13
задан hammar 4 June 2013 в 02:50
поделиться