Even faster modulo computation by AntonLapounov 路 Pull Request #406 路 dotnet/runtime (original) (raw)

I don't know how stable our dictionary perf tests are (@adamsitnik?), but I just tried running them comparing master against this PR (dotnet run -c Release -f netcoreapp3.0 --filter System.Collections.*.Dictionary --corerun d:\coreclrtest\old\corerun.exe d:\coreclrtest\new\corerun.exe --join):

Namespace Type Method Toolchain Size Count Mean Error StdDev Median Min Max Ratio RatioSD Gen 0 Gen 1 Gen 2 Allocated
System.Collections CtorDefaultSize Dictionary \new\corerun.exe ? ? 7.971 ns 0.0806 ns 0.0673 ns 7.955 ns 7.834 ns 8.108 ns 1.01 0.03 0.0127 - - 80 B
System.Collections CtorDefaultSize Dictionary \old\corerun.exe ? ? 7.864 ns 0.1780 ns 0.1578 ns 7.812 ns 7.703 ns 8.203 ns 1.00 0.00 0.0127 - - 80 B
System.Collections CtorDefaultSize Dictionary \new\corerun.exe ? ? 21.037 ns 0.1110 ns 0.1038 ns 21.010 ns 20.898 ns 21.241 ns 1.00 0.01 0.0127 - - 80 B
System.Collections CtorDefaultSize Dictionary \old\corerun.exe ? ? 20.957 ns 0.2391 ns 0.2120 ns 20.901 ns 20.639 ns 21.438 ns 1.00 0.00 0.0127 - - 80 B
System.Collections.Concurrent IsEmpty Dictionary \new\corerun.exe 0 ? 179.471 ns 0.9346 ns 0.8743 ns 179.208 ns 178.610 ns 181.316 ns 1.01 0.00 - - - -
System.Collections.Concurrent IsEmpty Dictionary \old\corerun.exe 0 ? 178.311 ns 0.1173 ns 0.0980 ns 178.334 ns 178.195 ns 178.562 ns 1.00 0.00 - - - -
System.Collections.Concurrent IsEmpty Dictionary \new\corerun.exe 0 ? 183.243 ns 2.2765 ns 2.1294 ns 182.639 ns 181.007 ns 189.120 ns 1.03 0.01 - - - -
System.Collections.Concurrent IsEmpty Dictionary \old\corerun.exe 0 ? 178.162 ns 2.0080 ns 1.7801 ns 178.079 ns 175.092 ns 181.594 ns 1.00 0.00 - - - -
System.Collections TryAddDefaultSize Dictionary \new\corerun.exe ? 512 8,642.181 ns 129.1360 ns 120.7939 ns 8,668.149 ns 8,447.814 ns 8,850.007 ns 0.99 0.02 5.4658 0.6790 - 34496 B
System.Collections TryAddDefaultSize Dictionary \old\corerun.exe ? 512 8,760.753 ns 54.7569 ns 51.2197 ns 8,763.397 ns 8,687.479 ns 8,844.295 ns 1.00 0.00 5.4818 0.6634 - 34496 B
System.Collections TryAddDefaultSize Dictionary \new\corerun.exe ? 512 16,811.581 ns 166.5277 ns 155.7701 ns 16,844.224 ns 16,516.245 ns 17,120.856 ns 0.90 0.01 7.5840 1.2189 - 48096 B
System.Collections TryAddDefaultSize Dictionary \old\corerun.exe ? 512 18,783.389 ns 191.5275 ns 179.1549 ns 18,807.522 ns 18,421.037 ns 19,094.640 ns 1.00 0.00 7.5735 1.2500 - 48096 B
System.Collections TryAddGiventSize Dictionary \new\corerun.exe ? 512 5,132.154 ns 24.9406 ns 23.3295 ns 5,139.332 ns 5,094.976 ns 5,169.649 ns 1.05 0.01 1.6658 0.1028 - 10552 B
System.Collections TryAddGiventSize Dictionary \old\corerun.exe ? 512 4,886.334 ns 45.8165 ns 42.8567 ns 4,881.514 ns 4,837.830 ns 4,988.198 ns 1.00 0.00 1.6617 0.1173 - 10552 B
System.Collections TryAddGiventSize Dictionary \new\corerun.exe ? 512 11,921.791 ns 143.4045 ns 134.1407 ns 11,898.788 ns 11,691.920 ns 12,085.736 ns 0.89 0.01 2.3113 0.1887 - 14720 B
System.Collections TryAddGiventSize Dictionary \old\corerun.exe ? 512 13,446.358 ns 97.0206 ns 86.0062 ns 13,485.080 ns 13,259.873 ns 13,520.866 ns 1.00 0.00 2.3148 0.2153 - 14720 B
System.Collections ContainsKeyFalse<Int32, Int32> Dictionary \new\corerun.exe 512 ? 4,196.509 ns 37.6365 ns 35.2052 ns 4,191.837 ns 4,131.109 ns 4,265.272 ns 1.05 0.01 - - - -
System.Collections ContainsKeyFalse<Int32, Int32> Dictionary \old\corerun.exe 512 ? 4,005.805 ns 45.2786 ns 42.3536 ns 4,011.049 ns 3,930.971 ns 4,067.127 ns 1.00 0.00 - - - -
System.Collections ContainsKeyFalse<String, String> Dictionary \new\corerun.exe 512 ? 8,190.718 ns 113.9371 ns 106.5768 ns 8,148.785 ns 8,076.627 ns 8,386.335 ns 0.88 0.02 - - - -
System.Collections ContainsKeyFalse<String, String> Dictionary \old\corerun.exe 512 ? 9,295.734 ns 108.1640 ns 101.1767 ns 9,257.564 ns 9,167.581 ns 9,456.280 ns 1.00 0.00 - - - -
System.Collections ContainsKeyTrue<Int32, Int32> Dictionary \new\corerun.exe 512 ? 2,878.326 ns 27.9878 ns 24.8105 ns 2,876.134 ns 2,839.007 ns 2,920.624 ns 0.82 0.01 - - - -
System.Collections ContainsKeyTrue<Int32, Int32> Dictionary \old\corerun.exe 512 ? 3,529.037 ns 33.0705 ns 30.9342 ns 3,523.313 ns 3,489.681 ns 3,592.514 ns 1.00 0.00 - - - -
System.Collections ContainsKeyTrue<String, String> Dictionary \new\corerun.exe 512 ? 11,939.961 ns 190.4188 ns 178.1178 ns 11,927.492 ns 11,645.192 ns 12,306.622 ns 1.17 0.02 - - - -
System.Collections ContainsKeyTrue<String, String> Dictionary \old\corerun.exe 512 ? 10,199.234 ns 137.2107 ns 128.3469 ns 10,234.781 ns 9,984.764 ns 10,365.183 ns 1.00 0.00 - - - -
System.Collections.Concurrent Count Dictionary \new\corerun.exe 512 ? 11,109.799 ns 55.6945 ns 52.0967 ns 11,097.451 ns 11,063.839 ns 11,209.116 ns 1.00 0.01 - - - -
System.Collections.Concurrent Count Dictionary \old\corerun.exe 512 ? 11,093.136 ns 59.9762 ns 56.1018 ns 11,074.956 ns 11,033.843 ns 11,182.722 ns 1.00 0.00 - - - -
System.Collections.Concurrent Count Dictionary \new\corerun.exe 512 ? 11,059.155 ns 13.5144 ns 11.2851 ns 11,058.164 ns 11,043.449 ns 11,078.536 ns 1.99 0.01 - - - -
System.Collections.Concurrent Count Dictionary \old\corerun.exe 512 ? 5,547.308 ns 29.2962 ns 25.9704 ns 5,539.846 ns 5,521.386 ns 5,601.478 ns 1.00 0.00 - - - -
System.Collections.Concurrent IsEmpty Dictionary \new\corerun.exe 512 ? 1.942 ns 0.0164 ns 0.0146 ns 1.937 ns 1.925 ns 1.968 ns 1.02 0.01 - - - -
System.Collections.Concurrent IsEmpty Dictionary \old\corerun.exe 512 ? 1.906 ns 0.0168 ns 0.0140 ns 1.900 ns 1.894 ns 1.946 ns 1.00 0.00 - - - -
System.Collections.Concurrent IsEmpty Dictionary \new\corerun.exe 512 ? 1.983 ns 0.0230 ns 0.0204 ns 1.982 ns 1.940 ns 2.016 ns 1.11 0.01 - - - -
System.Collections.Concurrent IsEmpty Dictionary \old\corerun.exe 512 ? 1.782 ns 0.0197 ns 0.0184 ns 1.772 ns 1.766 ns 1.817 ns 1.00 0.00 - - - -
System.Collections TryGetValueFalse<Int32, Int32> Dictionary \new\corerun.exe 512 ? 3,228.310 ns 51.6579 ns 48.3208 ns 3,210.684 ns 3,167.055 ns 3,308.001 ns 0.84 0.02 - - - -
System.Collections TryGetValueFalse<Int32, Int32> Dictionary \old\corerun.exe 512 ? 3,847.236 ns 73.3052 ns 78.4358 ns 3,832.010 ns 3,741.345 ns 4,025.378 ns 1.00 0.00 - - - -
System.Collections TryGetValueFalse<String, String> Dictionary \new\corerun.exe 512 ? 8,511.985 ns 94.6626 ns 88.5474 ns 8,478.742 ns 8,400.332 ns 8,671.092 ns 0.82 0.01 - - - -
System.Collections TryGetValueFalse<String, String> Dictionary \old\corerun.exe 512 ? 10,372.818 ns 98.1868 ns 91.8440 ns 10,384.001 ns 10,231.016 ns 10,560.541 ns 1.00 0.00 - - - -
System.Collections TryGetValueTrue<Int32, Int32> Dictionary \new\corerun.exe 512 ? 3,268.947 ns 35.1876 ns 32.9145 ns 3,270.629 ns 3,205.703 ns 3,330.972 ns 0.93 0.01 - - - -
System.Collections TryGetValueTrue<Int32, Int32> Dictionary \old\corerun.exe 512 ? 3,524.350 ns 28.8635 ns 26.9989 ns 3,522.698 ns 3,479.728 ns 3,582.092 ns 1.00 0.00 - - - -
System.Collections TryGetValueTrue<String, String> Dictionary \new\corerun.exe 512 ? 11,183.808 ns 107.2321 ns 83.7198 ns 11,199.878 ns 10,963.612 ns 11,253.554 ns 0.92 0.02 - - - -
System.Collections TryGetValueTrue<String, String> Dictionary \old\corerun.exe 512 ? 12,147.178 ns 238.7773 ns 211.6699 ns 12,162.397 ns 11,922.243 ns 12,662.935 ns 1.00 0.00 - - - -
System.Collections AddGivenSize Dictionary \new\corerun.exe 512 ? 4,917.614 ns 58.8491 ns 55.0475 ns 4,902.796 ns 4,864.008 ns 5,043.991 ns 0.96 0.01 1.6759 0.1183 - 10552 B
System.Collections AddGivenSize Dictionary \old\corerun.exe 512 ? 5,098.848 ns 67.7048 ns 60.0185 ns 5,087.442 ns 5,042.253 ns 5,262.915 ns 1.00 0.00 1.6607 0.1013 - 10552 B
System.Collections AddGivenSize Dictionary \new\corerun.exe 512 ? 11,787.198 ns 135.8180 ns 127.0442 ns 11,791.783 ns 11,565.203 ns 11,985.283 ns 0.85 0.01 2.3113 0.1887 - 14720 B
System.Collections AddGivenSize Dictionary \old\corerun.exe 512 ? 13,931.366 ns 252.1318 ns 210.5415 ns 13,837.602 ns 13,706.755 ns 14,511.746 ns 1.00 0.00 2.3189 0.2208 - 14720 B
System.Collections CreateAddAndRemove Dictionary \new\corerun.exe 512 ? 12,219.999 ns 54.8920 ns 51.3460 ns 12,214.902 ns 12,143.314 ns 12,325.980 ns 0.98 0.01 5.4902 0.5882 - 34496 B
System.Collections CreateAddAndRemove Dictionary \old\corerun.exe 512 ? 12,509.785 ns 75.7809 ns 70.8855 ns 12,512.010 ns 12,395.650 ns 12,629.810 ns 1.00 0.00 5.4500 0.6500 - 34496 B
System.Collections CreateAddAndRemove Dictionary \new\corerun.exe 512 ? 28,848.349 ns 425.4446 ns 397.9611 ns 28,857.743 ns 28,160.139 ns 29,488.310 ns 0.97 0.02 7.5231 1.1574 - 48096 B
System.Collections CreateAddAndRemove Dictionary \old\corerun.exe 512 ? 29,711.881 ns 315.1039 ns 246.0124 ns 29,794.525 ns 29,185.016 ns 29,958.979 ns 1.00 0.00 7.5793 1.1660 - 48096 B
System.Collections CtorFromCollection Dictionary \new\corerun.exe 512 ? 5,328.539 ns 42.2652 ns 39.5349 ns 5,325.277 ns 5,260.674 ns 5,396.585 ns 1.01 0.01 1.6604 0.1064 - 10552 B
System.Collections CtorFromCollection Dictionary \old\corerun.exe 512 ? 5,268.343 ns 80.6653 ns 71.5077 ns 5,261.446 ns 5,141.944 ns 5,399.126 ns 1.00 0.00 1.6741 0.1033 - 10552 B
System.Collections CtorFromCollection Dictionary \new\corerun.exe 512 ? 12,155.699 ns 230.5432 ns 204.3706 ns 12,109.271 ns 11,856.386 ns 12,555.615 ns 0.99 0.03 2.3274 0.1939 - 14720 B
System.Collections CtorFromCollection Dictionary \old\corerun.exe 512 ? 12,281.335 ns 239.0049 ns 275.2384 ns 12,371.391 ns 11,924.332 ns 12,588.691 ns 1.00 0.00 2.3238 0.1936 - 14720 B
System.Collections CtorGivenSize Dictionary \new\corerun.exe 512 ? 600.400 ns 4.2618 ns 3.7779 ns 600.195 ns 594.210 ns 609.696 ns 0.99 0.01 1.6802 0.1185 - 10552 B
System.Collections CtorGivenSize Dictionary \old\corerun.exe 512 ? 604.849 ns 6.0067 ns 5.3248 ns 604.945 ns 593.972 ns 615.608 ns 1.00 0.00 1.6791 0.1199 - 10552 B
System.Collections CtorGivenSize Dictionary \new\corerun.exe 512 ? 828.336 ns 5.2881 ns 4.1286 ns 829.201 ns 820.189 ns 832.795 ns 0.98 0.01 2.3406 0.2324 - 14720 B
System.Collections CtorGivenSize Dictionary \old\corerun.exe 512 ? 845.827 ns 11.1096 ns 9.8484 ns 844.358 ns 823.553 ns 864.187 ns 1.00 0.00 2.3405 0.2323 - 14720 B
System.Collections IndexerSet Dictionary \new\corerun.exe 512 ? 3,627.391 ns 42.7597 ns 39.9974 ns 3,614.602 ns 3,578.202 ns 3,701.079 ns 0.84 0.02 - - - -
System.Collections IndexerSet Dictionary \old\corerun.exe 512 ? 4,314.844 ns 56.0820 ns 52.4592 ns 4,315.108 ns 4,196.149 ns 4,403.242 ns 1.00 0.00 - - - -
System.Collections IndexerSet Dictionary \new\corerun.exe 512 ? 12,620.999 ns 158.5170 ns 148.2769 ns 12,677.643 ns 12,302.958 ns 12,804.831 ns 1.12 0.03 - - - -
System.Collections IndexerSet Dictionary \old\corerun.exe 512 ? 11,317.209 ns 214.2848 ns 200.4422 ns 11,291.518 ns 11,084.916 ns 11,718.958 ns 1.00 0.00 - - - -
System.Collections CreateAddAndClear Dictionary \new\corerun.exe 512 ? 8,549.983 ns 148.1630 ns 138.5918 ns 8,502.677 ns 8,422.230 ns 8,920.879 ns 0.96 0.02 5.4812 0.6550 - 34496 B
System.Collections CreateAddAndClear Dictionary \old\corerun.exe 512 ? 8,901.832 ns 77.5331 ns 68.7310 ns 8,902.074 ns 8,792.957 ns 9,026.153 ns 1.00 0.00 5.4781 0.6759 - 34496 B
System.Collections CreateAddAndClear Dictionary \new\corerun.exe 512 ? 17,432.387 ns 161.1934 ns 142.8938 ns 17,474.341 ns 17,190.930 ns 17,628.844 ns 0.98 0.01 7.5758 1.0522 - 48096 B
System.Collections CreateAddAndClear Dictionary \old\corerun.exe 512 ? 17,685.794 ns 180.9287 ns 169.2408 ns 17,774.844 ns 17,462.791 ns 17,939.059 ns 1.00 0.00 7.5822 1.2046 - 48096 B
System.Collections IterateForEach Dictionary \new\corerun.exe 512 ? 2,964.574 ns 13.4741 ns 12.6037 ns 2,960.335 ns 2,948.225 ns 2,996.135 ns 1.00 0.01 - - - -
System.Collections IterateForEach Dictionary \old\corerun.exe 512 ? 2,968.804 ns 32.1897 ns 30.1103 ns 2,956.874 ns 2,915.913 ns 3,017.299 ns 1.00 0.00 - - - -
System.Collections IterateForEach Dictionary \new\corerun.exe 512 ? 2,610.703 ns 17.8546 ns 15.8276 ns 2,613.893 ns 2,578.656 ns 2,638.124 ns 1.15 0.01 - - - -
System.Collections IterateForEach Dictionary \old\corerun.exe 512 ? 2,276.244 ns 32.7461 ns 30.6307 ns 2,267.638 ns 2,238.542 ns 2,348.679 ns 1.00 0.00 - - - -