簡體   English   中英

提高精神業力真正的發電機性能

[英]boost spirit karma real generator performance

當我對使用實數策略時性能下降感到有些驚訝時,我正在檢查精神增強因果報應發生器的性能。 住在科利魯
該代碼取自booster spirit,並添加了一些測試功能。 Coliru示例替換了使用的計時器。 請注意,Coliru中止了長時間運行的編,因此可能不會結束所有測試。
正如人們所看到的,使用策略會使性能降低2-3倍(在coliru上是x10)。 這是預期的行為嗎?

我的數字:

sprintf:0.367
iostreams:0.818
格式:1.036
業力:0.087
(字符串):0.152
業障(字串)與政策:0.396
業力(規則):0.12
業力(直接):0.083
因果(直接)字符串:0.089
有政策的業障(直接)字串:0.278


內置x64 VC14

如果您比較蘋果和梨,那不是回歸。 在這種情況下,兩次。

第一對蘋果/梨

這里fixed是蘋果, scientific是梨。

不僅結果輸出明顯不同,而且要達到該結果需要不同的步驟。

重要的是, scientific涉及對輸入值進行log10運算,以便確定小數點前以10進制為基數的數字的大小:

在此處輸入圖片說明

默認情況下,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

或在圖形中: Interactive Link

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM